diff --git a/docs/astro/src/content/docs/reference/std-widgets/basic-widgets/spinbox.mdx b/docs/astro/src/content/docs/reference/std-widgets/basic-widgets/spinbox.mdx
index 8dfe526ead6..89b95642b8e 100644
--- a/docs/astro/src/content/docs/reference/std-widgets/basic-widgets/spinbox.mdx
+++ b/docs/astro/src/content/docs/reference/std-widgets/basic-widgets/spinbox.mdx
@@ -83,6 +83,16 @@ The size that is used on increment or decrement of `value`.
The horizontal alignment of the text.
+### font-family
+
+The font family of the input text
+
+
+### font-italic
+
+The italic state of the font of the input text
+
+
## Callbacks
### edited(int)
diff --git a/internal/backends/qt/qt_widgets/spinbox.rs b/internal/backends/qt/qt_widgets/spinbox.rs
index e9a3d6e642c..825454b225b 100644
--- a/internal/backends/qt/qt_widgets/spinbox.rs
+++ b/internal/backends/qt/qt_widgets/spinbox.rs
@@ -32,6 +32,8 @@ pub struct NativeSpinBox {
pub maximum: Property,
pub step_size: Property,
pub horizontal_alignment: Property,
+ pub font_family: Property,
+ pub font_italic: Property,
pub cached_rendering_data: CachedRenderingData,
pub edited: Callback,
data: Property,
@@ -63,6 +65,14 @@ if (pressed) {
option.stepEnabled = QAbstractSpinBox::StepDownEnabled | QAbstractSpinBox::StepUpEnabled;
option.frame = true;
}
+
+QFont spinBoxFont(const QWidget *widget, const QString &family, bool italic) {
+QFont font = widget->font();
+if (!family.isEmpty())
+ font.setFamily(family);
+font.setItalic(italic);
+return font;
+}
}}
impl Item for NativeSpinBox {
@@ -89,6 +99,8 @@ impl Item for NativeSpinBox {
let pressed = data.pressed;
let enabled = self.enabled();
let read_only = self.read_only();
+ let font_family: qttypes::QString = self.font_family().as_str().into();
+ let font_italic = self.font_italic();
let widget: NonNull<()> = SlintTypeErasedWidgetPtr::qwidget_ptr(&self.widget_ptr);
let size = cpp!(unsafe [
@@ -97,12 +109,15 @@ impl Item for NativeSpinBox {
pressed as "bool",
enabled as "bool",
read_only as "bool",
+ font_family as "QString",
+ font_italic as "bool",
widget as "QWidget*"
] -> qttypes::QSize as "QSize" {
ensure_initialized();
auto style = qApp->style();
QStyleOptionSpinBox option;
+ option.fontMetrics = QFontMetrics(spinBoxFont(widget, font_family, font_italic));
initQSpinBoxOptions(option, pressed, enabled, read_only, active_controls);
QStyleOptionFrame frame;
@@ -327,6 +342,8 @@ impl Item for NativeSpinBox {
let active_controls = data.active_controls;
let pressed = data.pressed;
let read_only = this.read_only();
+ let font_family: qttypes::QString = this.font_family().as_str().into();
+ let font_italic = this.font_italic();
let horizontal_alignment = match this.horizontal_alignment() {
TextHorizontalAlignment::Left => key_generated::Qt_AlignmentFlag_AlignLeft,
@@ -347,10 +364,14 @@ impl Item for NativeSpinBox {
pressed as "bool",
dpr as "float",
initial_state as "int",
- horizontal_alignment as "int"
+ horizontal_alignment as "int",
+ font_family as "QString",
+ font_italic as "bool"
] {
auto style = qApp->style();
+ QFont font = spinBoxFont(widget, font_family, font_italic);
QStyleOptionSpinBox option;
+ option.fontMetrics = QFontMetrics(font);
option.styleObject = widget;
option.state |= QStyle::State(initial_state);
if (enabled && has_focus) {
@@ -372,6 +393,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)->setFont(font);
(*painter)->drawText(text_rect, QString::number(value), QTextOption(static_cast(horizontal_alignment)));
});
}
diff --git a/internal/compiler/builtin_elements.rs b/internal/compiler/builtin_elements.rs
index 7704b98a320..529b73acc8b 100644
--- a/internal/compiler/builtin_elements.rs
+++ b/internal/compiler/builtin_elements.rs
@@ -3748,6 +3748,8 @@ fn build(l: &mut Loader) {
in property step-size: 1;
in property horizontal-alignment;
in property read-only;
+ in property font-family;
+ in property font-italic;
callback edited(value: int);
} }
diff --git a/internal/compiler/widgets/common/spinbox-base.slint b/internal/compiler/widgets/common/spinbox-base.slint
index 6e23192529f..9c96488c677 100644
--- a/internal/compiler/widgets/common/spinbox-base.slint
+++ b/internal/compiler/widgets/common/spinbox-base.slint
@@ -8,6 +8,8 @@ export component SpinBoxBase {
in property color <=> text-input.color;
in property font-size <=> text-input.font-size;
in property font-weight <=> text-input.font-weight;
+ in property font-family <=> text-input.font-family;
+ in property font-italic <=> text-input.font-italic;
in property selection-background-color <=> text-input.selection-background-color;
in property selection-foreground-color <=> text-input.selection-foreground-color;
in property horizontal-alignment <=> text-input.horizontal-alignment;
@@ -31,15 +33,15 @@ export component SpinBoxBase {
public function increment() {
if !root.read-only {
- root.update-value(root.value + root.step-size);
- root.update-text-and-cursor();
+ root.update-value(root.value + root.step-size);
+ root.update-text-and-cursor();
}
}
public function decrement() {
if !root.read-only {
- root.update-value(root.value - root.step-size);
- root.update-text-and-cursor();
+ root.update-value(root.value - root.step-size);
+ root.update-text-and-cursor();
}
}
diff --git a/internal/compiler/widgets/cosmic/spinbox.slint b/internal/compiler/widgets/cosmic/spinbox.slint
index 26a2cc6eb68..df3ef37b9ee 100644
--- a/internal/compiler/widgets/cosmic/spinbox.slint
+++ b/internal/compiler/widgets/cosmic/spinbox.slint
@@ -41,6 +41,8 @@ export component SpinBox {
in property enabled <=> base.enabled;
in property read-only <=> base.read-only;
in property step-size <=> base.step-size;
+ in property font-family <=> base.font-family;
+ in property font-italic <=> base.font-italic;
in property horizontal-alignment <=> base.horizontal-alignment;
out property has-focus <=> base.has-focus;
in-out property value <=> base.value;
diff --git a/internal/compiler/widgets/cupertino/spinbox.slint b/internal/compiler/widgets/cupertino/spinbox.slint
index befc1af555c..9c0b3982cea 100644
--- a/internal/compiler/widgets/cupertino/spinbox.slint
+++ b/internal/compiler/widgets/cupertino/spinbox.slint
@@ -66,6 +66,8 @@ export component SpinBox {
in property enabled <=> base.enabled;
in property read-only <=> base.read-only;
in property step-size <=> base.step-size;
+ in property font-family <=> base.font-family;
+ in property font-italic <=> base.font-italic;
in property horizontal-alignment <=> base.horizontal-alignment;
out property has-focus <=> base.has-focus;
in-out property value <=> base.value;
diff --git a/internal/compiler/widgets/fluent/spinbox.slint b/internal/compiler/widgets/fluent/spinbox.slint
index 37a22977f50..6d29c213407 100644
--- a/internal/compiler/widgets/fluent/spinbox.slint
+++ b/internal/compiler/widgets/fluent/spinbox.slint
@@ -41,6 +41,8 @@ export component SpinBox {
in property step-size <=> base.step-size;
in property read-only <=> base.read-only;
in property horizontal-alignment <=> base.horizontal-alignment;
+ in property font-family <=> base.font-family;
+ in property font-italic <=> base.font-italic;
out property has-focus <=> base.has-focus;
in-out property value <=> base.value;
diff --git a/internal/compiler/widgets/material/spinbox.slint b/internal/compiler/widgets/material/spinbox.slint
index be00d951fcd..224864d805c 100644
--- a/internal/compiler/widgets/material/spinbox.slint
+++ b/internal/compiler/widgets/material/spinbox.slint
@@ -63,6 +63,8 @@ export component SpinBox {
in property enabled <=> base.enabled;
in property step-size <=> base.step-size;
in property read-only <=> base.read-only;
+ in property font-family <=> base.font-family;
+ in property font-italic <=> base.font-italic;
in property horizontal-alignment <=> base.horizontal-alignment;
out property has-focus <=> base.has-focus;
in-out property value <=> base.value;
diff --git a/tests/cases/widgets/spinbox_font.slint b/tests/cases/widgets/spinbox_font.slint
new file mode 100644
index 00000000000..409591f4879
--- /dev/null
+++ b/tests/cases/widgets/spinbox_font.slint
@@ -0,0 +1,31 @@
+// Copyright © SixtyFPS GmbH
+// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
+
+import { SpinBox } from "std-widgets.slint";
+
+export component TestCase inherits Window {
+ width: 100px;
+ height: 100px;
+
+ box := SpinBox {
+ font-family: "DejaVu Serif";
+ font-italic: true;
+ }
+
+ out property test: box.font-family == "DejaVu Serif" && box.font-italic;
+}
+
+/*
+
+```rust
+let instance = TestCase::new().unwrap();
+assert!(instance.get_test());
+```
+
+```cpp
+auto handle = TestCase::create();
+const TestCase &instance = *handle;
+assert(instance.get_test());
+```
+
+*/