Commit graph

580 commits

Author SHA1 Message Date
Simon Hausmann
f1d41db006 Clarify comment in draw_image_impl 2021-02-10 11:12:06 +01:00
Simon Hausmann
0a2385ad58 Fix colorization of images loaded via HTTP
There are two problems that this patch fixes:

  * It may happen that the image is not loaded yet, which means
    we need to wait with the colorization effect instead of colorizing
    the dummy (1x1) texture.

  * It may happen that we transition from a regular image to one
    that has a valid colorization brush, in which case we need to
    invalidate the graphics item cache.
2021-02-10 09:06:09 +01:00
Olivier Goffart
9db575952d Fix bold font with Qt
Qt expect a font between 0 and 99.
This is the mapping somehow used for QFont::Weight enum
2021-02-09 10:59:11 +01:00
Olivier Goffart
f7a76dc352 Add ImageFit::cover, and fix ImageFit::contain 2021-02-09 10:52:04 +01:00
Simon Hausmann
de9a215a1c Fix use of Clip inside a scrolled Flickable with the GL backend
We're using `Canvas::intersect_scissor` to combine the viewport clip of
the flickable with any child `Clip` element, for example. Unfortunately
`intersect_scissor` has a bug and this patch works around it by doing
the scissor intersection manually. This works because we don't apply a
global transform on the canvas -- all scaling and translation is done
locally in the draw functions.
2021-02-09 10:43:02 +01:00
Olivier Goffart
ec90d0c525 wasm: Resize the canvas to make sure it fits the window constraints 2021-02-09 09:41:01 +01:00
Simon Hausmann
24c3d4daed Fix ImageFit::contain with the GL backend
The centering of the source image was missing
2021-02-09 08:55:39 +01:00
Simon Hausmann
4e6cc8da43 Fix panic when trying to load an image with an empty path
We choose to ignore that and treat it like Resource::None
2021-02-08 15:16:05 +01:00
Olivier Goffart
8b535991ec Handle Esc in the GL backend
Issue #165
2021-02-08 09:00:09 +01:00
Simon Hausmann
949b61bad7 Implement image colorization for the GL backend 2021-02-05 19:27:03 +01:00
Olivier Goffart
9bdb793ec1 Rename Window::color to background 2021-02-05 09:38:40 +01:00
Olivier Goffart
743d729ecb Silent warning 2021-02-04 18:15:06 +01:00
Olivier Goffart
0e2471f76b Image::colorize support
(Qt only)
2021-02-04 17:44:01 +01:00
Simon Hausmann
3f541972ef Change Rectangle::border-color to be a brush
This allows things like filling a thick border with a gradient.
2021-02-04 17:05:00 +01:00
Simon Hausmann
a13cd33cd6 Fix Brush::NoBrush rendering
Don't map `NoBrush` to `femtovg::Paint::default()`, as that defaults to a
white solid fill.
2021-02-04 14:11:38 +01:00
Simon Hausmann
4e4817e041 Fix drop shadow rendering with the GL backend when using border radius without blur
The inner fill rect needs to follow the shape of the original rectangle.
When it has a radius we need to bleed it "slightly" into the shadow rect to avoid gaps,
and then draw it before the shadow.

Fixes #156
2021-02-04 12:59:36 +01:00
Simon Hausmann
1a9419638d Change the type of the color property for Text and TextInput to be a brush
This allows filling glyphs with gradients. However femtovg
appears to apply the start/end position per-glyph
instead of globally - resulting in a different result than Qt.
2021-02-04 11:54:57 +01:00
Simon Hausmann
d92c8cab23 Fix path fitting
Include the stroke width in the boundaries when fitting a path into the
size of a `Path` element.
2021-02-04 09:09:23 +01:00
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
c41062e9bb Fix linear gradient rendering with the GL backend
Share the code for transforming the gradient's angle to start and end points,
and apply the transformation to the bounds.
2021-02-03 14:38:29 +01:00
Olivier Goffart
8555f4f83a Fix Qt gradients coordinate mode 2021-02-03 13:29:02 +01:00
Olivier Goffart
8f93fdcc4e Convert Linear Gradient to QBrush
(Untested)
2021-02-03 12:57:51 +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
3d3606a8f1 Remove unused rust module
This file is not needed anymore

Amends commit 5df6c99f4f
2021-02-03 08:56:53 +01:00
Simon Hausmann
16a7585d07 Hack to make the demos start up with latest macOS and GL backend
The fallback list has changed slightly and it appears that SIP is
slowing down reading ~75MB font files.

This is sub-optimal though, font-kit shouldn't assert on certain fonts
and it should really mmap fonts instead of
reading them into memory.
2021-02-03 08:55: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
08413212f9 Improve rendering of circles with the GL backend
Rendering a circle using `rounded_rect` will create a path with `LineTo`
verbs for the edges. Unfortunately those create visible artefacts,
especially in lower resolutions.

Therefore this patch attempts to detect this scenario and draw a circle instead.

Fixes #152
2021-02-01 12:50:26 +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
Simon Hausmann
5df6c99f4f Improve application font support for WASM and simplify font handling
We can use fontdb on all platforms, which gives consistent font query
behavior of application fonts. And then we also don't need our hand-made
"db" anymore for the wasm build and the included DejaVu font.
2021-01-28 21:47:52 +01:00
Simon Hausmann
615ead0db0 Include SVG support also in the wasm build
This disables text in SVG, but that's not really working yet anyway
because it needs to be connected to the font selection SixtyFPS uses.
2021-01-28 21:24:07 +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
Olivier Goffart
0aa3561a55 Fix build.rs not being re-run when the cpp! code changes 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
Olivier Goffart
fea2478859 Update version number everywhere 2021-01-28 16:34:13 +01:00
Simon Hausmann
49bffd49ba Fix C++ builds not coming up when there's no Qt available
For the Rust API crate we depend on the GL and the Qt feature on the default
backend, but with Corrosion we can't select features yet. So at least
include the GL backend by default.
2021-01-28 15:31:40 +01:00
Olivier Goffart
61ea404faa Disable default feature of dependent libs 2021-01-27 18:14:38 +01:00
Olivier Goffart
6effc6449e resvg can't compile for wasm 2021-01-27 18:09:44 +01:00
Olivier Goffart
8e8e25b0b5 Render SVG images in the GL backend 2021-01-27 18:04:03 +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