slint/sixtyfps_compiler/builtins.60
Simon Hausmann 7cea088a2c Add support for letter-spacing in text
This is conveniently supported by femtovg and Qt
2021-02-16 22:14:50 +01:00

467 lines
12 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 <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 }
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;
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
}
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;
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) -> 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;
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> background; // StyleMetrics.window_background set in apply_default_properties_from_style
property <color> color <=> background;
property <string> title: "SixtyFPS 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 <length> blur;
//-default_size_binding:expands_to_parent_geometry
}
export TextInput := _ {
property <string> text;
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;
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;
}
MoveTo := _ {
property <float> x;
property <float> y;
//-rust_type_constructor:sixtyfps::re_exports::PathElement::MoveTo(PathMoveTo{{}})
//-cpp_type:sixtyfps::PathMoveTo
//-is_non_item_type
}
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
}
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::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::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;
//-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::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
}