working scissor proof of concept
This commit is contained in:
@@ -5,7 +5,7 @@ use slotmap::Key;
|
||||
use taffy::AvailableSpace;
|
||||
|
||||
use crate::{
|
||||
drawing::{self, Boundary},
|
||||
drawing::{self, Boundary, PrimitiveExtent},
|
||||
event::CallbackDataCommon,
|
||||
globals::Globals,
|
||||
i18n::{I18n, Translation},
|
||||
@@ -118,12 +118,14 @@ impl WidgetObj for WidgetLabel {
|
||||
buffer.set_size(&mut font_system, Some(boundary.size.x), Some(boundary.size.y));
|
||||
}
|
||||
|
||||
state.primitives.push(drawing::RenderPrimitive {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
payload: drawing::PrimitivePayload::Text(self.buffer.clone()),
|
||||
transform: state.transform_stack.get().transform,
|
||||
});
|
||||
state.primitives.push(drawing::RenderPrimitive::Text(
|
||||
PrimitiveExtent {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
transform: state.transform_stack.get().transform,
|
||||
},
|
||||
self.buffer.clone(),
|
||||
));
|
||||
}
|
||||
|
||||
fn measure(
|
||||
|
||||
@@ -4,7 +4,7 @@ use super::drawing::RenderPrimitive;
|
||||
|
||||
use crate::{
|
||||
any::AnyTrait,
|
||||
drawing,
|
||||
drawing::{self, PrimitiveExtent},
|
||||
event::{
|
||||
self, CallbackData, CallbackDataCommon, CallbackMetadata, Event, EventAlterables, EventListenerKind,
|
||||
EventListenerVec, MouseWheelEvent,
|
||||
@@ -244,34 +244,38 @@ impl WidgetState {
|
||||
|
||||
// Horizontal handle
|
||||
if enabled_horiz && info.handle_size.x < 1.0 {
|
||||
state.primitives.push(drawing::RenderPrimitive {
|
||||
boundary: drawing::Boundary::from_pos_size(
|
||||
Vec2::new(
|
||||
transform.pos.x + transform.dim.x * (1.0 - info.handle_size.x) * self.data.scrolling.x,
|
||||
transform.pos.y + transform.dim.y - thickness - margin,
|
||||
state.primitives.push(drawing::RenderPrimitive::Rectangle(
|
||||
PrimitiveExtent {
|
||||
boundary: drawing::Boundary::from_pos_size(
|
||||
Vec2::new(
|
||||
transform.pos.x + transform.dim.x * (1.0 - info.handle_size.x) * self.data.scrolling.x,
|
||||
transform.pos.y + transform.dim.y - thickness - margin,
|
||||
),
|
||||
Vec2::new(transform.dim.x * info.handle_size.x, thickness),
|
||||
),
|
||||
Vec2::new(transform.dim.x * info.handle_size.x, thickness),
|
||||
),
|
||||
depth: state.depth,
|
||||
transform: transform.transform,
|
||||
payload: drawing::PrimitivePayload::Rectangle(rect_params),
|
||||
});
|
||||
depth: state.depth,
|
||||
transform: transform.transform,
|
||||
},
|
||||
rect_params,
|
||||
));
|
||||
}
|
||||
|
||||
// Vertical handle
|
||||
if enabled_vert && info.handle_size.y < 1.0 {
|
||||
state.primitives.push(drawing::RenderPrimitive {
|
||||
boundary: drawing::Boundary::from_pos_size(
|
||||
Vec2::new(
|
||||
transform.pos.x + transform.dim.x - thickness - margin,
|
||||
transform.pos.y + transform.dim.y * (1.0 - info.handle_size.y) * self.data.scrolling.y,
|
||||
state.primitives.push(drawing::RenderPrimitive::Rectangle(
|
||||
PrimitiveExtent {
|
||||
boundary: drawing::Boundary::from_pos_size(
|
||||
Vec2::new(
|
||||
transform.pos.x + transform.dim.x - thickness - margin,
|
||||
transform.pos.y + transform.dim.y * (1.0 - info.handle_size.y) * self.data.scrolling.y,
|
||||
),
|
||||
Vec2::new(thickness, transform.dim.y * info.handle_size.y),
|
||||
),
|
||||
Vec2::new(thickness, transform.dim.y * info.handle_size.y),
|
||||
),
|
||||
depth: state.depth,
|
||||
transform: transform.transform,
|
||||
payload: drawing::PrimitivePayload::Rectangle(rect_params),
|
||||
});
|
||||
depth: state.depth,
|
||||
transform: transform.transform,
|
||||
},
|
||||
rect_params,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use slotmap::Key;
|
||||
|
||||
use crate::{
|
||||
drawing::{self, GradientMode},
|
||||
drawing::{self, GradientMode, PrimitiveExtent},
|
||||
layout::WidgetID,
|
||||
widget::util::WLength,
|
||||
};
|
||||
@@ -43,19 +43,21 @@ impl WidgetObj for WidgetRectangle {
|
||||
WLength::Percent(percent) => (f32::min(boundary.size.x, boundary.size.y) * percent / 2.0) as u8,
|
||||
};
|
||||
|
||||
state.primitives.push(drawing::RenderPrimitive {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
transform: state.transform_stack.get().transform,
|
||||
payload: drawing::PrimitivePayload::Rectangle(drawing::Rectangle {
|
||||
state.primitives.push(drawing::RenderPrimitive::Rectangle(
|
||||
PrimitiveExtent {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
transform: state.transform_stack.get().transform,
|
||||
},
|
||||
drawing::Rectangle {
|
||||
color: self.params.color,
|
||||
color2: self.params.color2,
|
||||
gradient: self.params.gradient,
|
||||
border: self.params.border,
|
||||
border_color: self.params.border_color,
|
||||
round_units,
|
||||
}),
|
||||
});
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
fn get_id(&self) -> WidgetID {
|
||||
|
||||
@@ -4,7 +4,7 @@ use cosmic_text::{Attrs, Buffer, Color, Shaping, Weight};
|
||||
use slotmap::Key;
|
||||
|
||||
use crate::{
|
||||
drawing::{self},
|
||||
drawing::{self, PrimitiveExtent},
|
||||
layout::WidgetID,
|
||||
renderer_vk::text::{
|
||||
DEFAULT_METRICS, FONT_SYSTEM,
|
||||
@@ -55,12 +55,14 @@ impl WidgetObj for WidgetSprite {
|
||||
snap_to_physical_pixel: true,
|
||||
};
|
||||
|
||||
state.primitives.push(drawing::RenderPrimitive {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
payload: drawing::PrimitivePayload::Sprite(Some(glyph)),
|
||||
transform: state.transform_stack.get().transform,
|
||||
});
|
||||
state.primitives.push(drawing::RenderPrimitive::Sprite(
|
||||
PrimitiveExtent {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
transform: state.transform_stack.get().transform,
|
||||
},
|
||||
Some(glyph),
|
||||
));
|
||||
} else {
|
||||
// Source not set or not available, display error text
|
||||
let mut buffer = Buffer::new_empty(DEFAULT_METRICS);
|
||||
@@ -73,13 +75,16 @@ impl WidgetObj for WidgetSprite {
|
||||
// set text last in order to avoid expensive re-shaping
|
||||
buffer.set_text("Error", &attrs, Shaping::Basic);
|
||||
}
|
||||
state.primitives.push(drawing::RenderPrimitive {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
payload: drawing::PrimitivePayload::Text(Rc::new(RefCell::new(buffer))),
|
||||
transform: state.transform_stack.get().transform,
|
||||
});
|
||||
}
|
||||
|
||||
state.primitives.push(drawing::RenderPrimitive::Text(
|
||||
PrimitiveExtent {
|
||||
boundary,
|
||||
depth: state.depth,
|
||||
transform: state.transform_stack.get().transform,
|
||||
},
|
||||
Rc::new(RefCell::new(buffer)),
|
||||
))
|
||||
};
|
||||
}
|
||||
|
||||
fn measure(
|
||||
|
||||
Reference in New Issue
Block a user