TEXT SELECTION
This commit is contained in:
20
src/layout/attr.rs
Normal file
20
src/layout/attr.rs
Normal file
@@ -0,0 +1,20 @@
|
||||
use crate::layout::{Ui, WidgetId, WidgetIdFn, WidgetLike};
|
||||
|
||||
pub trait WidgetAttr<W> {
|
||||
type Input;
|
||||
fn run(ui: &mut Ui, id: &WidgetId<W>, input: Self::Input);
|
||||
}
|
||||
|
||||
pub trait Attrable<W, Tag> {
|
||||
fn attr<A: WidgetAttr<W>>(self, input: A::Input) -> impl WidgetIdFn<W>;
|
||||
}
|
||||
|
||||
impl<WL: WidgetLike<Tag>, Tag> Attrable<WL::Widget, Tag> for WL {
|
||||
fn attr<A: WidgetAttr<WL::Widget>>(self, input: A::Input) -> impl WidgetIdFn<WL::Widget> {
|
||||
|ui| {
|
||||
let id = self.add(ui);
|
||||
A::run(ui, &id, input);
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,10 +55,7 @@ impl<W: WidgetLike<Tag>, Tag> Eventable<W::Widget, Tag> for W {
|
||||
) -> impl WidgetIdFn<W::Widget> {
|
||||
move |ui| {
|
||||
let id = self.add(ui);
|
||||
ui.data
|
||||
.modules
|
||||
.get_mut::<E::Module<Ctx>>()
|
||||
.register(id.id, event, f);
|
||||
ui.register_event(&id, event, f);
|
||||
id
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ mod painter;
|
||||
mod text;
|
||||
mod texture;
|
||||
mod ui;
|
||||
mod attr;
|
||||
mod vec2;
|
||||
mod widget;
|
||||
mod widgets;
|
||||
@@ -24,6 +25,7 @@ pub use painter::*;
|
||||
pub use text::*;
|
||||
pub use texture::*;
|
||||
pub use ui::*;
|
||||
pub use attr::*;
|
||||
pub use vec2::*;
|
||||
pub use widget::*;
|
||||
pub use widgets::*;
|
||||
|
||||
@@ -17,8 +17,6 @@ pub struct Painter<'a, 'c> {
|
||||
children: Vec<Id>,
|
||||
children_width: HashMap<Id, (UiVec2, Len)>,
|
||||
children_height: HashMap<Id, (UiVec2, Len)>,
|
||||
/// whether this widget depends on region's final pixel size or not
|
||||
/// TODO: decide if point (pt) should be used here instead of px
|
||||
pub layer: usize,
|
||||
id: Id,
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ use image::DynamicImage;
|
||||
use crate::{
|
||||
core::{TextEdit, TextEditCtx},
|
||||
layout::{
|
||||
IdLike, PainterData, PixelRegion, StaticWidgetId, TextureHandle, Vec2, Widget,
|
||||
WidgetId, WidgetInstance, WidgetLike,
|
||||
Event, EventFn, EventModule, IdLike, PainterData, PixelRegion, StaticWidgetId,
|
||||
TextureHandle, Vec2, Widget, WidgetId, WidgetInstance, WidgetLike,
|
||||
},
|
||||
util::{HashSet, Id},
|
||||
};
|
||||
@@ -96,6 +96,18 @@ impl Ui {
|
||||
self.data.textures.add(image)
|
||||
}
|
||||
|
||||
pub fn register_event<W, E: Event, Ctx: 'static>(
|
||||
&mut self,
|
||||
id: &WidgetId<W>,
|
||||
event: E,
|
||||
f: impl EventFn<Ctx, E::Data>,
|
||||
) {
|
||||
self.data
|
||||
.modules
|
||||
.get_mut::<E::Module<Ctx>>()
|
||||
.register(id.id, event, f);
|
||||
}
|
||||
|
||||
pub fn resize(&mut self, size: impl Into<Vec2>) {
|
||||
self.data.output_size = size.into();
|
||||
self.resized = true;
|
||||
|
||||
Reference in New Issue
Block a user