|
@@ -1,13 +1,13 @@
|
|
use std::cell::RefCell;
|
|
use std::cell::RefCell;
|
|
|
|
|
|
use kahlo::{
|
|
use kahlo::{
|
|
- math::{PixelBox, PixelSideOffsets},
|
|
|
|
|
|
+ math::PixelBox,
|
|
prelude::*,
|
|
prelude::*,
|
|
};
|
|
};
|
|
|
|
|
|
use crate::{
|
|
use crate::{
|
|
component::Component,
|
|
component::Component,
|
|
- layout::{HorizontalAlignment, LayoutNode, LayoutNodeAccess, LeafLayoutNode, SizePolicy},
|
|
|
|
|
|
+ layout::{LayoutNode, LayoutNodeAccess, LeafLayoutNode, SizePolicy},
|
|
theme::Theme,
|
|
theme::Theme,
|
|
ui::UIHandle,
|
|
ui::UIHandle,
|
|
window::RenderFormat,
|
|
window::RenderFormat,
|
|
@@ -25,7 +25,7 @@ pub struct Label<C: Component> {
|
|
impl<C: Component> Label<C> {
|
|
impl<C: Component> Label<C> {
|
|
pub fn new(uih: &UIHandle) -> Self {
|
|
pub fn new(uih: &UIHandle) -> Self {
|
|
let mut node = uih.new_layout_node();
|
|
let mut node = uih.new_layout_node();
|
|
- node.set_width_policy(SizePolicy::expanding(1))
|
|
|
|
|
|
+ node.set_width_policy(SizePolicy::expanding(0))
|
|
.set_height_policy(SizePolicy::fixed(uih.theme().ui_font_size.ceil() as usize));
|
|
.set_height_policy(SizePolicy::fixed(uih.theme().ui_font_size.ceil() as usize));
|
|
Self {
|
|
Self {
|
|
lnode: LeafLayoutNode::new(node),
|
|
lnode: LeafLayoutNode::new(node),
|
|
@@ -56,8 +56,14 @@ impl<C: Component> Label<C> {
|
|
};
|
|
};
|
|
let line = uih.theme().make_line(text.as_str());
|
|
let line = uih.theme().make_line(text.as_str());
|
|
let rendered = line.render_line();
|
|
let rendered = line.render_line();
|
|
|
|
+ let sz = rendered.size();
|
|
*self.rendered.borrow_mut() = Some(rendered);
|
|
*self.rendered.borrow_mut() = Some(rendered);
|
|
self.lnode.render_needed();
|
|
self.lnode.render_needed();
|
|
|
|
+
|
|
|
|
+ let wp = self.lnode.width_policy().with_minimum(sz.width as usize);
|
|
|
|
+ self.lnode.set_width_policy(wp);
|
|
|
|
+ let hp = self.lnode.height_policy().with_minimum(sz.height as usize);
|
|
|
|
+ self.lnode.set_height_policy(hp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -91,23 +97,6 @@ impl<C: Component> Widget<C> for Label<C> {
|
|
};
|
|
};
|
|
let render_location = self.layout_node().render_area().unwrap();
|
|
let render_location = self.layout_node().render_area().unwrap();
|
|
|
|
|
|
- // perform horizontal alignment
|
|
|
|
- let alignment_slack = (render_location.width() - rendered.size().width).max(0);
|
|
|
|
- let render_location = match self.lnode.halign() {
|
|
|
|
- HorizontalAlignment::Left => {
|
|
|
|
- render_location.inner_box(PixelSideOffsets::new(0, alignment_slack, 0, 0))
|
|
|
|
- }
|
|
|
|
- HorizontalAlignment::Centre => render_location.inner_box(PixelSideOffsets::new(
|
|
|
|
- 0,
|
|
|
|
- alignment_slack / 2,
|
|
|
|
- 0,
|
|
|
|
- alignment_slack / 2,
|
|
|
|
- )),
|
|
|
|
- HorizontalAlignment::Right => {
|
|
|
|
- render_location.inner_box(PixelSideOffsets::new(0, 0, 0, alignment_slack))
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
surface.fill_region_masked(
|
|
surface.fill_region_masked(
|
|
&rendered,
|
|
&rendered,
|
|
PixelBox::from_size(rendered.size()),
|
|
PixelBox::from_size(rendered.size()),
|