Commit graph

122 commits

Author SHA1 Message Date
Simon Hausmann
66df71a3ca Convert Path to support brushes
* Rename `fill-color` to `fill`
* Rename `stroke-colo` to `stroke`
* Support using a brush for both properties
2021-02-03 15:45:33 +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
Simon Hausmann
93c0fe54ea Prepare for using graphics::Brush in the rendering backends
by introducing mappings to QBrush and femtovg::Paint
2021-02-03 08:39:53 +01:00
Simon Hausmann
1f091cb1c0 Rename Rectangle.color to Rectangle.background
Add support for built-in property aliases and rename `color` to
`background` - in preparation for it also changing to type brush.

Right now the alias is silent, a deprecation and overall change
will come in a subsequent change.
2021-02-02 17:01:12 +01:00
Simon Hausmann
69508575ec Fix rendering of Flickable
It should clip to its geometry
2021-02-01 15:35:36 +01:00
Simon Hausmann
3648995fef Fix window size with Qt backend when no size is specified
Our memory tutorial and docs sometimes use `Window { ... }` without any
`width` or `height` specified. That we should not tell the window manager :)
2021-01-29 16:11:05 +01:00
Olivier Goffart
f928026d98 Fix mouse over with the Qt backend 2021-01-28 18:22:23 +01:00
Olivier Goffart
b5bb27c083 Fix the memory game's tile not closing with the Qt backend
updating a model does not make the redraw_listener dirty
2021-01-28 18:16:28 +01:00
Simon Hausmann
e387d72421 Fix rendering artifacts with the GL backend in the memory tutorial
When a tile is open artifacts would be visible around the edge of the
tile. That's because a zero width rectangle would cause pixels to appear
with femtovg. The Qt backend however has an early abort in
`get_geometry!`.

This patches applies the same early-abort semantics to both backends and
switches to `<= 0`, corresponding to euclid::Size's `is_empty()`.
2021-01-28 17:57:35 +01:00
Olivier Goffart
a07fbf777a Fix initial windows size with the Qt backend 2021-01-28 17:23:10 +01:00
Simon Hausmann
9e09f6fa0d Fix rendering of the right curtain in the memory example with the Qt backend
The right curtain - when open - is supposed to fully clip away the logo image.
However the early return in `get_geometry!` when the width / height is < 1
results in the clip rect never set on the painter.
2021-01-28 17:12:26 +01:00
Simon Hausmann
680995432e Minor fixes to the BoxShadow element
* Use the same property names as `Rectangle`
* Use the same sizing behavior

Also added a "manual" test.
2021-01-27 15:34:27 +01:00
Simon Hausmann
96263e04ca Fix fitted path rendering
In the old backend we transformed the path to fit into the given width/height.

The new printer page uses that.
2021-01-27 15:03:24 +01:00
Olivier Goffart
d934a20bfa Text word wrap and elide 2021-01-27 12:55:20 +01:00
Simon Hausmann
f23d292aa9 Really boring box "shadow" implementation for Qt 2021-01-26 15:09:36 +01:00
Simon Hausmann
628e6fdb38 Add a BoxShadow element
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
2021-01-26 13:56:12 +01:00
Simon Hausmann
918aab667c Fix path rendering
Don't emit move() to for every relative event, as that starts a new subpath
2021-01-25 22:04:27 +01:00
Simon Hausmann
e2abdff83c
Fix path move to with Qt
Call the correct function :)
2021-01-25 21:37:26 +01:00
Simon Hausmann
a69ce3a397 Remove the 'align-' prefix from TextHorizontal/TextVerticalAlignment 2021-01-25 10:59:18 +01:00
Simon Hausmann
2d5f5fb821 Fix copy & paste shortcuts with Qt
* Rename logo to the more generic meta as keyboard modifier.
* Use control as the real modifier and map command key to it with
  winit and keep Qt semantics as-is.
2021-01-22 17:06:35 +01:00
Simon Hausmann
1fcfc6cea8 Fix key event text with Qt with modifiers
With modifiers, QKeyEvent::text() might be an empty string. In that case
we have to fall back.
2021-01-22 17:04:50 +01:00
Simon Hausmann
8dee095480 Minor cleanup
Clarify precedence
2021-01-22 15:21:35 +01:00
Simon Hausmann
d022dc1293 Make KeyEvent a struct
This way it's easier to expose to .60
2021-01-22 13:47:52 +01:00
Simon Hausmann
ae1178dd55 Make the modifiers simple booleans in the key event
This will give a nicer API to expose to .60. If the struct weren't
repr(C) then the booleans would be nicely packed, but alas that's not
happening. On the other hand we're not keeping many instances of them
around.
2021-01-22 13:47:52 +01:00
Simon Hausmann
886dd425fc Rename KeyEvent::KeyPress::string to text
It's the textual representation of the key
2021-01-22 13:47:52 +01:00
Simon Hausmann
9ca87ab312 Simplify KeyEvent
Fold CharacterInput into KeyPressed/KeyReleased and store the "key" as a string.

