Commit graph

308 commits

Author SHA1 Message Date
Simon Hausmann
3588d6ffbe Start exposing ComponentDefinition to C++ 2021-03-19 16:50:12 +01:00
Simon Hausmann
9a8c6bf9f7 Move the string_to_slice helper into sixtyfps_string.h for easier editing 2021-03-19 14:16:30 +01:00
Simon Hausmann
3bb4b87bc7 Use a free-standing function for the string_view to slice conversion 2021-03-19 13:13:08 +01:00
Simon Hausmann
0c21008861 Add internal convenience API to construct a C++ slice from a string view 2021-03-19 12:54:22 +01:00
Simon Hausmann
591ae8557b Add include_paths setter/getter to ComponentCompiler 2021-03-19 09:56:46 +01:00
Simon Hausmann
318ee46d08 Fix build
Brown paper bag for me
2021-03-19 09:42:38 +01:00
Simon Hausmann
7af77839ad Add the skeleton for CompilerCompiler in C++ 2021-03-19 09:26:42 +01:00
Olivier Goffart
63460c1a24 ComponentInstance show/hide/run 2021-03-18 16:37:01 +01:00
Olivier Goffart
9cc69d73a1 C++ implementation of the ComponentInstance
still untested
2021-03-18 16:30:25 +01:00
Simon Hausmann
a734f7f63b Add type guards to the Struct range constructor
These provide much better error messages in case of a mismatch
2021-03-18 15:54:54 +01:00
Simon Hausmann
8916b7e13e Add a range and initializer list constructor to Struct 2021-03-18 15:28:02 +01:00
Olivier Goffart
09b7b92dbe Value comparison in C++ 2021-03-18 15:26:53 +01:00
Olivier Goffart
8a14c4fa25 Iterator over interpreter::Struct 2021-03-18 15:07:38 +01:00
Olivier Goffart
a3d0f3155d Fix double delete of the Value in Struct::get_field 2021-03-18 14:20:30 +01:00
Simon Hausmann
c6740fe592 Move field accessors from Value to Struct in C++ 2021-03-18 13:33:50 +01:00
Olivier Goffart
3335ff8da5 C++ API to put a model in the interpreter::Value 2021-03-18 12:17:01 +01:00
Simon Hausmann
02c1150fa7 Add the boilerplate for Struct in C++ 2021-03-18 12:12:48 +01:00
Simon Hausmann
533b7f05ce Remove the Value(Type) C++ constructor again
This theoretically makes sense for types that have default values, but
for example Value::Model requires a pointer Rc. But since we provide concrete constructors this
should not be needed.
2021-03-17 17:36:55 +01:00
Simon Hausmann
e539d03007 Add C++ Value Brush support 2021-03-17 17:22:57 +01:00
Olivier Goffart
d5823f2b42 Don't forget to destroy the previous value when assigning a new one 2021-03-17 17:11:23 +01:00
Simon Hausmann
79612d7354 Add C++ Value Array construction/extraction 2021-03-17 16:52:30 +01:00
Simon Hausmann
dc30106037 Add SharedVector<T>::empty() and a constructor that takes an initializer list 2021-03-17 15:19:59 +01:00
Simon Hausmann
ffb1d7bd83 Reformat sharedvector.h with clang-format 2021-03-17 15:03:48 +01:00
Simon Hausmann
831bf58baa Add Value bool conversion to C++ 2021-03-17 14:15:48 +01:00
Simon Hausmann
0877f0c82a Add C++ Value number construction & conversion 2021-03-17 14:07:49 +01:00
Simon Hausmann
8e72d29669 Expose Value::to_string() conversion and construction in C++ 2021-03-17 13:28:53 +01:00
Simon Hausmann
cf2b02c9fa Add the initial C++ header file for the interpreter with the start of Value 2021-03-17 12:10:12 +01:00
Olivier Goffart
0e351de1a6 Create a new crate to expose the C++ 2021-03-16 16:34:02 +01:00
Olivier Goffart
6f88d78303 Rename Resource to ImageReference in the runtime 2021-03-11 10:06:23 +01:00
Olivier Goffart
44e81a40d6 Fixup C++ build 2021-03-10 17:24:31 +01:00
Simon Hausmann
391d0152f0 Add Color::brighter/darker functions
These are exposed in .60 as well as in Rust and C++ and implemented by
converting to HSV color space and adjusting the brightness (value).
2021-02-24 10:49:27 +01:00
Simon Hausmann
1b870959e6 Use the Noto fonts from the C++ build of the printer demo
This adds API to register a font by path from C++
2021-02-22 11:17:39 +01:00
Olivier Goffart
b34a34cea0 C++ Make sure that the layout is properly updated when the model of a for or if changes
The problem is that the backend is using the `meta_property_listener` to know
if the layout must be updated, but the C++ code would not register a dependency

