mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 06:11:16 +00:00
Fix native widget with the GL backend and a scale factor
We need to keep everything in logical, but it most likely already it
This commit is contained in:
parent
b0685fe849
commit
9adf95c99f
1 changed files with 92 additions and 114 deletions
|
@ -74,7 +74,12 @@ macro_rules! fn_render {
|
||||||
backend.draw_cached_pixmap(
|
backend.draw_cached_pixmap(
|
||||||
&self.cached_rendering_data,
|
&self.cached_rendering_data,
|
||||||
&mut |callback| {
|
&mut |callback| {
|
||||||
let $size: qttypes::QSize = get_size!(self);
|
let width = self.width() * $dpr;
|
||||||
|
let height = self.height() * $dpr;
|
||||||
|
if width < 1. || height < 1. {
|
||||||
|
return Default::default();
|
||||||
|
};
|
||||||
|
let $size = qttypes::QSize { width: width as _, height: height as _ };
|
||||||
let mut imgarray = QImageWrapArray::new($size, $dpr);
|
let mut imgarray = QImageWrapArray::new($size, $dpr);
|
||||||
let img = &mut imgarray.img;
|
let img = &mut imgarray.img;
|
||||||
let mut painter_ = cpp!(unsafe [img as "QImage*"] -> QPainter as "QPainter" { return QPainter(img); });
|
let mut painter_ = cpp!(unsafe [img as "QImage*"] -> QPainter as "QPainter" { return QPainter(img); });
|
||||||
|
@ -165,18 +170,16 @@ impl Item for NativeButton {
|
||||||
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layouting_info(self: Pin<&Self>, window: &ComponentWindow) -> LayoutInfo {
|
fn layouting_info(self: Pin<&Self>, _window: &ComponentWindow) -> LayoutInfo {
|
||||||
let text: qttypes::QString = self.text().as_str().into();
|
let text: qttypes::QString = self.text().as_str().into();
|
||||||
let dpr = window.scale_factor();
|
|
||||||
let size = cpp!(unsafe [
|
let size = cpp!(unsafe [
|
||||||
text as "QString",
|
text as "QString"
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QSize as "QSize" {
|
] -> qttypes::QSize as "QSize" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionButton option;
|
QStyleOptionButton option;
|
||||||
option.rect = option.fontMetrics.boundingRect(text);
|
option.rect = option.fontMetrics.boundingRect(text);
|
||||||
option.text = std::move(text);
|
option.text = std::move(text);
|
||||||
return qApp->style()->sizeFromContents(QStyle::CT_PushButton, &option, option.rect.size(), nullptr) * dpr;
|
return qApp->style()->sizeFromContents(QStyle::CT_PushButton, &option, option.rect.size(), nullptr);
|
||||||
});
|
});
|
||||||
LayoutInfo {
|
LayoutInfo {
|
||||||
min_width: size.width as f32,
|
min_width: size.width as f32,
|
||||||
|
@ -293,18 +296,16 @@ impl Item for NativeCheckBox {
|
||||||
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layouting_info(self: Pin<&Self>, window: &ComponentWindow) -> LayoutInfo {
|
fn layouting_info(self: Pin<&Self>, _window: &ComponentWindow) -> LayoutInfo {
|
||||||
let text: qttypes::QString = self.text().as_str().into();
|
let text: qttypes::QString = self.text().as_str().into();
|
||||||
let dpr = window.scale_factor();
|
|
||||||
let size = cpp!(unsafe [
|
let size = cpp!(unsafe [
|
||||||
text as "QString",
|
text as "QString"
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QSize as "QSize" {
|
] -> qttypes::QSize as "QSize" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionButton option;
|
QStyleOptionButton option;
|
||||||
option.rect = option.fontMetrics.boundingRect(text);
|
option.rect = option.fontMetrics.boundingRect(text);
|
||||||
option.text = std::move(text);
|
option.text = std::move(text);
|
||||||
return qApp->style()->sizeFromContents(QStyle::CT_CheckBox, &option, option.rect.size(), nullptr) * dpr;
|
return qApp->style()->sizeFromContents(QStyle::CT_CheckBox, &option, option.rect.size(), nullptr);
|
||||||
});
|
});
|
||||||
LayoutInfo {
|
LayoutInfo {
|
||||||
min_width: size.width as f32,
|
min_width: size.width as f32,
|
||||||
|
@ -439,20 +440,18 @@ impl Item for NativeSpinBox {
|
||||||
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layouting_info(self: Pin<&Self>, window: &ComponentWindow) -> LayoutInfo {
|
fn layouting_info(self: Pin<&Self>, _window: &ComponentWindow) -> LayoutInfo {
|
||||||
//let value: i32 = self.value();
|
//let value: i32 = self.value();
|
||||||
let data = self.data();
|
let data = self.data();
|
||||||
let active_controls = data.active_controls;
|
let active_controls = data.active_controls;
|
||||||
let pressed = data.pressed;
|
let pressed = data.pressed;
|
||||||
let enabled = self.enabled();
|
let enabled = self.enabled();
|
||||||
let dpr = window.scale_factor();
|
|
||||||
|
|
||||||
let size = cpp!(unsafe [
|
let size = cpp!(unsafe [
|
||||||
//value as "int",
|
//value as "int",
|
||||||
active_controls as "int",
|
active_controls as "int",
|
||||||
pressed as "bool",
|
pressed as "bool",
|
||||||
enabled as "bool",
|
enabled as "bool"
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QSize as "QSize" {
|
] -> qttypes::QSize as "QSize" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
auto style = qApp->style();
|
auto style = qApp->style();
|
||||||
|
@ -462,7 +461,7 @@ impl Item for NativeSpinBox {
|
||||||
|
|
||||||
auto content = option.fontMetrics.boundingRect("0000");
|
auto content = option.fontMetrics.boundingRect("0000");
|
||||||
|
|
||||||
return style->sizeFromContents(QStyle::CT_SpinBox, &option, content.size(), nullptr) * dpr;
|
return style->sizeFromContents(QStyle::CT_SpinBox, &option, content.size(), nullptr);
|
||||||
});
|
});
|
||||||
LayoutInfo {
|
LayoutInfo {
|
||||||
min_width: size.width as f32,
|
min_width: size.width as f32,
|
||||||
|
@ -652,7 +651,7 @@ impl Item for NativeSlider {
|
||||||
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layouting_info(self: Pin<&Self>, window: &ComponentWindow) -> LayoutInfo {
|
fn layouting_info(self: Pin<&Self>, _window: &ComponentWindow) -> LayoutInfo {
|
||||||
let enabled = self.enabled();
|
let enabled = self.enabled();
|
||||||
let value = self.value() as i32;
|
let value = self.value() as i32;
|
||||||
let min = self.minimum() as i32;
|
let min = self.minimum() as i32;
|
||||||
|
@ -660,7 +659,6 @@ impl Item for NativeSlider {
|
||||||
let data = self.data();
|
let data = self.data();
|
||||||
let active_controls = data.active_controls;
|
let active_controls = data.active_controls;
|
||||||
let pressed = data.pressed;
|
let pressed = data.pressed;
|
||||||
let dpr = window.scale_factor();
|
|
||||||
|
|
||||||
let size = cpp!(unsafe [
|
let size = cpp!(unsafe [
|
||||||
enabled as "bool",
|
enabled as "bool",
|
||||||
|
@ -668,15 +666,14 @@ impl Item for NativeSlider {
|
||||||
min as "int",
|
min as "int",
|
||||||
max as "int",
|
max as "int",
|
||||||
active_controls as "int",
|
active_controls as "int",
|
||||||
pressed as "bool",
|
pressed as "bool"
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QSize as "QSize" {
|
] -> qttypes::QSize as "QSize" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionSlider option;
|
QStyleOptionSlider option;
|
||||||
initQSliderOptions(option, pressed, enabled, active_controls, min, max, value);
|
initQSliderOptions(option, pressed, enabled, active_controls, min, max, value);
|
||||||
auto style = qApp->style();
|
auto style = qApp->style();
|
||||||
auto thick = style->pixelMetric(QStyle::PM_SliderThickness, &option, nullptr);
|
auto thick = style->pixelMetric(QStyle::PM_SliderThickness, &option, nullptr);
|
||||||
return style->sizeFromContents(QStyle::CT_Slider, &option, QSize(0, thick), nullptr) * dpr;
|
return style->sizeFromContents(QStyle::CT_Slider, &option, QSize(0, thick), nullptr);
|
||||||
});
|
});
|
||||||
LayoutInfo {
|
LayoutInfo {
|
||||||
min_width: size.width as f32,
|
min_width: size.width as f32,
|
||||||
|
@ -835,7 +832,7 @@ struct GroupBoxData {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Item for NativeGroupBox {
|
impl Item for NativeGroupBox {
|
||||||
fn init(self: Pin<&Self>, window: &ComponentWindow) {
|
fn init(self: Pin<&Self>, _window: &ComponentWindow) {
|
||||||
let shared_data = Rc::pin(GroupBoxData::default());
|
let shared_data = Rc::pin(GroupBoxData::default());
|
||||||
|
|
||||||
Property::link_two_way(
|
Property::link_two_way(
|
||||||
|
@ -844,17 +841,14 @@ impl Item for NativeGroupBox {
|
||||||
);
|
);
|
||||||
|
|
||||||
shared_data.paddings.set_binding({
|
shared_data.paddings.set_binding({
|
||||||
let window_weak = Rc::downgrade(&window.0.clone());
|
|
||||||
let shared_data_weak = pin_weak::rc::PinWeak::downgrade(shared_data.clone());
|
let shared_data_weak = pin_weak::rc::PinWeak::downgrade(shared_data.clone());
|
||||||
move || {
|
move || {
|
||||||
let shared_data = shared_data_weak.upgrade().unwrap();
|
let shared_data = shared_data_weak.upgrade().unwrap();
|
||||||
|
|
||||||
let text: qttypes::QString = GroupBoxData::FIELD_OFFSETS.title.apply_pin(shared_data.as_ref()).get().as_str().into();
|
let text: qttypes::QString = GroupBoxData::FIELD_OFFSETS.title.apply_pin(shared_data.as_ref()).get().as_str().into();
|
||||||
let dpr = window_weak.upgrade().unwrap().scale_factor();
|
|
||||||
|
|
||||||
cpp!(unsafe [
|
cpp!(unsafe [
|
||||||
text as "QString",
|
text as "QString"
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QMargins as "QMargins" {
|
] -> qttypes::QMargins as "QMargins" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionGroupBox option;
|
QStyleOptionGroupBox option;
|
||||||
|
@ -878,10 +872,11 @@ impl Item for NativeGroupBox {
|
||||||
auto vs = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing, &option);
|
auto vs = qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing, &option);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
qRound((contentsRect.left() + hs) * dpr),
|
(contentsRect.left() + hs),
|
||||||
qRound((contentsRect.top() + vs) * dpr),
|
(contentsRect.top() + vs),
|
||||||
qRound((option.rect.right() - contentsRect.right() + hs) * dpr),
|
(option.rect.right() - contentsRect.right() + hs),
|
||||||
qRound((option.rect.bottom() - contentsRect.bottom() + vs) * dpr) };
|
(option.rect.bottom() - contentsRect.bottom() + vs)
|
||||||
|
};
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1027,17 +1022,11 @@ pub struct NativeLineEdit {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Item for NativeLineEdit {
|
impl Item for NativeLineEdit {
|
||||||
fn init(self: Pin<&Self>, window: &ComponentWindow) {
|
fn init(self: Pin<&Self>, _window: &ComponentWindow) {
|
||||||
let paddings = Rc::pin(Property::default());
|
let paddings = Rc::pin(Property::default());
|
||||||
|
|
||||||
paddings.as_ref().set_binding({
|
paddings.as_ref().set_binding(move || {
|
||||||
let window_weak = Rc::downgrade(&window.0.clone());
|
cpp!(unsafe [] -> qttypes::QMargins as "QMargins" {
|
||||||
move || {
|
|
||||||
let dpr = window_weak.upgrade().unwrap().scale_factor();
|
|
||||||
|
|
||||||
cpp!(unsafe [
|
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QMargins as "QMargins" {
|
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionFrame option;
|
QStyleOptionFrame option;
|
||||||
option.state |= QStyle::State_Enabled;
|
option.state |= QStyle::State_Enabled;
|
||||||
|
@ -1051,12 +1040,12 @@ impl Item for NativeLineEdit {
|
||||||
// ### remove extra margins
|
// ### remove extra margins
|
||||||
|
|
||||||
return {
|
return {
|
||||||
qRound((2 + contentsRect.left()) * dpr),
|
(2 + contentsRect.left()),
|
||||||
qRound((4 + contentsRect.top()) * dpr),
|
(4 + contentsRect.top()),
|
||||||
qRound((2 + option.rect.right() - contentsRect.right()) * dpr),
|
(2 + option.rect.right() - contentsRect.right()),
|
||||||
qRound((4 + option.rect.bottom() - contentsRect.bottom()) * dpr) };
|
(4 + option.rect.bottom() - contentsRect.bottom())
|
||||||
|
};
|
||||||
})
|
})
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
self.native_padding_left.set_binding({
|
self.native_padding_left.set_binding({
|
||||||
|
@ -1179,17 +1168,11 @@ pub struct NativeScrollView {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Item for NativeScrollView {
|
impl Item for NativeScrollView {
|
||||||
fn init(self: Pin<&Self>, window: &ComponentWindow) {
|
fn init(self: Pin<&Self>, _window: &ComponentWindow) {
|
||||||
let paddings = Rc::pin(Property::default());
|
let paddings = Rc::pin(Property::default());
|
||||||
|
|
||||||
paddings.as_ref().set_binding({
|
paddings.as_ref().set_binding(move || {
|
||||||
let window_weak = Rc::downgrade(&window.0.clone());
|
cpp!(unsafe [] -> qttypes::QMargins as "QMargins" {
|
||||||
move || {
|
|
||||||
let dpr = window_weak.upgrade().unwrap().scale_factor();
|
|
||||||
|
|
||||||
cpp!(unsafe [
|
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QMargins as "QMargins" {
|
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionSlider option;
|
QStyleOptionSlider option;
|
||||||
initQSliderOptions(option, false, true, 0, 0, 1000, 1000);
|
initQSliderOptions(option, false, true, 0, 0, 1000, 1000);
|
||||||
|
@ -1213,12 +1196,12 @@ impl Item for NativeScrollView {
|
||||||
frameOption.midLineWidth = 0;
|
frameOption.midLineWidth = 0;
|
||||||
QRect cr = qApp->style()->subElementRect(QStyle::SE_ShapedFrameContents, &frameOption, nullptr);
|
QRect cr = qApp->style()->subElementRect(QStyle::SE_ShapedFrameContents, &frameOption, nullptr);
|
||||||
return {
|
return {
|
||||||
qRound(cr.left() * dpr),
|
cr.left(),
|
||||||
qRound(cr.top() * dpr),
|
cr.top(),
|
||||||
qRound((vertical_size.width() + frameOption.rect.right() - cr.right()) * dpr),
|
(vertical_size.width() + frameOption.rect.right() - cr.right()),
|
||||||
qRound((horizontal_size.height() + frameOption.rect.bottom() - cr.bottom()) * dpr) };
|
(horizontal_size.height() + frameOption.rect.bottom() - cr.bottom())
|
||||||
|
};
|
||||||
})
|
})
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
self.native_padding_left.set_binding({
|
self.native_padding_left.set_binding({
|
||||||
|
@ -1273,10 +1256,9 @@ impl Item for NativeScrollView {
|
||||||
fn input_event(
|
fn input_event(
|
||||||
self: Pin<&Self>,
|
self: Pin<&Self>,
|
||||||
event: MouseEvent,
|
event: MouseEvent,
|
||||||
window: &ComponentWindow,
|
_window: &ComponentWindow,
|
||||||
_self_rc: &sixtyfps_corelib::items::ItemRc,
|
_self_rc: &sixtyfps_corelib::items::ItemRc,
|
||||||
) -> InputEventResult {
|
) -> InputEventResult {
|
||||||
let dpr = window.scale_factor();
|
|
||||||
let size: qttypes::QSize = get_size!(self);
|
let size: qttypes::QSize = get_size!(self);
|
||||||
let mut data = self.data();
|
let mut data = self.data();
|
||||||
let active_controls = data.active_controls;
|
let active_controls = data.active_controls;
|
||||||
|
@ -1302,20 +1284,19 @@ impl Item for NativeScrollView {
|
||||||
size as "QSize",
|
size as "QSize",
|
||||||
active_controls as "int",
|
active_controls as "int",
|
||||||
pressed as "bool",
|
pressed as "bool",
|
||||||
dpr as "float",
|
|
||||||
horizontal as "bool"
|
horizontal as "bool"
|
||||||
] -> u32 as "int" {
|
] -> u32 as "int" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionSlider option;
|
QStyleOptionSlider option;
|
||||||
initQSliderOptions(option, pressed, true, active_controls, 0, max / dpr, -value / dpr);
|
initQSliderOptions(option, pressed, true, active_controls, 0, max, -value);
|
||||||
option.pageStep = page_size / dpr;
|
option.pageStep = page_size;
|
||||||
if (!horizontal) {
|
if (!horizontal) {
|
||||||
option.state ^= QStyle::State_Horizontal;
|
option.state ^= QStyle::State_Horizontal;
|
||||||
option.orientation = Qt::Vertical;
|
option.orientation = Qt::Vertical;
|
||||||
}
|
}
|
||||||
auto style = qApp->style();
|
auto style = qApp->style();
|
||||||
option.rect = { QPoint{}, size / dpr };
|
option.rect = { QPoint{}, size };
|
||||||
return style->hitTestComplexControl(QStyle::CC_ScrollBar, &option, pos / dpr, nullptr);
|
return style->hitTestComplexControl(QStyle::CC_ScrollBar, &option, pos, nullptr);
|
||||||
});
|
});
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
|
@ -1340,16 +1321,16 @@ impl Item for NativeScrollView {
|
||||||
}
|
}
|
||||||
MouseEventType::MouseReleased => {
|
MouseEventType::MouseReleased => {
|
||||||
data.pressed = 0;
|
data.pressed = 0;
|
||||||
let new_val = cpp!(unsafe [active_controls as "int", value as "int", max as "int", page_size as "int", dpr as "float"] -> i32 as "int" {
|
let new_val = cpp!(unsafe [active_controls as "int", value as "int", max as "int", page_size as "int"] -> i32 as "int" {
|
||||||
switch (active_controls) {
|
switch (active_controls) {
|
||||||
case QStyle::SC_ScrollBarAddPage:
|
case QStyle::SC_ScrollBarAddPage:
|
||||||
return -value + page_size;
|
return -value + page_size;
|
||||||
case QStyle::SC_ScrollBarSubPage:
|
case QStyle::SC_ScrollBarSubPage:
|
||||||
return -value - page_size;
|
return -value - page_size;
|
||||||
case QStyle::SC_ScrollBarAddLine:
|
case QStyle::SC_ScrollBarAddLine:
|
||||||
return -value + 3. * dpr;
|
return -value + 3.;
|
||||||
case QStyle::SC_ScrollBarSubLine:
|
case QStyle::SC_ScrollBarSubLine:
|
||||||
return -value - 3. * dpr;
|
return -value - 3.;
|
||||||
case QStyle::SC_ScrollBarFirst:
|
case QStyle::SC_ScrollBarFirst:
|
||||||
return 0;
|
return 0;
|
||||||
case QStyle::SC_ScrollBarLast:
|
case QStyle::SC_ScrollBarLast:
|
||||||
|
@ -1427,10 +1408,10 @@ impl Item for NativeScrollView {
|
||||||
let top = this.native_padding_top();
|
let top = this.native_padding_top();
|
||||||
let bottom = this.native_padding_bottom();
|
let bottom = this.native_padding_bottom();
|
||||||
let corner_rect = qttypes::QRectF {
|
let corner_rect = qttypes::QRectF {
|
||||||
x: ((size.width as f32 - (right - left)) / dpr) as _,
|
x: (size.width as f32 / dpr - (right - left)) as _,
|
||||||
y: ((size.height as f32 - (bottom - top)) / dpr) as _,
|
y: (size.height as f32 / dpr - (bottom - top)) as _,
|
||||||
width: ((right - left) / dpr) as _,
|
width: ((right - left)) as _,
|
||||||
height: ((bottom - top) / dpr) as _,
|
height: ((bottom - top)) as _,
|
||||||
};
|
};
|
||||||
cpp!(unsafe [painter as "QPainter*", corner_rect as "QRectF"] {
|
cpp!(unsafe [painter as "QPainter*", corner_rect as "QRectF"] {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
|
@ -1553,8 +1534,7 @@ impl Item for NativeStandardListViewItem {
|
||||||
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layouting_info(self: Pin<&Self>, window: &ComponentWindow) -> LayoutInfo {
|
fn layouting_info(self: Pin<&Self>, _window: &ComponentWindow) -> LayoutInfo {
|
||||||
let dpr = window.scale_factor();
|
|
||||||
let index: i32 = self.index();
|
let index: i32 = self.index();
|
||||||
let item = self.item();
|
let item = self.item();
|
||||||
let text: qttypes::QString = item.text.as_str().into();
|
let text: qttypes::QString = item.text.as_str().into();
|
||||||
|
@ -1578,8 +1558,8 @@ impl Item for NativeStandardListViewItem {
|
||||||
return qApp->style()->sizeFromContents(QStyle::CT_ItemViewItem, &option, QSize{}, nullptr);
|
return qApp->style()->sizeFromContents(QStyle::CT_ItemViewItem, &option, QSize{}, nullptr);
|
||||||
});
|
});
|
||||||
let result = LayoutInfo {
|
let result = LayoutInfo {
|
||||||
min_width: s.width as f32 * dpr,
|
min_width: s.width as f32,
|
||||||
min_height: s.height as f32 * dpr,
|
min_height: s.height as f32,
|
||||||
..LayoutInfo::default()
|
..LayoutInfo::default()
|
||||||
};
|
};
|
||||||
result
|
result
|
||||||
|
@ -1677,19 +1657,17 @@ impl Item for NativeComboBox {
|
||||||
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
euclid::rect(self.x(), self.y(), self.width(), self.height())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn layouting_info(self: Pin<&Self>, window: &ComponentWindow) -> LayoutInfo {
|
fn layouting_info(self: Pin<&Self>, _window: &ComponentWindow) -> LayoutInfo {
|
||||||
let text: qttypes::QString = self.current_value().as_str().into();
|
let text: qttypes::QString = self.current_value().as_str().into();
|
||||||
let dpr = window.scale_factor();
|
|
||||||
let size = cpp!(unsafe [
|
let size = cpp!(unsafe [
|
||||||
text as "QString",
|
text as "QString"
|
||||||
dpr as "float"
|
|
||||||
] -> qttypes::QSize as "QSize" {
|
] -> qttypes::QSize as "QSize" {
|
||||||
ensure_initialized();
|
ensure_initialized();
|
||||||
QStyleOptionButton option;
|
QStyleOptionButton option;
|
||||||
// FIXME
|
// FIXME
|
||||||
option.rect = option.fontMetrics.boundingRect("*****************");
|
option.rect = option.fontMetrics.boundingRect("*****************");
|
||||||
option.text = std::move(text);
|
option.text = std::move(text);
|
||||||
return qApp->style()->sizeFromContents(QStyle::CT_ComboBox, &option, option.rect.size(), nullptr) * dpr;
|
return qApp->style()->sizeFromContents(QStyle::CT_ComboBox, &option, option.rect.size(), nullptr);
|
||||||
});
|
});
|
||||||
LayoutInfo {
|
LayoutInfo {
|
||||||
min_width: size.width as f32,
|
min_width: size.width as f32,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue