mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 22:31:14 +00:00

This intends to provide a configurable rectangular "drop shadow". The API is modeled after CSS/HTML5 Canvas where the element can be "bound" to an existing rectangular shape (geometry and radius), the offset can be used to place the shadow and color and blur configure the shadow. The shadow's color fades into transparent. TODO (in subsequent changes): * Documentation * Qt implementation
407 lines
10 KiB
Text
407 lines
10 KiB
Text
/* LICENSE BEGIN
|
|
This file is part of the SixtyFPS Project -- https://sixtyfps.io
|
|
Copyright (c) 2020 Olivier Goffart <olivier.goffart@sixtyfps.io>
|
|
Copyright (c) 2020 Simon Hausmann <simon.hausmann@sixtyfps.io>
|
|
|
|
SPDX-License-Identifier: GPL-3.0-only
|
|
This file is also available under commercial licensing terms.
|
|
Please contact info@sixtyfps.io for more information.
|
|
LICENSE END */
|
|
|
|
/**
|
|
This file contains the definition off all builtin items
|
|
It is parsed with the normal .60 parser, but the semantic.
|
|
|
|
`_` means that that this is a langtype::NativeClass with no parent.
|
|
Note that only the exported components are added to the type registers.
|
|
|
|
comments starting by `//-` have some meanings
|
|
*/
|
|
|
|
Rectangle := _ {
|
|
property <color> color;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
}
|
|
|
|
BorderRectangle := Rectangle {
|
|
property <length> border_width;
|
|
property <length> border_radius;
|
|
property <color> border_color;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export { BorderRectangle as Rectangle }
|
|
|
|
Image := _ {
|
|
property <resource> source;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <ImageFit> image_fit;
|
|
}
|
|
|
|
export ClippedImage := Image {
|
|
property <int> source-clip-x;
|
|
property <int> source-clip-y;
|
|
property <int> source-clip-width;
|
|
property <int> source-clip-height;
|
|
//-default_size_binding:implicit_size
|
|
}
|
|
|
|
export { ClippedImage as Image }
|
|
|
|
export Text := _ {
|
|
property <string> text;
|
|
property <string> font_family;
|
|
property <length> font_size;
|
|
property <int> font_weight;
|
|
property <color> color: #000;
|
|
property <TextHorizontalAlignment> horizontal_alignment;
|
|
property <TextVerticalAlignment> vertical_alignment;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
//-default_size_binding:implicit_size
|
|
}
|
|
|
|
export TouchArea := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> pressed;
|
|
property <bool> has_hover;
|
|
property <length> mouse_x;
|
|
property <length> mouse_y;
|
|
property <length> pressed_x;
|
|
property <length> pressed_y;
|
|
callback clicked;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export struct KeyboardModifiers := {
|
|
//-name:sixtyfps::KeyboardModifiers
|
|
alt: bool,
|
|
control: bool,
|
|
shift: bool,
|
|
meta: bool,
|
|
}
|
|
|
|
export struct KeyEvent := {
|
|
//-name:sixtyfps::KeyEvent
|
|
text: string,
|
|
modifiers: KeyboardModifiers,
|
|
}
|
|
|
|
export FocusScope := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> has_focus;
|
|
callback key_pressed(KeyEvent);
|
|
callback key_released(KeyEvent);
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-accepts_focus
|
|
}
|
|
|
|
export Flickable := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
// These properties are actually going to be forwarded to the viewport by the
|
|
// code generator
|
|
property <length> viewport_height;
|
|
property <length> viewport_width;
|
|
property <length> viewport_x;
|
|
property <length> viewport_y;
|
|
property <bool> interactive: true;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export Window := _ {
|
|
property <length> width;
|
|
property <length> height;
|
|
property <color> color: #fff;
|
|
property <string> title: "SixtyFPS Window";
|
|
}
|
|
|
|
export BoxShadow := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> radius;
|
|
property <length> offset_x;
|
|
property <length> offset_y;
|
|
property <color> color;
|
|
property <length> blur;
|
|
}
|
|
|
|
export TextInput := _ {
|
|
property <string> text;
|
|
property <string> font_family;
|
|
property <length> font_size;
|
|
property <int> font_weight;
|
|
property <color> color: #000;
|
|
property <color> selection_foreground_color: #000;
|
|
property <color> selection_background_color: #808080;
|
|
property <TextHorizontalAlignment> horizontal_alignment;
|
|
property <TextVerticalAlignment> vertical_alignment;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> text_cursor_width /*: StyleMetrics.text_cursor_width */;
|
|
property <int> cursor_position;
|
|
property <int> anchor_position;
|
|
property <bool> has_focus;
|
|
callback accepted;
|
|
callback edited;
|
|
property <bool> enabled: true;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-accepts_focus
|
|
}
|
|
|
|
export Clip := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
Row := _ {
|
|
//-is_non_item_type
|
|
}
|
|
|
|
// Note: layouts are not NativeClass, but this is lowerd in lower_layout
|
|
export GridLayout := _ {
|
|
property <length> spacing;
|
|
|
|
// Additional accepted child
|
|
Row { }
|
|
}
|
|
|
|
export VerticalLayout := _ {
|
|
property <length> spacing;
|
|
property <LayoutAlignment> alignment;
|
|
}
|
|
|
|
export HorizontalLayout := _ {
|
|
property <length> spacing;
|
|
property <LayoutAlignment> alignment;
|
|
}
|
|
|
|
LineTo := _ {
|
|
property <float> x;
|
|
property <float> y;
|
|
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::LineTo(PathLineTo{{}})
|
|
//-cpp_type:sixtyfps::PathLineTo
|
|
//-is_non_item_type
|
|
}
|
|
|
|
ArcTo := _ {
|
|
property <float> x;
|
|
property <float> y;
|
|
property <float> radius_x;
|
|
property <float> radius_y;
|
|
property <float> x_rotation;
|
|
property <bool> large_arc;
|
|
property <bool> sweep;
|
|
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::ArcTo(PathArcTo{{}})
|
|
//-cpp_type:sixtyfps::PathArcTo
|
|
//-is_non_item_type
|
|
}
|
|
|
|
Close := _ {
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::Close
|
|
//-is_non_item_type
|
|
//-is_non_item_type
|
|
}
|
|
|
|
export Path := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <color> fill_color;
|
|
property <color> stroke_color;
|
|
property <float> stroke_width;
|
|
property <string> commands;
|
|
|
|
//-disallow_global_types_as_child_elements
|
|
LineTo {}
|
|
ArcTo {}
|
|
Close {}
|
|
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export PathLayout := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <string> commands;
|
|
property <float> offset;
|
|
|
|
LineTo {}
|
|
ArcTo {}
|
|
Close {}
|
|
}
|
|
|
|
// Note: not a a native class, handled in the lower_popups pass
|
|
export PopupWindow := _ {
|
|
//property <length> x;
|
|
//property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
/*property <length> anchor_x;
|
|
property <length> anchor_y;
|
|
property <length> anchor_height;
|
|
property <length> anchor_width;*/
|
|
//show() is hardcoded in typeregister.rs
|
|
}
|
|
|
|
PropertyAnimation := _ {
|
|
property <duration> duration;
|
|
property <easing> easing;
|
|
property <int> loop_count;
|
|
//-is_non_item_type
|
|
}
|
|
|
|
export struct StandardListViewItem := {
|
|
//-name:sixtyfps::StandardListViewItem
|
|
text: string
|
|
}
|
|
|
|
export struct StateInfo := {
|
|
//-name:sixtyfps::StateInfo
|
|
current_state: int,
|
|
previous_state: int,
|
|
//change_time: duration,
|
|
}
|
|
|
|
export NativeButton := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <string> text;
|
|
property <bool> pressed;
|
|
callback clicked;
|
|
property <bool> enabled: true;
|
|
}
|
|
|
|
export NativeCheckBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <string> text;
|
|
property <bool> checked;
|
|
callback toggled;
|
|
}
|
|
|
|
export NativeSpinBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <int> value;
|
|
property <int> minimum;
|
|
property <int> maximum: 100;
|
|
}
|
|
|
|
export NativeSlider := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <float> value;
|
|
property <float> minimum;
|
|
property <float> maximum: 100;
|
|
}
|
|
|
|
export NativeGroupBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <string> title;
|
|
property <length> native_padding_left;
|
|
property <length> native_padding_right;
|
|
property <length> native_padding_top;
|
|
property <length> native_padding_bottom;
|
|
}
|
|
|
|
export NativeLineEdit := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> native_padding_left;
|
|
property <length> native_padding_right;
|
|
property <length> native_padding_top;
|
|
property <length> native_padding_bottom;
|
|
property <bool> focused;
|
|
property <bool> enabled: true;
|
|
}
|
|
|
|
export NativeScrollView := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> horizontal_max;
|
|
property <length> horizontal_page_size;
|
|
property <length> horizontal_value;
|
|
property <length> vertical_max;
|
|
property <length> vertical_page_size;
|
|
property <length> vertical_value;
|
|
property <length> native_padding_left;
|
|
property <length> native_padding_right;
|
|
property <length> native_padding_top;
|
|
property <length> native_padding_bottom;
|
|
}
|
|
|
|
export NativeStandardListViewItem := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <int> index;
|
|
property <StandardListViewItem> item;
|
|
property <bool> is_selected;
|
|
}
|
|
|
|
export NativeComboBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <string> current_value;
|
|
property <bool> is_open;
|
|
property <bool> enabled: true;
|
|
callback open_popup;
|
|
}
|
|
|
|
export global NativeStyleMetrics := {
|
|
property <logical_length> layout_spacing;
|
|
property <logical_length> layout_padding;
|
|
property <logical_length> text_cursor_width;
|
|
//-is_non_item_type
|
|
}
|