修复内边距不正确

This commit is contained in:
Nanako 2025-04-04 13:44:38 +08:00
parent 3a426b8b99
commit 759f482afe
4 changed files with 16 additions and 13 deletions

View File

@ -25,6 +25,7 @@ int main(int argc, char* argv[]) {
const auto button = mnew(mbutton)
mslot(mbutton)
.margin({10})
[
text_block
];

View File

@ -29,7 +29,7 @@ struct mborder_slot : mcompound_widget_slot<mborder_slot> {
}
/**
* margin属性
* margin属性()
*/
SLOT_ATTRIBUTE(margin_t, margin)
};
@ -59,4 +59,18 @@ public:
slot.v_alignment(),
slot.margin());
}
Eigen::Vector2f compute_desired_size(float in_layout_scale_multiplier) const override {
if (const auto& child = get_child_slot().get()) {
// 获取子部件的期望大小
const auto& child_size = child->compute_desired_size(in_layout_scale_multiplier);
const auto& margin = slot_.margin();
// 添加边距的贡献
// return child_size + Eigen::Vector2f(margin.horizontal(), margin.vertical());
// 或使用现有的 margin.get_total_spacing() 方法
return child_size + margin.get_total_spacing();
}
return Eigen::Vector2f(10, 10);
}
};

View File

@ -27,17 +27,6 @@ void mbutton::on_paint(mirage_paint_context& in_context) {
);
}
Eigen::Vector2f mbutton::compute_desired_size(float in_layout_scale_multiplier) const {
const margin_t button_padding = { 10, 10, 10, 10 }; // TODO 临时值, 以后会从主题中获取
Eigen::Vector2f desired_size = button_padding.get_total_spacing();
if (const auto& child = get_child_slot().get()) {
desired_size += child->compute_desired_size(in_layout_scale_multiplier);
}
return desired_size;
}
void mbutton::on_click(const Eigen::Vector2f& in_position, mouse_button in_button) {
mborder::on_click(in_position, in_button);
std::cout << this << ": Button clicked!" << in_position.x() << ", " << in_position.y() << std::endl;

View File

@ -7,7 +7,6 @@ public:
virtual void init() override;
virtual void on_paint(mirage_paint_context& in_context) override;
virtual Eigen::Vector2f compute_desired_size(float in_layout_scale_multiplier) const override;
virtual void on_click(const Eigen::Vector2f& in_position, mouse_button in_button) override;
virtual void on_double_click(const Eigen::Vector2f& in_position, mouse_button in_button) override;