Commit graph

1059 commits

Author SHA1 Message Date
Simon Hausmann
bdebb77f14 Implement Iterator for the Model in Rust 2020-12-02 12:04:32 +01:00
Olivier Goffart
e73bbbcd10 More work on signal returning value 2020-12-01 18:47:49 +01:00
Simon Hausmann
276bcd6574 Implement Model for ModelHandle
This makes extracting model data out of .60 files a little easier
2020-12-01 16:14:43 +01:00
Olivier Goffart
7bfa998f00 Popup positioning 2020-11-30 18:39:41 +01:00
Olivier Goffart
b0a9d65f55 More Popup WIP 2020-11-30 18:39:41 +01:00
Olivier Goffart
852eeb1c11 WIP popup 2020-11-30 15:20:51 +01:00
Simon Hausmann
2472eb51f0 Add the plaster font to plaster theme of the slide puzzle
For regular builds this is done by adding Rust API that allows
registering a font, and for the web the font is installed into the
browser using JavaScript API.

This is an initial approach to just add this ability. It might make
sense to introduce a syntax in the `.60` file to allow for the
registration of fonts and letting the compiler generate code that
performs this embedding and registration automatically.
2020-11-27 14:29:56 +01:00
Simon Hausmann
5274ad15ec Fix font height determination with the canvas font backend
Since TextMetrics can't give us the ascent/descent yet, the web points
towards another clever alternative: Using offsetHeight on a span and the
same font.

That allows removing the padding hack that also broke the arrow
placement in the printer demo.
2020-11-26 21:03:19 +01:00
Simon Hausmann
732f462b86 Remove unused import 2020-11-26 19:14:08 +01:00
Simon Hausmann
4d9c39537b Fix bogus "rustdoc" warning
This is just an internal comment.
2020-11-26 17:19:09 +01:00
Simon Hausmann
6b6fc1e262 Various fixes to the canvasfont backend
* When no family is specified, explicitly try to select the system font or fall back to sans-serif.
  Do avoid running into Times New Roman that way %-)
* Add padding to the canvas texture height to work around missing height measurements
  and avoid the bottom clipped glyphs that way
2020-11-26 16:56:19 +01:00
Simon Hausmann
49112cda9b Fix deprecation warning from image-rs
Bump to the latest version and use the non-deprecated API
2020-11-26 10:56:21 +01:00
Simon Hausmann
2dd459fdfd Share the glyphmetrics structure between font backends 2020-11-25 12:20:35 +01:00
Simon Hausmann
5e37fa027b A few more font docs 2020-11-25 08:44:42 +01:00
Simon Hausmann
af8df5cfbe More font handling cleanup
Rename FontHandle to PlatformFont
2020-11-25 08:39:32 +01:00
Simon Hausmann
0f7ba74abe Added some documentation for the font module
More to come :-)
2020-11-24 22:54:14 +01:00
Simon Hausmann
4e4d456687 Remove dead code 2020-11-24 22:40:58 +01:00
Simon Hausmann
f9ed6df123 Avoid unnecessary font loading with font-kit
Load (mmap) the font_kit::font::Font only once, not per pixel size.
2020-11-24 22:40:19 +01:00
Olivier Goffart
3ae7c6e0b5 Hover effect 2020-11-24 18:09:32 +01:00
Olivier Goffart
8a64f10e84 Remove ComponentVtable::input_event
And the custom handling of the mouse grabber
2020-11-24 16:23:37 +01:00
Olivier Goffart
845627c6b4 Implement the mouse_input in a generic way so we can remove the one in the component 2020-11-24 15:40:41 +01:00
Olivier Goffart
0c97b4f296 More use of the ItemRc 2020-11-24 13:42:34 +01:00
Olivier Goffart
124eec9960 Introfuce ItemRc and ItemWeak
Wrapper around ComponentRc and index
2020-11-24 13:42:34 +01:00
Simon Hausmann
d80868bbf4 Add support for font_weight to Text and TextInput
This allows implementing another sliding puzzle theme feature, the
boldness of the tile number text in the simple theme when the tile is in
the correct position. For the other themes the weight is constant and
it's bold.

More cleanup to follow later: unify the font handle and FontCacheKey
handling, improve the API to allow for the use of symbolic constants
(normal, bold, etc.) instead of the CSS number values.
2020-11-24 10:10:00 +01:00
Simon Hausmann
f0289192b7 More font handling cleanup
Group all fields we need to determine a physical font into one FontRequest
structure and use that throughout.

