std-widgets: added horizontal-alignment to SpinBox (#6778)

This commit is contained in:
FloVanGH 2024-11-15 08:05:57 +00:00 committed by GitHub
parent d8a62ab41e
commit 5ea05e18af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 25 additions and 7 deletions

View file

@ -12,6 +12,7 @@ description: SpinBox api.
- **`minimum`** (_in_ _int_): The minimum value (default: 0).
- **`maximum`** (_in_ _int_): The maximum value (default: 100).
- **`step-size`** (_in_ _int_): The size that is used on increment or decrement of `value` (default: 1).
- **`horizontal-alignment`** (_in_ _enum [`TextHorizontalAlignment`](../builtins/enums.md#texthorizontalalignment)_): The horizontal alignment of the text.
### Callbacks

View file

@ -1,8 +1,10 @@
// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
use crate::key_generated;
use i_slint_core::{
input::{FocusEventResult, KeyEventType},
items::TextHorizontalAlignment,
platform::PointerEventButton,
};
@ -27,6 +29,7 @@ pub struct NativeSpinBox {
pub minimum: Property<i32>,
pub maximum: Property<i32>,
pub step_size: Property<i32>,
pub horizontal_alignment: Property<TextHorizontalAlignment>,
pub cached_rendering_data: CachedRenderingData,
pub edited: Callback<IntArg>,
data: Property<NativeSpinBoxData>,
@ -290,6 +293,12 @@ impl Item for NativeSpinBox {
let active_controls = data.active_controls;
let pressed = data.pressed;
let horizontal_alignment = match this.horizontal_alignment() {
TextHorizontalAlignment::Left => key_generated::Qt_AlignmentFlag_AlignLeft,
TextHorizontalAlignment::Center => key_generated::Qt_AlignmentFlag_AlignHCenter,
TextHorizontalAlignment::Right => key_generated::Qt_AlignmentFlag_AlignRight,
};
cpp!(unsafe [
painter as "QPainterPtr*",
widget as "QWidget*",
@ -300,7 +309,8 @@ impl Item for NativeSpinBox {
active_controls as "int",
pressed as "bool",
dpr as "float",
initial_state as "int"
initial_state as "int",
horizontal_alignment as "int"
] {
auto style = qApp->style();
QStyleOptionSpinBox option;
@ -313,6 +323,7 @@ impl Item for NativeSpinBox {
initQSpinBoxOptions(option, pressed, enabled, active_controls);
style->drawComplexControl(QStyle::CC_SpinBox, &option, painter->get(), widget);
static_cast<QAbstractSpinBox*>(widget)->setAlignment(Qt::AlignRight);
QStyleOptionFrame frame;
frame.state = option.state;
frame.palette = option.palette;
@ -324,7 +335,7 @@ impl Item for NativeSpinBox {
QRect text_rect = qApp->style()->subElementRect(QStyle::SE_LineEditContents, &frame, widget);
text_rect.adjust(1, 2, 1, 2);
(*painter)->setPen(option.palette.color(QPalette::Text));
(*painter)->drawText(text_rect, QString::number(value));
(*painter)->drawText(text_rect, QString::number(value), QTextOption(static_cast<Qt::AlignmentFlag>(horizontal_alignment)));
});
}
}

View file

@ -481,6 +481,7 @@ export component NativeSpinBox {
in property <int> minimum;
in property <int> maximum: 100;
in property <int> step-size: 1;
in property <TextHorizontalAlignment> horizontal-alignment;
callback edited(int /* value */);
//-is_internal
//-accepts_focus

View file

@ -41,13 +41,14 @@ export component SpinBox {
in property <int> maximum <=> base.maximum;
in property <bool> enabled <=> base.enabled;
in property <int> step-size <=> base.step-size;
in property <TextHorizontalAlignment> horizontal-alignment <=> base.horizontal-alignment;
out property <bool> has-focus <=> base.has-focus;
in-out property <int> value <=> base.value;
callback edited <=> base.edited;
min-width: 112px;
min-height: 32px;
min-width: max(112px, layout.min-width);
min-height: max(32px, layout.min-height);
vertical-stretch: 0;
horizontal-stretch: 1;
forward-focus: base;
@ -87,6 +88,7 @@ export component SpinBox {
border-width: 1px;
base := SpinBoxBase {
width: 100px;
color: CosmicPalette.control-foreground;
font-size: CosmicFontSettings.body.font-size;
font-weight: CosmicFontSettings.body.font-weight;

View file

@ -84,6 +84,7 @@ export component SpinBox {
in property <int> maximum <=> base.maximum;
in property <bool> enabled <=> base.enabled;
in property <int> step-size <=> base.step-size;
in property <TextHorizontalAlignment> horizontal-alignment <=> base.horizontal-alignment;
out property <bool> has-focus <=> base.has-focus;
in-out property <int> value <=> base.value;
@ -91,7 +92,7 @@ export component SpinBox {
private property <brush> background: CupertinoPalette.control-background;
min-width: 128px;
min-width: max(128px, layout.min-width);
min-height: max(22px, layout.min-height);
vertical-stretch: 0;
horizontal-stretch: 1;

View file

@ -38,13 +38,14 @@ export component SpinBox {
in property <int> maximum <=> base.maximum;
in property <bool> enabled <=> base.enabled;
in property <int> step-size <=> base.step-size;
in property <TextHorizontalAlignment> horizontal-alignment <=> base.horizontal-alignment;
out property <bool> has-focus <=> base.has-focus;
in-out property <int> value <=> base.value;
callback edited <=> base.edited;
min-width: 128px;
min-height: 30px;
min-width: max(128px, layout.min-width);
min-height: max(30px, layout.min-height);
vertical-stretch: 0;
horizontal-stretch: 1;
forward-focus: base;

View file

@ -64,6 +64,7 @@ export component SpinBox {
in property <int> maximum <=> base.maximum;
in property <bool> enabled <=> base.enabled;
in property <int> step-size <=> base.step-size;
in property <TextHorizontalAlignment> horizontal-alignment <=> base.horizontal-alignment;
out property <bool> has-focus <=> base.has-focus;
in-out property <int> value <=> base.value;