@@ -0,0 +1,5 @@
|
|||||||
|
debug
|
||||||
|
target
|
||||||
|
github
|
||||||
|
Cargo.lock
|
||||||
|
.DS_Store
|
||||||
+7
-2
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
widget::{Element, Widget},
|
widget::{Element, Widget},
|
||||||
NoRender,
|
NoRender, NoRenderRoot,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct Div {
|
pub struct Div {
|
||||||
@@ -31,7 +31,12 @@ impl Element for Div {
|
|||||||
scope.set_parent_size(transform.width, transform.height);
|
scope.set_parent_size(transform.width, transform.height);
|
||||||
|
|
||||||
for elem in &self.children {
|
for elem in &self.children {
|
||||||
|
if elem.get::<NoRender>().is_some() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
scope.clear();
|
scope.clear();
|
||||||
|
|
||||||
if let Some(style) = elem.get() {
|
if let Some(style) = elem.get() {
|
||||||
scope.set_style(style);
|
scope.set_style(style);
|
||||||
}
|
}
|
||||||
@@ -57,7 +62,7 @@ impl Element for Div {
|
|||||||
|
|
||||||
fn draw_child(&mut self, element: &Arc<Widget>) {
|
fn draw_child(&mut self, element: &Arc<Widget>) {
|
||||||
self.children.push(element.clone());
|
self.children.push(element.clone());
|
||||||
element.inject(|w| w.component(NoRender));
|
element.inject(|w| w.component(NoRenderRoot));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_any(&self) -> &dyn std::any::Any {
|
fn as_any(&self) -> &dyn std::any::Any {
|
||||||
|
|||||||
+11
-3
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
widget::{Element, Widget},
|
widget::{Element, Widget},
|
||||||
NoRender,
|
NoRender, NoRenderRoot,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct FlexRow {
|
pub struct FlexRow {
|
||||||
@@ -51,6 +51,10 @@ impl Element for FlexRow {
|
|||||||
let mut v = 0;
|
let mut v = 0;
|
||||||
|
|
||||||
for elem in &self.children {
|
for elem in &self.children {
|
||||||
|
if elem.get::<NoRender>().is_some() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
scope.clear();
|
scope.clear();
|
||||||
if let Some(style) = elem.get() {
|
if let Some(style) = elem.get() {
|
||||||
scope.set_style(style);
|
scope.set_style(style);
|
||||||
@@ -81,7 +85,7 @@ impl Element for FlexRow {
|
|||||||
|
|
||||||
fn draw_child(&mut self, element: &Arc<Widget>) {
|
fn draw_child(&mut self, element: &Arc<Widget>) {
|
||||||
self.children.push(element.clone());
|
self.children.push(element.clone());
|
||||||
element.inject(|w| w.component(NoRender));
|
element.inject(|w| w.component(NoRenderRoot));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_any(&self) -> &dyn std::any::Any {
|
fn as_any(&self) -> &dyn std::any::Any {
|
||||||
@@ -107,6 +111,10 @@ impl Element for FlexCol {
|
|||||||
let mut v = 0;
|
let mut v = 0;
|
||||||
|
|
||||||
for elem in &self.children {
|
for elem in &self.children {
|
||||||
|
if elem.get::<NoRender>().is_some() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
scope.clear();
|
scope.clear();
|
||||||
if let Some(style) = elem.get() {
|
if let Some(style) = elem.get() {
|
||||||
scope.set_style(style);
|
scope.set_style(style);
|
||||||
@@ -137,7 +145,7 @@ impl Element for FlexCol {
|
|||||||
|
|
||||||
fn draw_child(&mut self, element: &Arc<Widget>) {
|
fn draw_child(&mut self, element: &Arc<Widget>) {
|
||||||
self.children.push(element.clone());
|
self.children.push(element.clone());
|
||||||
element.inject(|w| w.component(NoRender));
|
element.inject(|w| w.component(NoRenderRoot));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_any(&self) -> &dyn std::any::Any {
|
fn as_any(&self) -> &dyn std::any::Any {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use figlet_rs::FIGfont;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
widget::{Element, Widget},
|
widget::{Element, Widget},
|
||||||
NoRender,
|
NoRender, NoRenderRoot,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct Heading {
|
pub struct Heading {
|
||||||
@@ -27,6 +27,10 @@ impl Element for Heading {
|
|||||||
fn render(&mut self, scope: &mut crate::prelude::RenderScope) {
|
fn render(&mut self, scope: &mut crate::prelude::RenderScope) {
|
||||||
let mut s = String::new();
|
let mut s = String::new();
|
||||||
for element in &self.children {
|
for element in &self.children {
|
||||||
|
if element.get::<NoRender>().is_some() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(e) = element.get_elem().as_any().downcast_ref::<String>() {
|
if let Some(e) = element.get_elem().as_any().downcast_ref::<String>() {
|
||||||
s += e;
|
s += e;
|
||||||
}
|
}
|
||||||
@@ -45,7 +49,7 @@ impl Element for Heading {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn draw_child(&mut self, element: &Arc<Widget>) {
|
fn draw_child(&mut self, element: &Arc<Widget>) {
|
||||||
element.inject(|w| w.component(NoRender));
|
element.inject(|w| w.component(NoRenderRoot));
|
||||||
self.children.push(element.clone());
|
self.children.push(element.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use crossterm::event::{KeyCode, KeyEvent};
|
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
state::{use_state, State},
|
state::{use_state, State},
|
||||||
@@ -22,7 +22,14 @@ impl Element for Input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn event(&mut self, event: &dyn crate::prelude::Event) {
|
fn event(&mut self, event: &dyn crate::prelude::Event) {
|
||||||
if let Some(crossterm::event::Event::Key(KeyEvent { code, .. })) = event.get() {
|
if let Some(crossterm::event::Event::Key(KeyEvent {
|
||||||
|
code, modifiers, ..
|
||||||
|
})) = event.get()
|
||||||
|
{
|
||||||
|
if !modifiers.is_empty() && !modifiers.contains(KeyModifiers::SHIFT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
match code {
|
match code {
|
||||||
KeyCode::Char(c) => {
|
KeyCode::Char(c) => {
|
||||||
self.state.get().insert(self.cursor, *c);
|
self.state.get().insert(self.cursor, *c);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use crossterm::event::{KeyCode, KeyEvent};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
widget::{Element, Widget},
|
widget::{Element, Widget},
|
||||||
NoRender,
|
NoRender, NoRenderRoot,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct Paginator {
|
pub struct Paginator {
|
||||||
@@ -31,6 +31,10 @@ impl Element for Paginator {
|
|||||||
|
|
||||||
fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||||
if let Some(elem) = self.children.get(self.index) {
|
if let Some(elem) = self.children.get(self.index) {
|
||||||
|
if elem.get::<NoRender>().is_some() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let mut transform = scope.get_transform().clone();
|
let mut transform = scope.get_transform().clone();
|
||||||
let (w, h) = scope.get_parent_size();
|
let (w, h) = scope.get_parent_size();
|
||||||
scope.set_parent_size(transform.width, transform.height);
|
scope.set_parent_size(transform.width, transform.height);
|
||||||
@@ -85,7 +89,7 @@ impl Element for Paginator {
|
|||||||
|
|
||||||
fn draw_child(&mut self, element: &Arc<Widget>) {
|
fn draw_child(&mut self, element: &Arc<Widget>) {
|
||||||
self.children.push(element.clone());
|
self.children.push(element.clone());
|
||||||
element.inject(|w| w.component(NoRender));
|
element.inject(|w| w.component(NoRenderRoot));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_any(&self) -> &dyn std::any::Any {
|
fn as_any(&self) -> &dyn std::any::Any {
|
||||||
|
|||||||
+2
-1
@@ -81,6 +81,7 @@ pub struct Screen {
|
|||||||
|
|
||||||
event!(RenderWrapperEvent(*mut RenderScope));
|
event!(RenderWrapperEvent(*mut RenderScope));
|
||||||
component!(NoRender);
|
component!(NoRender);
|
||||||
|
component!(NoRenderRoot);
|
||||||
|
|
||||||
impl RenderWrapperEvent {
|
impl RenderWrapperEvent {
|
||||||
/// Returns a mutable reference to the underlying `RenderScope`.
|
/// Returns a mutable reference to the underlying `RenderScope`.
|
||||||
@@ -180,7 +181,7 @@ impl Screen {
|
|||||||
|
|
||||||
utils::clear()?;
|
utils::clear()?;
|
||||||
for elem in self.widgets.lock().unwrap().iter() {
|
for elem in self.widgets.lock().unwrap().iter() {
|
||||||
if let Some(NoRender) = elem.get() {
|
if elem.get::<NoRender>().is_some() || elem.get::<NoRenderRoot>().is_some() {
|
||||||
for ext in self.extensions.lock().unwrap().iter() {
|
for ext in self.extensions.lock().unwrap().iter() {
|
||||||
ext.lock().unwrap().render_widget(&mut scope, elem);
|
ext.lock().unwrap().render_widget(&mut scope, elem);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user