Skip to main content

View

Trait View 

Source
pub trait View {
    // Required method
    fn render(&self, ctx: &mut RenderContext<'_>);

    // Provided methods
    fn widget_type(&self) -> &'static str { ... }
    fn id(&self) -> Option<&str> { ... }
    fn classes(&self) -> &[String] { ... }
    fn children(&self) -> &[Box<dyn View>] { ... }
    fn meta(&self) -> WidgetMeta { ... }
}
Expand description

The core trait for all renderable components

Every widget in Revue implements the View trait, which provides:

§Implementing View

At minimum, you only need to implement render:

use revue::prelude::*;

struct MyWidget {
    text: String,
}

impl View for MyWidget {
    fn render(&self, ctx: &mut RenderContext) {
        ctx.draw_text(0, 0, &self.text, Color::WHITE);
    }
}

§CSS Selector Support

Widgets can be styled via CSS using three selector types:

  1. Type selector - All widgets of a given type

    MyWidget { color: red; }
  2. ID selector - A specific widget (unique identifier)

    widget.id("my-special-widget");
    #my-special-widget { color: blue; }
  3. Class selector - Widgets with a specific class

    widget.class("primary").class("active");
    .primary { color: green; }
    .active { font-weight: bold; }

§Container Widgets

Container widgets (like Stack, Grid) should override children() to expose their children for DOM traversal:

impl View for MyContainer {
    fn children(&self) -> &[Box<dyn View>] {
        &self.children
    }
    // ...
}

§View Trait Object

View can be used as a trait object (Box<dyn View>) for dynamic polymorphism:

fn render_any_widget(widget: Box<dyn View>, ctx: &mut RenderContext) {
    widget.render(ctx);
}

Required Methods§

Source

fn render(&self, ctx: &mut RenderContext<'_>)

Render the view to the given context

The RenderContext provides drawing primitives like:

  • draw_text() - Render text at a position
  • fill() - Fill a region with a character/color
  • draw_border() - Draw borders
  • clear() - Clear a region
§Example
fn render(&self, ctx: &mut RenderContext) {
    ctx.clear(ctx.area());
    ctx.draw_text(0, 0, &self.label, Color::WHITE);
}

Provided Methods§

Source

fn widget_type(&self) -> &'static str

Get widget type name (for CSS type selectors)

The default implementation extracts the type name from the Rust type. For example, MyApp::MyWidget becomes "MyWidget".

Override this if you want a custom type name for CSS matching:

fn widget_type(&self) -> &'static str {
    "button"  // Always match as "button" regardless of Rust type
}
Source

fn id(&self) -> Option<&str>

Get element ID (for CSS #id selectors)

Returns None by default. Override to provide a unique ID:

struct MyWidget {
    id: Option<String>,
}

impl View for MyWidget {
    fn id(&self) -> Option<&str> {
        self.id.as_deref()
    }
}
Source

fn classes(&self) -> &[String]

Get CSS classes (for CSS .class selectors)

Returns an empty slice by default. Override to provide classes:

struct MyWidget {
    classes: Vec<String>,
}

impl View for MyWidget {
    fn classes(&self) -> &[String] {
        &self.classes
    }
}
Source

fn children(&self) -> &[Box<dyn View>]

Get child views (for container widgets)

Container widgets (Stack, Grid, etc.) should override this to expose their children, enabling the DOM builder to traverse the full widget tree.

The returned slice should contain boxed trait objects to enable heterogeneous child collections.

§Example
struct MyContainer {
    children: Vec<Box<dyn View>>,
}

impl View for MyContainer {
    fn children(&self) -> &[Box<dyn View>] {
        &self.children
    }
}
Source

fn meta(&self) -> WidgetMeta

Get widget metadata for DOM

This method combines widget_type(), id(), and classes() into a WidgetMeta struct used by the DOM builder. You typically don’t need to override this.

Trait Implementations§

Source§

impl View for Box<dyn View>

Implement View for Box<dyn View> to allow boxed views to be used as children

Source§

fn render(&self, ctx: &mut RenderContext<'_>)

Render the view to the given context Read more
Source§

fn widget_type(&self) -> &'static str

Get widget type name (for CSS type selectors) Read more
Source§

fn id(&self) -> Option<&str>

Get element ID (for CSS #id selectors) Read more
Source§

fn classes(&self) -> &[String]

Get CSS classes (for CSS .class selectors) Read more
Source§

fn children(&self) -> &[Box<dyn View>]

Get child views (for container widgets) Read more
Source§

fn meta(&self) -> WidgetMeta

Get widget metadata for DOM Read more

Implementations on Foreign Types§

Source§

impl View for Box<dyn View>

Implement View for Box<dyn View> to allow boxed views to be used as children

Source§

fn render(&self, ctx: &mut RenderContext<'_>)

Source§

fn widget_type(&self) -> &'static str

Source§

fn id(&self) -> Option<&str>

Source§

fn classes(&self) -> &[String]

Source§

fn children(&self) -> &[Box<dyn View>]

Source§

fn meta(&self) -> WidgetMeta

Implementors§

Source§

impl View for Inspector

Source§

impl View for Accordion

Source§

impl View for AiStream

Source§

impl View for Alert

Source§

impl View for Transition

Source§

impl View for Autocomplete

Source§

impl View for Avatar

Source§

impl View for Badge

Source§

impl View for BarChart

Source§

impl View for BigText

Source§

impl View for Border

Source§

impl View for BoxPlot

Source§

impl View for Breadcrumb

Source§

impl View for Button

Source§

impl View for Calendar

Source§

impl View for Callout

Source§

impl View for CandleChart

Source§

impl View for Card

Source§

impl View for Chart

Source§

impl View for Checkbox

Source§

impl View for CodeEditor

Source§

impl View for Collapsible

Source§

impl View for ColorPicker

Source§

impl View for Combobox

Source§

impl View for CommandPalette

Source§

impl View for ContextMenu

Source§

impl View for CsvViewer

Source§

impl View for DataGrid

Source§

impl View for DateTimePicker

Source§

impl View for Diagram

Source§

impl View for Digits

Source§

impl View for Divider

Source§

impl View for EmptyState

Source§

impl View for FilePicker

Source§

impl View for FileTree

Source§

impl View for Form

Source§

impl View for FormFieldWidget

Source§

impl View for Gauge

Source§

impl View for Grid

Source§

impl View for HSplit

Source§

impl View for HeatMap

Source§

impl View for Histogram

Source§

impl View for HttpClient

Source§

impl View for Input

Source§

impl View for JsonViewer

Source§

impl View for Layers

Source§

impl View for LogViewer

Source§

impl View for MaskedInput

Source§

impl View for MenuBar

Source§

impl View for Modal

Source§

impl View for MultiSelect

Source§

impl View for NotificationCenter

Source§

impl View for NumberInput

Source§

impl View for OptionList

Source§

impl View for Pagination

Source§

impl View for PieChart

Source§

impl View for Popover

Source§

impl View for Positioned

Source§

impl View for Presentation

Source§

impl View for Progress

Source§

impl View for RadioGroup

Source§

impl View for RangePicker

Source§

impl View for Rating

Source§

impl View for RichLog

Source§

impl View for RichText

Source§

impl View for RichTextEditor

Source§

impl View for ScatterChart

Source§

impl View for ScreenStack

Source§

impl View for ScrollView

Source§

impl View for Select

Source§

impl View for SelectionList

Source§

impl View for Sidebar

Source§

impl View for Skeleton

Source§

impl View for Slider

Source§

impl View for SortableList

Source§

impl View for Sparkline

Source§

impl View for Spinner

Source§

impl View for Splitter

Source§

impl View for Stack

Source§

impl View for StatusBar

Source§

impl View for StatusIndicator

Source§

impl View for Stepper

Source§

impl View for Stopwatch

Source§

impl View for Streamline

Source§

impl View for Switch

Source§

impl View for Table

Source§

impl View for Tabs

Source§

impl View for Tag

Source§

impl View for Terminal

Source§

impl View for Text

Source§

impl View for TextArea

Source§

impl View for ThemePicker

Source§

impl View for TimeSeries

Source§

impl View for Timeline

Source§

impl View for Timer

Source§

impl View for Toast

Source§

impl View for ToastQueue

Source§

impl View for Tooltip

Source§

impl View for TransitionGroup

Source§

impl View for Tree

Source§

impl View for VSplit

Source§

impl View for Waveline

Source§

impl View for ZenMode

Source§

impl<F> View for BrailleCanvas<F>
where F: Fn(&mut BrailleContext<'_>),

Source§

impl<F> View for Canvas<F>
where F: Fn(&mut DrawContext<'_>),

Source§

impl<F> View for DropZone<F>
where F: FnMut(DragData) -> bool,

Source§

impl<F> View for Resizable<F>
where F: FnMut(u16, u16),

Source§

impl<T: ToString + Clone> View for VirtualList<T>

Source§

impl<T: Display> View for List<T>

Source§

impl<V: View> View for DebugOverlay<V>