added RenderContext
This commit is contained in:
+3
-3
@@ -27,7 +27,7 @@ impl Element for Div {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
@@ -36,7 +36,7 @@ impl Element for Div {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
ctx: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
let mut renderer = DivRenderer(&mut transform);
|
||||
@@ -45,7 +45,7 @@ impl Element for Div {
|
||||
scope.set_parent_size(renderer.0.width, renderer.0.height);
|
||||
|
||||
for widget in &self.children {
|
||||
scope.render_widget(&mut renderer, ctx, widget);
|
||||
scope.render_widget(&mut renderer, ctx.get_context(), widget);
|
||||
}
|
||||
scope.set_parent_size(w, h);
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ impl Element for FlexRow {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
@@ -55,7 +55,7 @@ impl Element for FlexRow {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
ctx: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
let transform_before = transform.clone();
|
||||
@@ -66,7 +66,7 @@ impl Element for FlexRow {
|
||||
let mut renderer = RowRenderer(&mut transform, self.gap, &mut v);
|
||||
|
||||
for widget in &self.children {
|
||||
scope.render_widget(&mut renderer, ctx, widget);
|
||||
scope.render_widget(&mut renderer, ctx.get_context(), widget);
|
||||
}
|
||||
scope.set_parent_size(w, h);
|
||||
scope.set_transform_raw(transform_before);
|
||||
@@ -91,7 +91,7 @@ impl Element for FlexCol {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
@@ -100,7 +100,7 @@ impl Element for FlexCol {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
ctx: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
let transform_before = transform.clone();
|
||||
@@ -111,7 +111,7 @@ impl Element for FlexCol {
|
||||
let mut renderer = ColumnRenderer(&mut transform, self.gap, &mut v);
|
||||
|
||||
for widget in &self.children {
|
||||
scope.render_widget(&mut renderer, ctx, widget);
|
||||
scope.render_widget(&mut renderer, ctx.get_context(), widget);
|
||||
}
|
||||
scope.set_parent_size(w, h);
|
||||
scope.set_transform_raw(transform_before);
|
||||
|
||||
@@ -27,7 +27,7 @@ impl Element for Heading {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::prelude::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let mut s = String::new();
|
||||
for element in &self.children {
|
||||
|
||||
@@ -14,7 +14,7 @@ impl Element for Input {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::prelude::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let s = self.state.get();
|
||||
scope.draw_text(0, 0, &s);
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ impl Element for String {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
scope.draw_text(0, 0, self);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ impl Element for Paginator {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
_: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
@@ -37,7 +37,7 @@ impl Element for Paginator {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
ctx: &crate::render_scope::RenderContext,
|
||||
) {
|
||||
if let Some(widget) = self.children.get(self.index) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
@@ -45,7 +45,7 @@ impl Element for Paginator {
|
||||
let (w, h) = scope.get_parent_size();
|
||||
scope.set_parent_size(renderer.0.width, renderer.0.height);
|
||||
|
||||
scope.render_widget(&mut renderer, ctx, widget);
|
||||
scope.render_widget(&mut renderer, ctx.get_context(), widget);
|
||||
|
||||
scope.set_parent_size(w, h);
|
||||
self.size = (renderer.0.width, renderer.0.height);
|
||||
|
||||
+29
-3
@@ -50,6 +50,30 @@ pub struct RenderScope {
|
||||
style: Style,
|
||||
}
|
||||
|
||||
pub struct RenderContext(Context, bool);
|
||||
|
||||
impl RenderContext {
|
||||
pub fn new(c: &Context, focused: bool) -> Self {
|
||||
Self(c.clone(), focused)
|
||||
}
|
||||
|
||||
pub fn is_focused(&self) -> bool {
|
||||
self.1
|
||||
}
|
||||
|
||||
pub fn render(&self, w: &Arc<Widget>, scope: &mut RenderScope) {
|
||||
self.0.render(w, scope);
|
||||
}
|
||||
|
||||
pub fn after_render(&self, w: &Arc<Widget>, scope: &mut RenderScope) {
|
||||
self.0.after_render(w, scope);
|
||||
}
|
||||
|
||||
pub fn get_context(&self) -> &Context {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl RenderScope {
|
||||
/// Creates a new, empty `RenderScope`.
|
||||
pub fn new() -> RenderScope {
|
||||
@@ -304,7 +328,7 @@ impl RenderScope {
|
||||
pub fn render_widget(
|
||||
&mut self,
|
||||
renderer: &mut dyn ElementRenderer,
|
||||
ctx: &Context,
|
||||
ctx: &crate::extensions::Context,
|
||||
widget: &std::sync::Arc<crate::widget::Widget>,
|
||||
) -> bool {
|
||||
if widget.get::<NoRender>().is_some() {
|
||||
@@ -317,6 +341,8 @@ impl RenderScope {
|
||||
} else {
|
||||
self.clear();
|
||||
|
||||
let render_context = RenderContext::new(ctx, widget.is_focused());
|
||||
|
||||
if let Some(style) = widget.get() {
|
||||
self.set_style(style);
|
||||
}
|
||||
@@ -324,7 +350,7 @@ impl RenderScope {
|
||||
self.set_transform(&t);
|
||||
}
|
||||
|
||||
widget.get_elem().render(self, ctx);
|
||||
widget.get_elem().render(self, &render_context);
|
||||
ctx.render(widget, self);
|
||||
|
||||
if let Some(t) = widget.get() {
|
||||
@@ -335,7 +361,7 @@ impl RenderScope {
|
||||
|
||||
self.draw();
|
||||
|
||||
widget.get_elem().after_render(self, ctx);
|
||||
widget.get_elem().after_render(self, &render_context);
|
||||
ctx.after_render(widget, self);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -31,11 +31,11 @@ pub type BoxedComponent = Box<dyn Component + Send + Sync>;
|
||||
pub trait Element: Send + Sync {
|
||||
/// Called to perform rendering for the element.
|
||||
#[allow(unused)]
|
||||
fn render(&mut self, scope: &mut RenderScope, ctx: &crate::extensions::Context) {}
|
||||
fn render(&mut self, scope: &mut RenderScope, ctx: &crate::render_scope::RenderContext) {}
|
||||
|
||||
/// Called after rendering, for follow-up logic or cleanup.
|
||||
#[allow(unused)]
|
||||
fn after_render(&mut self, scope: &mut RenderScope, ctx: &crate::extensions::Context) {}
|
||||
fn after_render(&mut self, scope: &mut RenderScope, ctx: &crate::render_scope::RenderContext) {}
|
||||
|
||||
/// Called to draw child widgets, if any.
|
||||
#[allow(unused)]
|
||||
|
||||
Reference in New Issue
Block a user