NOTE about the test: The test doesn't really test that it works because
the test backend don't have a meta_property_listener and apply the layout
inconditionally in sixtyfps_send_mouse_click
2021-02-18 09:40:12 +01:00
Simon Hausmann
500919745e Add an internal Rotate element
This is just a starting point, to be turned into a real Transform
element later, along with syntactic sugar to turn rotation, etc.  into a
transform matrix in the generated output.
2021-02-12 17:31:06 +01:00
Olivier Goffart
096f55e365 Change behavior of percent sice within the layout
So that size with percentages don't affect the maximum/minimum size

Fixes #117
2021-02-11 20:32:26 +01:00
Simon Hausmann
2dd5ea61bb Add support for Path.fill-rule
For some reason it's not working with the Qt renderer though
2021-02-10 14:08:32 +01:00
Simon Hausmann
57d3a34996 Prospective fix for doc errors
In the nightly it appears that `no_mangle` is now considered "unsafe",
so we need to allow that in the ffi modules. For the layout code this
patch also creates that ffi module with prefixed function names, like in
the other modules and only allows unsafe in there.
2021-02-10 11:26:28 +01:00
Simon Hausmann
50d9211e0a Fix failing default_color.60 test
Allow converting a brush to a color. In the case of a gradient, the color of the first stop is returned.

For the C++ generator this requires adding the extra case of explicitly
calling the `Brush(const Color &)` constructor, despite it being implicit,
in order to generate the correct code when we have IR that casts twice:

```
   Expression::Cast {
       from: Expression::Cast {
           from: Expression::Cast {
               from: Expression::NumberLiteral(...),
               to: Type::Color,
           }
           to: Type::Brush,
       },
       to: Type::Color,
   }
```
2021-02-04 13:44:10 +01:00
Simon Hausmann
262eb00af4 Allow an implicit conversion from a color or a linear gradient to Brush in C++ 2021-02-03 14:42:21 +01:00
Simon Hausmann
7982325da4 Change Rectangle::background's type to be a brush
This also introduces the brush type in the compiler and generators. At the
moment only conversion from Color is implemented.
2021-02-03 12:49:44 +01:00
Olivier Goffart
d90fce9c1d Generate linear gradient in C++ 2021-02-03 10:16:23 +01:00
Simon Hausmann
40847a5563 Expose LinearGradientBrush also in C++ 2021-02-02 08:44:53 +01:00
Simon Hausmann
9b1fd52231 Fix class vs. struct mismatch 2021-02-01 20:36:08 +01:00
Simon Hausmann
efb496fc25 Add C++ constructors for sixtyfps::Brush 2021-02-01 20:33:40 +01:00
Simon Hausmann
f33b26fa93 Make Brush compile for C++
A few changes were required:

 * `LinearGradient(LinearGradient)` as enum variant unfortunately
    won't compile because the cbindgen generated constructor
    function (`LinearGradient()`) will try to also instantiate the
    variant type inside (`LinearGradient`) and that won't find the type
    but the function itself and error out. So the inner type is now
    called `LinearGradientBrush`.

 * The same name dance was required for `Color`, where the enum variant
   instead is called `SolidColor`

 * `BrushInner` was removed in favor of just `Brush`. The nicer Rust
    API will be the public variant, and for cbindgen we can just put
    the generated enum into an internal namespace, like we do for
    Resource for example

 * A `NoBrush` variant was added. Maybe that name could be improved?
2021-02-01 16:51:04 +01:00
Olivier Goffart
a36edfffbe Change the C++ test API of the send_mouse_click
So that rust and C++ have the same code that can be copy pasted
2021-01-29 16:55:48 +01:00
Simon Hausmann
6a4f2aa572 Added the two missing path sub-elements for quadratic and cubic curves 2021-01-28 14:14:24 +01:00
Simon Hausmann
a6fbc4c05d Add missing MoveTo sub-element for Path 2021-01-28 13:16:25 +01:00
Olivier Goffart
647f7effcd Add TextWrap and TextOverflow enum and corresponding property in Text
Although they ar enot working yet
2021-01-27 11:40:09 +01:00
Olivier Goffart
9de5af75ce Allow FocusScope to reject the events 2021-01-26 17:05:31 +01:00