Added focus cursor in input

This commit is contained in:
2025-08-08 23:51:15 +02:00
parent d3861909e7
commit c8ebe36d78
5 changed files with 17 additions and 15 deletions
+2 -2
View File
@@ -36,7 +36,7 @@ impl Element for Div {
fn after_render( fn after_render(
&mut self, &mut self,
scope: &mut crate::render_scope::RenderScope, scope: &mut crate::render_scope::RenderScope,
ctx: &crate::render_scope::RenderContext, render_context: &crate::render_scope::RenderContext,
) { ) {
let mut transform = scope.get_transform().clone(); let mut transform = scope.get_transform().clone();
let mut renderer = DivRenderer(&mut transform); let mut renderer = DivRenderer(&mut transform);
@@ -45,7 +45,7 @@ impl Element for Div {
scope.set_parent_size(renderer.0.width, renderer.0.height); scope.set_parent_size(renderer.0.width, renderer.0.height);
for widget in &self.children { for widget in &self.children {
scope.render_widget(&mut renderer, ctx.get_context(), widget); scope.render_widget(&mut renderer, render_context.get_context(), widget);
} }
scope.set_parent_size(w, h); scope.set_parent_size(w, h);
+4 -4
View File
@@ -55,7 +55,7 @@ impl Element for FlexRow {
fn after_render( fn after_render(
&mut self, &mut self,
scope: &mut crate::render_scope::RenderScope, scope: &mut crate::render_scope::RenderScope,
ctx: &crate::render_scope::RenderContext, render_context: &crate::render_scope::RenderContext,
) { ) {
let mut transform = scope.get_transform().clone(); let mut transform = scope.get_transform().clone();
let transform_before = 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); let mut renderer = RowRenderer(&mut transform, self.gap, &mut v);
for widget in &self.children { for widget in &self.children {
scope.render_widget(&mut renderer, ctx.get_context(), widget); scope.render_widget(&mut renderer, render_context.get_context(), widget);
} }
scope.set_parent_size(w, h); scope.set_parent_size(w, h);
scope.set_transform_raw(transform_before); scope.set_transform_raw(transform_before);
@@ -100,7 +100,7 @@ impl Element for FlexCol {
fn after_render( fn after_render(
&mut self, &mut self,
scope: &mut crate::render_scope::RenderScope, scope: &mut crate::render_scope::RenderScope,
ctx: &crate::render_scope::RenderContext, render_context: &crate::render_scope::RenderContext,
) { ) {
let mut transform = scope.get_transform().clone(); let mut transform = scope.get_transform().clone();
let transform_before = 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); let mut renderer = ColumnRenderer(&mut transform, self.gap, &mut v);
for widget in &self.children { for widget in &self.children {
scope.render_widget(&mut renderer, ctx.get_context(), widget); scope.render_widget(&mut renderer, render_context.get_context(), widget);
} }
scope.set_parent_size(w, h); scope.set_parent_size(w, h);
scope.set_transform_raw(transform_before); scope.set_transform_raw(transform_before);
+7 -5
View File
@@ -14,14 +14,16 @@ impl Element for Input {
fn render( fn render(
&mut self, &mut self,
scope: &mut crate::prelude::RenderScope, scope: &mut crate::prelude::RenderScope,
_: &crate::render_scope::RenderContext, render_context: &crate::render_scope::RenderContext,
) { ) {
let s = self.state.get(); let s = self.state.get();
scope.draw_text(0, 0, &s); scope.draw_text(0, 0, &s);
if let Some(c) = s.chars().nth(self.cursor) { if render_context.is_focused() {
scope.draw_text_inverted(self.cursor as u16, 0, &c.to_string()); if let Some(c) = s.chars().nth(self.cursor) {
} else { scope.draw_text_inverted(self.cursor as u16, 0, &c.to_string());
scope.draw_text_inverted(s.len() as u16, 0, " "); } else {
scope.draw_text_inverted(s.len() as u16, 0, " ");
}
} }
} }
+2 -2
View File
@@ -37,7 +37,7 @@ impl Element for Paginator {
fn after_render( fn after_render(
&mut self, &mut self,
scope: &mut crate::render_scope::RenderScope, scope: &mut crate::render_scope::RenderScope,
ctx: &crate::render_scope::RenderContext, render_context: &crate::render_scope::RenderContext,
) { ) {
if let Some(widget) = self.children.get(self.index) { if let Some(widget) = self.children.get(self.index) {
let mut transform = scope.get_transform().clone(); let mut transform = scope.get_transform().clone();
@@ -45,7 +45,7 @@ impl Element for Paginator {
let (w, h) = scope.get_parent_size(); let (w, h) = scope.get_parent_size();
scope.set_parent_size(renderer.0.width, renderer.0.height); scope.set_parent_size(renderer.0.width, renderer.0.height);
scope.render_widget(&mut renderer, ctx.get_context(), widget); scope.render_widget(&mut renderer, render_context.get_context(), widget);
scope.set_parent_size(w, h); scope.set_parent_size(w, h);
self.size = (renderer.0.width, renderer.0.height); self.size = (renderer.0.width, renderer.0.height);
+2 -2
View File
@@ -31,11 +31,11 @@ pub type BoxedComponent = Box<dyn Component + Send + Sync>;
pub trait Element: Send + Sync { pub trait Element: Send + Sync {
/// Called to perform rendering for the element. /// Called to perform rendering for the element.
#[allow(unused)] #[allow(unused)]
fn render(&mut self, scope: &mut RenderScope, ctx: &crate::render_scope::RenderContext) {} fn render(&mut self, scope: &mut RenderScope, render_context: &crate::render_scope::RenderContext) {}
/// Called after rendering, for follow-up logic or cleanup. /// Called after rendering, for follow-up logic or cleanup.
#[allow(unused)] #[allow(unused)]
fn after_render(&mut self, scope: &mut RenderScope, ctx: &crate::render_scope::RenderContext) {} fn after_render(&mut self, scope: &mut RenderScope, render_context: &crate::render_scope::RenderContext) {}
/// Called to draw child widgets, if any. /// Called to draw child widgets, if any.
#[allow(unused)] #[allow(unused)]