Also, instead of exposing the KeyCode we're encoding special characters
into the string.
2021-01-22 10:15:05 +01:00
Olivier Goffart
db740831ee Fix warning about unused imports 2021-01-21 18:35:59 +01:00
Olivier Goffart
3340730ff7 Use lyon to convert to path to QPainterPath or femtovg::Path 2021-01-21 13:21:03 +01:00
Olivier Goffart
0fe5c535c1 Use text_size instead of text_width in FontMetrics
So that multi-line text can work
(At least it magically works with Qt)
2021-01-19 10:17:12 +01:00
Simon Hausmann
5f265ffc09 Split up ComponentWindow::run() into show(), hide() and sixtyfps::run_event_loop()
This allows creating multiple windows for example, and it will allow for
showing windows in those tests that require a mapped window.

As a bonus, the run() function on generated components is not consuming
anymore.
2021-01-19 09:50:22 +01:00
Simon Hausmann
003fdb2564 Fix property dependency chain for Image::implicit_size()
The GL backend uses the item graphics cache for the image size function,
which uses a PropertyTracker. That tracker must have the Image's source
included in its dependencies, to avoid that when loading a HTML image
for example, the cache isn't invalidated when the source is changed
before the HTML image was loaded async. That's why the get() call on the
source property must happen from within the PropertyTracker's callback.
2021-01-18 08:50:41 +01:00
Simon Hausmann
f5626eb163 Use QPixmap instead of QImage for image drawing
Compared to QImage::load(path), QPixmap::load(path) has the advantage
of using Qt's internal QPixmapCache, which will avoid repeated decoding of
images.
2021-01-17 11:42:45 +01:00
Olivier Goffart
2d7817e049 Rename GenericWindow -> PlatformWindow 2021-01-15 18:32:55 +01:00
Simon Hausmann
94c1d884ba Allow specifying 0/0 as width/height of an image
With the support for a default binding to width/height on the implicit
size, we can now revert commit 42a5a62fb5.
2021-01-15 17:58:32 +01:00
Simon Hausmann
77b5a86168 Add an implicit size to text and image items
For all other items the default is the empty size.

This also required three fixes for the HTML image loading:

  * The upload_pending property value was inverted, it needs to start
    out as true (pending yes) and be set to false when it finished
    loading (not pending anymore)
  * Mark the upload_pending property as dirty before scheduling the
    redraw, in case it's sync
  * Pass the item rendering cache to the image_size function to ensure
    that the Rc<CachedImage> is not only weak inside the image_cache
    of the GLRendererData but also strong on the item.
2021-01-15 17:56:49 +01:00
Olivier Goffart
43b04f438c Fix Qt backend accessing the component 2021-01-15 16:27:42 +01:00
Olivier Goffart
cb0a21115f Remove set_width/height from GenericWindow trait 2021-01-15 15:12:12 +01:00
Olivier Goffart
dcb347fb7b Move more functions from the GenericWindow to the Window 2021-01-15 15:02:55 +01:00
Olivier Goffart
0ab60dff81 continue Window refactoring. Remove a few function from GenericWindow 2021-01-15 15:02:55 +01:00
Olivier Goffart
f1ce103c7b WIP: start splitting Window and PLatformWindow 2021-01-15 15:02:55 +01:00
Olivier Goffart
9741b56e30 Start implementing path with the Qt backend
(WIP)
2021-01-14 13:22:53 +01:00
Olivier Goffart
fff024731b Don't pass Pin by reference
(consistant with other method in that trait)
2021-01-14 11:54:17 +01:00
Simon Hausmann
42a5a62fb5 Fix rendering of image elements without specified width/height
Fall back to the source image dimensions like the old renderer
2021-01-14 08:53:14 +01:00
Olivier Goffart
44e279382f Qt backend: fix tests 2021-01-14 08:53:14 +01:00
Olivier Goffart
21c2100f8d Fix warnings 2021-01-14 08:53:14 +01:00
Olivier Goffart
2231711cf9 Qt text backend: draw the TextInput 2021-01-14 08:53:14 +01:00
Simon Hausmann
b79e4180c8 Rename trait Font to trait FontMetrics
This name more closely resembles the functionality it provides.
2021-01-14 08:53:14 +01:00
Olivier Goffart
62150cba1a Basic text input 2021-01-14 08:53:13 +01:00
Olivier Goffart
f396c1749f Qt backend: Don't cache the font
Not necessary after all
2021-01-14 08:53:13 +01:00
Olivier Goffart
61e6e9cf74 Qt backend: Actually fix border drawing 2021-01-14 08:53:13 +01:00