That way adding more fields will require less changes.
2020-11-24 09:00:07 +01:00
Simon Hausmann
05204a3185 Font handling cleanup
To make adding of more font related properties easier in the future, and
to simplify the text code a little, define a HasFont trait and implement
it for Pin<&Text|&TextInput> so that we can more easily get an Rc<Font>.
2020-11-23 20:39:12 +01:00
Simon Hausmann
79b7e825bb Minor cleanup of font cache handling
Store the font family as a SharedString, as that allows us to make a
lookup without a string copy.
2020-11-23 18:23:22 +01:00
Simon Hausmann
3d85e45ec3 Add support for source clipping to the Image element
This allows rendering only a sub-rectangle of the original image, which
we can use right away in the sliding puzzle demo.
2020-11-23 15:46:59 +01:00
Olivier Goffart
807dbb3c00 Puzzle: Kick animation
Also support timer that can be cancelled from the timer event
2020-11-23 13:38:44 +01:00
Olivier Goffart
596b740b62 Rename ARGBColor to RgbaColor 2020-11-23 11:47:47 +01:00
Olivier Goffart
3f111ecd30 Fix a few doc typo 2020-11-23 11:47:16 +01:00
Olivier Goffart
4383566db9 slide puzzle: Animation on checkbox 2020-11-20 17:14:04 +01:00
Simon Hausmann
4e36ba3ed9 Fix build
Adjust to vtable changes
2020-11-20 15:50:35 +01:00
Olivier Goffart
08fe5f6c72 Add a Clip 2020-11-20 15:45:45 +01:00
Simon Hausmann
89e0b57627 Rework and simplify the focus handling
Instead of determining the focus item through item tree traversal and
pointer comparison and storing the intermediate indices in the
components in the tree, remember the focus item by a pair of
VWeak<ComponentVTable, Dyn> and item_index: usize.

This speeds up determining the focus item as well as delivering events,
which can now be done directly after retrieving an ItemRef with
get_item_ref.

This also fixes the duplicate line edit focus in the 7gui cells
test case.
2020-11-20 15:33:15 +01:00
Simon Hausmann
7ddf3a9b31 Minor cleanup to item visitor API
While visit_items/visit_internal allows an isize index (because of -1 to indicate the root),
the callback should always take a valid item index, thus usize.
2020-11-20 13:37:45 +01:00
Olivier Goffart
3cd84473e2 Transitions in the interpreter 2020-11-20 12:32:43 +01:00
Olivier Goffart
d5c4885955 Transitions in C++ 2020-11-20 11:38:03 +01:00
Olivier Goffart
091a0834d3 Transitions in rust (C++ and interpreter not implemented yet) 2020-11-20 10:30:17 +01:00
Olivier Goffart
4d4c73925c Some refactoring to prepare for transitions on properties 2020-11-20 09:39:06 +01:00
Simon Hausmann
78fae068dd Use ComponentRc during item tree traversal
This is in preparation for allowing the run-time / items to clone VRc's
of the component.

ComponentVTable functions like visit_children_item contine to take a
ComponentRefPin as "self" parameter type, as a VRc would not be
supported by rust right now. That means the implementation then uses
self_weak to obtain a strong self-reference.
2020-11-19 17:04:01 +01:00
Olivier Goffart
c50fc6f51c More work on state properties with transitions
C++ set the proper binding for StateInfo state binding
2020-11-19 13:31:18 +01:00
Olivier Goffart
cfa9413861 More work on the state binding for transition:
When there is a transition, turn the state property into a property of StateInfo

Not yet implemented for C++
2020-11-19 12:43:28 +01:00
Olivier Goffart
05924da620 Create a StateInfo object and a special binding for it 2020-11-18 17:29:04 +01:00
Olivier Goffart
103c7cf9a5 Use a custom Instant that is repr(C) 2020-11-18 16:37:22 +01:00
Simon Hausmann
7a5113ece1 Free graphics resources without item tree traversal 2020-11-18 08:49:57 +01:00
Simon Hausmann
54ee7b3556 Cpp: Give each generated component a ComponentWindow
That's a counted reference to the window in the run-time and avoids the need to do the parent->parent->window dance.
2020-11-16 16:59:57 +01:00
Olivier Goffart
0672f4b3cd Expose Timer API to rust API
And use it in the puzzle demo to implement the auto play mode
2020-11-16 12:17:02 +01:00
Olivier Goffart
b8d9373edd Slide Puzzle: add an image 2020-11-13 14:13:51 +01:00
Simon Hausmann
c258a907f0 Simplify event loop start-up
Move the layout constraint tracker into the window where we can apply
the constraints right before drawing, instead of doing that from within
the event loop. This allows to remove the component parameter from the
run function.
2020-11-12 15:04:48 +01:00