mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 14:21:16 +00:00
518 lines
14 KiB
Text
518 lines
14 KiB
Text
/* LICENSE BEGIN
|
|
This file is part of the SixtyFPS Project -- https://sixtyfps.io
|
|
Copyright (c) 2021 Olivier Goffart <olivier.goffart@sixtyfps.io>
|
|
Copyright (c) 2021 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.
|
|
Exported components are added to the as BuiltinElement.
|
|
|
|
comments starting by `//-` have some meanings
|
|
|
|
Properties with two way bindings (aliases) are deprecated in favor of the property they point to
|
|
|
|
Properties can have default binding which must be an expression without any reference to
|
|
another properties. These binding will be then set by the compiler.
|
|
Or they can have a binding `native_output` which mean that the property can be modified
|
|
by the native Item. If they don't have that, it is assumed the native item don't write
|
|
to that property.
|
|
*/
|
|
|
|
import { _ } from ""; // just to silence many errorin the LSP
|
|
|
|
Rectangle := _ {
|
|
property <brush> background;
|
|
property <brush> color <=> background;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
}
|
|
|
|
BorderRectangle := Rectangle {
|
|
property <length> border_width;
|
|
property <length> border_radius;
|
|
property <brush> border_color;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export { BorderRectangle as Rectangle }
|
|
|
|
ImageItem := _ {
|
|
property <image> source;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <ImageFit> image_fit;
|
|
}
|
|
|
|
export ClippedImage := ImageItem {
|
|
property <int> source-clip-x;
|
|
property <int> source-clip-y;
|
|
property <int> source-clip-width;
|
|
property <int> source-clip-height;
|
|
property <brush> colorize;
|
|
//-default_size_binding:implicit_size
|
|
}
|
|
|
|
export { ClippedImage as Image }
|
|
|
|
export Rotate := _ {
|
|
property <angle> angle;
|
|
property <length> origin-x;
|
|
property <length> origin-y;
|
|
property <length> width;
|
|
property <length> height;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-is_internal
|
|
}
|
|
|
|
export Text := _ {
|
|
property <string> text;
|
|
property <string> font_family;
|
|
property <length> font_size;
|
|
property <int> font_weight;
|
|
property <brush> color: #000;
|
|
property <TextHorizontalAlignment> horizontal_alignment;
|
|
property <TextVerticalAlignment> vertical_alignment;
|
|
property <TextOverflow> overflow;
|
|
property <TextWrap> wrap;
|
|
property <length> letter_spacing;
|
|
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> enabled: true;
|
|
property <bool> pressed: native_output;
|
|
property <bool> has_hover: native_output;
|
|
property <length> mouse_x: native_output;
|
|
property <length> mouse_y: native_output;
|
|
property <length> pressed_x: native_output;
|
|
property <length> pressed_y: native_output;
|
|
callback clicked;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export struct KeyboardModifiers := {
|
|
//-name:sixtyfps::private_api::KeyboardModifiers
|
|
alt: bool,
|
|
control: bool,
|
|
shift: bool,
|
|
meta: bool,
|
|
}
|
|
|
|
export struct KeyEvent := {
|
|
//-name:sixtyfps::private_api::KeyEvent
|
|
text: string,
|
|
modifiers: KeyboardModifiers,
|
|
}
|
|
|
|
export FocusScope := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> has_focus: native_output;
|
|
callback key_pressed(KeyEvent) -> EventResult;
|
|
callback key_released(KeyEvent) -> EventResult;
|
|
//-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: native_output;
|
|
property <length> viewport_y: native_output;
|
|
property <bool> interactive: true;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
}
|
|
|
|
export WindowItem := _ {
|
|
property <length> width: native_output;
|
|
property <length> height: native_output;
|
|
property <color> background; // StyleMetrics.window_background set in apply_default_properties_from_style
|
|
property <color> color <=> background;
|
|
property <string> title: "SixtyFPS Window";
|
|
property <string> default_font_family;
|
|
property <length> default_font_size;
|
|
property <int> default_font_weight;
|
|
property <image> icon;
|
|
}
|
|
|
|
export { WindowItem as Window }
|
|
|
|
export BoxShadow := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> border_radius;
|
|
property <length> offset_x;
|
|
property <length> offset_y;
|
|
property <color> color;
|
|
property <float> blur;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-is_internal
|
|
}
|
|
|
|
export TextInput := _ {
|
|
property <string> text: native_output;
|
|
property <string> font_family;
|
|
property <length> font_size;
|
|
property <int> font_weight;
|
|
property <brush> color: #000;
|
|
property <color> selection_foreground_color: #000;
|
|
property <color> selection_background_color: #808080;
|
|
property <TextHorizontalAlignment> horizontal_alignment;
|
|
property <TextVerticalAlignment> vertical_alignment;
|
|
property <length> letter_spacing;
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> text_cursor_width; // StyleMetrics.text_cursor_width set in apply_default_properties_from_style
|
|
property <int> cursor_position: native_output;
|
|
property <int> anchor_position: native_output;
|
|
property <bool> has_focus: native_output;
|
|
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;
|
|
property <length> border_radius;
|
|
property <length> border_width;
|
|
property <bool> clip;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-is_internal
|
|
}
|
|
|
|
export Opacity := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <float> opacity: 1;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-is_internal
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
MoveTo := _ {
|
|
property <float> x;
|
|
property <float> y;
|
|
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::MoveTo(PathMoveTo{{}})
|
|
//-cpp_type:sixtyfps::private_api::PathMoveTo
|
|
//-is_non_item_type
|
|
}
|
|
|
|
LineTo := _ {
|
|
property <float> x;
|
|
property <float> y;
|
|
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::LineTo(PathLineTo{{}})
|
|
//-cpp_type:sixtyfps::private_api::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::private_api::PathArcTo
|
|
//-is_non_item_type
|
|
}
|
|
|
|
CubicTo := _ {
|
|
property <float> control_1_x;
|
|
property <float> control_1_y;
|
|
property <float> control_2_x;
|
|
property <float> control_2_y;
|
|
property <float> x;
|
|
property <float> y;
|
|
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::CubicTo(PathCubicTo{{}})
|
|
//-cpp_type:sixtyfps::private_api::PathCubicTo
|
|
//-is_non_item_type
|
|
}
|
|
|
|
QuadraticTo := _ {
|
|
property <float> control_x;
|
|
property <float> control_y;
|
|
property <float> x;
|
|
property <float> y;
|
|
|
|
//-rust_type_constructor:sixtyfps::re_exports::PathElement::QuadraticTo(PathQuadraticTo{{}})
|
|
//-cpp_type:sixtyfps::private_api::PathQuadraticTo
|
|
//-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 <brush> fill;
|
|
property <brush> fill_color <=> fill;
|
|
property <FillRule> fill_rule;
|
|
property <brush> stroke;
|
|
property <color> stroke_color <=> stroke;
|
|
property <length> stroke_width;
|
|
property <string> commands;
|
|
property <float> viewbox_x;
|
|
property <float> viewbox_y;
|
|
property <float> viewbox_width;
|
|
property <float> viewbox_height;
|
|
property <bool> clip;
|
|
|
|
//-disallow_global_types_as_child_elements
|
|
MoveTo {}
|
|
LineTo {}
|
|
ArcTo {}
|
|
CubicTo {}
|
|
QuadraticTo {}
|
|
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;
|
|
|
|
MoveTo {}
|
|
LineTo {}
|
|
ArcTo {}
|
|
CubicTo {}
|
|
QuadraticTo {}
|
|
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::private_api::StateInfo
|
|
current_state: int,
|
|
previous_state: int,
|
|
//change_time: duration,
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeButton := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <string> text;
|
|
property <image> icon;
|
|
property <bool> pressed: native_output;
|
|
callback clicked;
|
|
property <bool> enabled: true;
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeCheckBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <string> text;
|
|
property <bool> checked: native_output;
|
|
callback toggled;
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeSpinBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <int> value: native_output;
|
|
property <int> minimum;
|
|
property <int> maximum: 100;
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeSlider := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <bool> enabled: true;
|
|
property <float> value: native_output;
|
|
property <float> minimum;
|
|
property <float> maximum: 100;
|
|
callback changed(float);
|
|
//-is_internal
|
|
}
|
|
|
|
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: native_output;
|
|
property <length> native_padding_right: native_output;
|
|
property <length> native_padding_top: native_output;
|
|
property <length> native_padding_bottom: native_output;
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeLineEdit := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <length> native_padding_left: native_output;
|
|
property <length> native_padding_right: native_output;
|
|
property <length> native_padding_top: native_output;
|
|
property <length> native_padding_bottom: native_output;
|
|
property <bool> focused: native_output;
|
|
property <bool> enabled: true;
|
|
//-is_internal
|
|
}
|
|
|
|
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: native_output;
|
|
property <length> native_padding_left: native_output;
|
|
property <length> native_padding_right: native_output;
|
|
property <length> native_padding_top: native_output;
|
|
property <length> native_padding_bottom: native_output;
|
|
//-default_size_binding:expands_to_parent_geometry
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeStandardListViewItem := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <int> index;
|
|
property <StandardListViewItem> item;
|
|
property <bool> is_selected: native_output;
|
|
//-is_internal
|
|
}
|
|
|
|
export NativeComboBox := _ {
|
|
property <length> x;
|
|
property <length> y;
|
|
property <length> width;
|
|
property <length> height;
|
|
property <string> current_value;
|
|
property <bool> is_open: native_output;
|
|
property <bool> enabled: true;
|
|
callback open_popup;
|
|
//-is_internal
|
|
}
|
|
|
|
export global NativeStyleMetrics := {
|
|
property <length> layout_spacing;
|
|
property <length> layout_padding;
|
|
property <length> text_cursor_width;
|
|
//-is_non_item_type
|
|
//-is_internal
|
|
}
|