iris: fold render state into Ui
This commit is contained in:
1 parent
44a5da378b
commit
9b4c690916
25 files changed
+421
-390
No files matched your search
+28
-25
@@ -1,6 +1,6 @@
|
||||
use crate::{
|
||||
Axis, Len, MoveOffset, PaintId, RegionAlign, RenderedText, Size, StrongWidget, TextAttrs,
|
||||
TextBuffer, TextData, TextureHandle, UiRegion, UiRenderState, UiRsc, UiScalar, UiVec2,
|
||||
TextBuffer, TextData, TextureHandle, UiData, UiRegion, UiRenderState, UiRsc, UiScalar, UiVec2,
|
||||
WidgetId,
|
||||
render::{
|
||||
Drawn, GlyphPrimitive, IMAGE_BINDING, Mask, MaskIdx, MoveIdx, NOT_DRAWN, Primitive,
|
||||
@@ -11,7 +11,7 @@ use crate::{
|
||||
};
|
||||
|
||||
pub struct Painter<'a> {
|
||||
pub(super) state: &'a mut UiRenderState,
|
||||
pub(super) render_state: &'a mut UiRenderState,
|
||||
pub(super) rsc: &'a mut dyn UiRsc,
|
||||
|
||||
pub(super) region: UiRegion,
|
||||
@@ -46,7 +46,7 @@ impl DrawResult<'_, '_> {
|
||||
if !self.painter.size_dependencies.contains(&self.child) {
|
||||
self.painter.size_dependencies.push(self.child);
|
||||
}
|
||||
self.painter.state.active[&self.child].size
|
||||
self.painter.render_state.active[&self.child].size
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,10 +94,10 @@ impl<'a> Painter<'a> {
|
||||
};
|
||||
let h = match self.take_recycled(P::BINDING, drawn) {
|
||||
Some(h) => {
|
||||
self.state.primitives.recycle(&h, inst);
|
||||
self.render_state.primitives.recycle(&h, inst);
|
||||
h
|
||||
}
|
||||
None => self.state.write_primitive(self.layer, drawn, inst),
|
||||
None => self.render_state.write_primitive(self.layer, drawn, inst),
|
||||
};
|
||||
if self.mask != MaskIdx::NONE {
|
||||
self.rsc.ui_mut().masks.push_ref(self.mask);
|
||||
@@ -109,7 +109,7 @@ impl<'a> Painter<'a> {
|
||||
|
||||
/// Take ownership of a handle this widget just wrote.
|
||||
fn own(&mut self, h: PrimitiveHandle) {
|
||||
self.state
|
||||
self.render_state
|
||||
.primitives
|
||||
.set_handle_index(h.slot, self.primitives.len() as u32);
|
||||
self.primitives.push(h);
|
||||
@@ -156,7 +156,7 @@ impl<'a> Painter<'a> {
|
||||
/// with no radius argument anywhere that could fall out of step with
|
||||
/// the one being drawn.
|
||||
pub fn set_mask_to_widget<W: ?Sized>(&mut self, shape: &StrongWidget<W>) {
|
||||
let slot = self.state.first_primitive(shape.id()).unwrap_or_else(|| {
|
||||
let slot = self.render_state.first_primitive(shape.id()).unwrap_or_else(|| {
|
||||
panic!(
|
||||
"'{}' was given as a mask's shape but drew no primitive, so there is nothing to \
|
||||
clip to",
|
||||
@@ -172,7 +172,7 @@ impl<'a> Painter<'a> {
|
||||
"set_mask called twice while drawing one widget: the second would replace the first \
|
||||
rather than nest inside it",
|
||||
);
|
||||
let binding = self.state.primitives.instance(shape).binding;
|
||||
let binding = self.render_state.primitives.instance(shape).binding;
|
||||
assert_eq!(
|
||||
binding,
|
||||
RectPrimitive::BINDING,
|
||||
@@ -248,7 +248,7 @@ impl<'a> Painter<'a> {
|
||||
let next = [offset.x, offset.y];
|
||||
if self.rsc.ui().move_offsets[slot.idx()].delta != next {
|
||||
self.rsc.ui_mut().move_offsets.get_mut(slot).delta = next;
|
||||
self.state.note_move();
|
||||
self.render_state.note_move();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,7 +262,10 @@ impl<'a> Painter<'a> {
|
||||
{
|
||||
None
|
||||
} else {
|
||||
self.state.active.get(&id.id()).map(|a| a.size.axis(axis))
|
||||
self.render_state
|
||||
.active
|
||||
.get(&id.id())
|
||||
.map(|a| a.size.axis(axis))
|
||||
};
|
||||
if len.is_some() && !self.size_dependencies.contains(&id.id()) {
|
||||
self.size_dependencies.push(id.id());
|
||||
@@ -277,7 +280,7 @@ impl<'a> Painter<'a> {
|
||||
) -> DrawResult<'p, 'a> {
|
||||
self.children.push(id.id());
|
||||
let parent_move_slot = self.child_move_slot.unwrap_or(self.move_slot);
|
||||
self.state.draw_inner(
|
||||
self.render_state.draw_inner(
|
||||
self.layer,
|
||||
id.id(),
|
||||
region,
|
||||
@@ -300,16 +303,16 @@ impl<'a> Painter<'a> {
|
||||
) -> DrawResult<'p, 'a> {
|
||||
let region = region.within(&self.region);
|
||||
let retained = self
|
||||
.state
|
||||
.render_state
|
||||
.active
|
||||
.get(&id.id())
|
||||
.map(|active| (active.layer, active.mask));
|
||||
if self.state.place(id.id(), region, self.rsc).is_some() {
|
||||
if self.render_state.place(id.id(), region, self.rsc).is_some() {
|
||||
} else if let Some((layer, mask)) = retained {
|
||||
self.children.push(id.id());
|
||||
self.rsc.widgets_mut().needs_redraw.insert(id.id());
|
||||
let parent_move_slot = self.child_move_slot.unwrap_or(self.move_slot);
|
||||
self.state.draw_inner(
|
||||
self.render_state.draw_inner(
|
||||
layer,
|
||||
id.id(),
|
||||
region,
|
||||
@@ -322,7 +325,7 @@ impl<'a> Painter<'a> {
|
||||
} else {
|
||||
self.children.push(id.id());
|
||||
let parent_move_slot = self.child_move_slot.unwrap_or(self.move_slot);
|
||||
self.state.draw_inner(
|
||||
self.render_state.draw_inner(
|
||||
self.layer,
|
||||
id.id(),
|
||||
region,
|
||||
@@ -385,7 +388,7 @@ impl<'a> Painter<'a> {
|
||||
fn write_image(&mut self, texture_idx: u32, region: UiRegion) {
|
||||
let h = match self.take_recycled(IMAGE_BINDING, Drawn::Yes) {
|
||||
Some(h) => {
|
||||
self.state.primitives.recycle_image(
|
||||
self.render_state.primitives.recycle_image(
|
||||
&h,
|
||||
self.id,
|
||||
texture_idx,
|
||||
@@ -395,7 +398,7 @@ impl<'a> Painter<'a> {
|
||||
);
|
||||
h
|
||||
}
|
||||
None => self.state.write_image(
|
||||
None => self.render_state.write_image(
|
||||
self.layer,
|
||||
self.id,
|
||||
texture_idx,
|
||||
@@ -416,9 +419,9 @@ impl<'a> Painter<'a> {
|
||||
attrs: &TextAttrs,
|
||||
width: Option<f32>,
|
||||
) -> RenderedText {
|
||||
let density = self.state.density;
|
||||
self.state.shape_count += 1;
|
||||
let ui = self.rsc.ui_mut();
|
||||
let density = self.render_state.density;
|
||||
self.render_state.shape_count += 1;
|
||||
let ui: &mut UiData = self.rsc.ui_mut();
|
||||
ui.text
|
||||
.render(buffer, attrs, width, &mut ui.textures, density)
|
||||
}
|
||||
@@ -477,17 +480,17 @@ impl<'a> Painter<'a> {
|
||||
}
|
||||
|
||||
pub fn output_size(&self) -> Vec2 {
|
||||
self.state.output_size
|
||||
self.render_state.output_size
|
||||
}
|
||||
|
||||
/// Physical pixels per `dp` -- see `UiRenderState::density`'s field
|
||||
/// doc. What `Len::dp`'s `apply_rest` call resolves against.
|
||||
pub fn density(&self) -> f32 {
|
||||
self.state.density
|
||||
self.render_state.density
|
||||
}
|
||||
|
||||
pub fn px_size(&mut self) -> Vec2 {
|
||||
self.region.size().to_abs(self.state.output_size)
|
||||
self.region.size().to_abs(self.render_state.output_size)
|
||||
}
|
||||
|
||||
pub fn text_data(&mut self) -> &mut TextData {
|
||||
@@ -495,11 +498,11 @@ impl<'a> Painter<'a> {
|
||||
}
|
||||
|
||||
pub fn child_layer(&mut self) {
|
||||
self.layer = self.state.layers.child(self.layer);
|
||||
self.layer = self.render_state.layers.child(self.layer);
|
||||
}
|
||||
|
||||
pub fn next_layer(&mut self) {
|
||||
self.layer = self.state.layers.next(self.layer);
|
||||
self.layer = self.render_state.layers.next(self.layer);
|
||||
}
|
||||
|
||||
pub fn label(&self) -> &str {
|
||||
|
||||
Reference in new issue
Block a user