Commit graph

1419 commits

Author SHA1 Message Date
Olivier Goffart
a4b31fbe2e CI: -W was not enough to override the -D, use -A instead
Also fix a warning about the usage of std::any::Any without dyn
2021-05-06 19:03:52 +02:00
Simon Hausmann
4a603aa204 Add comment about ttf parser version pin 2021-04-29 13:49:44 +02:00
Simon Hausmann
42154c5ead Use the same version of the ttf_parser crate as rustybuzz
We're currently using three different versions of ttf_parser, and
this brings it down to 2. The other culprit is femtovg.

Saves ~1kb on release build of sixtyfps-wasm-interpreter
2021-04-29 11:21:30 +02:00
Simon Hausmann
d73e7e48d3 GL backend: Fix GPU memory leak with layers
Delete any FBOs before making the context not current. Ooops!

Fixes #211
2021-04-29 09:23:07 +02:00
Olivier Goffart
9e6970abfe ListView: Fix panic when removing item that are not visible 2021-04-27 16:37:17 +02:00
Simon Hausmann
e3d031a5a4 Fix wasm build when Qt is found in the host system
Pull in qttypes only on non-wasm builds. This requires resolver = "2" as
well, but we require that anyway for wasm builds.
2021-04-27 15:43:05 +02:00
Simon Hausmann
491b064e27 Fix loading of the printer demo in the online editor
Don't panic when loading a path from the file system fails, instead print an error.
2021-04-27 14:38:46 +02:00
Simon Hausmann
140de87351 Add a brief overview section to the C++ interpreter namespace
This mirrors the Rust module side.

Unfortunately the code examples aren't rendered correctly :(
2021-04-27 13:02:41 +02:00
Olivier Goffart
576eb116e8 Make the is_dirty flag a property so that changing it will force a repaint 2021-04-27 11:05:35 +02:00
Simon Hausmann
30ffe731b2 Bump femtovg and remove the patch 2021-04-27 11:01:47 +02:00
Simon Hausmann
1ef1e79b93 GL backend: Fix round corner clip radius
Rendering tests/cases/examples/rectangle_clip.60 shows a border radius
for the clipped area that's not identical with the border radius of the
inner edge of the rectangle stroke.

It appears that the stroke's inner radius is not exactly the difference
of the line (border) width but rather scaled by kappa.
2021-04-26 17:34:00 +02:00
Olivier Goffart
0bb61cc1b3 Fix popup placmement and size with the qt backend 2021-04-26 17:29:06 +02:00
Olivier Goffart
76befb63a3 Fix the dependency tracker not registering a dependency if it was not dirty
Also fix opening/closing the popup should refresh the window
2021-04-26 15:24:48 +02:00
Olivier Goffart
c9c0f8d638 Fix useless dependency on the animation tick
This was causing the Qt backend to redraw parmanently
2021-04-26 15:24:48 +02:00
Olivier Goffart
3380383787 Bump version number
(Does not include docs and README yet)
2021-04-26 13:16:48 +02:00
Olivier Goffart
37f5cf5ce7 Fix the text being cut of in some cases 2021-04-26 11:28:37 +02:00
Olivier Goffart
a61935568a Fix text alignment with multiple lines
Broken by d8ebd42712
for issue #207
2021-04-26 10:13:38 +02:00
Olivier Goffart
d8ebd42712 GL backend: fix vertical alignment of text
Fix issue in
https://github.com/sixtyfpsui/sixtyfps/issues/207#issuecomment-825780094

For the purpose of alignment, we need to use the font height, not the actual
text height, because otherwise it does not look visualy centered if the
text does not have letters that goes under the baseline
2021-04-25 14:20:35 +02:00
Olivier Goffart
f4c38f3700 Update dependencies 2021-04-23 16:24:30 +02:00
Olivier Goffart
6fe2c1fa56 Prevent the maximum size to be set to 0,0
Otherwise the window will disapear and will never be seen again

This is a mitigation for #194
2021-04-23 13:10:53 +02:00
Olivier Goffart
1f64f7ab27 Also set the preferred size for the GridLayout
Issue #182
2021-04-21 18:56:28 +02:00
Olivier Goffart
f1338c39ef GL backend: fix maximum and minimum size 2021-04-21 18:41:51 +02:00
Olivier Goffart
9adf95c99f Fix native widget with the GL backend and a scale factor
We need to keep everything in logical, but it most likely already it
2021-04-21 18:38:58 +02:00
Olivier Goffart
74e0a98105 Adapt the GL backend to the logical/physical pixel changes 2021-04-21 17:44:53 +02:00
Olivier Goffart
91ed04a72c Make length (still the default for all property) be the logical length
And a new `physical_length` is now the physical_length unit

Note: this does not change the runtime part yet
2021-04-21 17:15:19 +02:00
Olivier Goffart
7ae850d564 Rename Type::Length -> Type::PhysicalLength 2021-04-21 17:15:19 +02:00
Olivier Goffart
c2745c76ed Use qttypes from crates.io since it has been released 2021-04-21 13:12:55 +02:00
Simon Hausmann
db705c0104 GL backend: Fix image colorization
Commit f50d573120 accidentally changed the
composition mode for the colorization - it should of course be SourceIn.
2021-04-20 22:34:35 +02:00
Simon Hausmann
dbfa5cadde Fix text rendering with path-clipping
When rendering into a layer, we applied the y coordinate system flip
using a transform. That transform is incompatible with
Canvas::fill/stroke_text, which uses transform_point to transform the
glyph quads. That appears to not work, as opposed to the
y-flip in the main vertex shader.

Fortunately we can work around it by doing the flip when rendering the
layer image (as part of the fill).

Closes #199
2021-04-20 22:25:59 +02:00
Simon Hausmann
29425c5138 GL backend: fix texture leak when using path clipping
Make sure to release the layer images after flushing. The shared data remains alive beyond the flush.
2021-04-20 15:07:08 +02:00
Olivier Goffart
2e09a58fd7 Use the qttypes crate 2021-04-20 12:41:44 +02:00
Simon Hausmann
f50d573120 GL backend: Add support for path clipping, used for rounded rects
Render the sub-tree of items into an intermediate image and fill the
clip path with that image.

Fixes #199
2021-04-20 10:26:11 +02:00
Olivier Goffart
862f65c151 Fix panic in the interpreter when accessing uninitialized global
As the type of the Value wouldn't match the expected type

Fixes #173

(Also added a way to test the interpreter by making the interpreter
make sure the property "test", if it exists, is true)
2021-04-19 11:41:36 +02:00
Olivier Goffart
302867d865 Attemt to speed up compilation times
According to llvm-lines, MaybeAnimatedPropertyInfoWrapper::set_binding was
in the top 5 of functions with 15971 lines over 46 copies.
Split the code that does not depend on the Item parameter in a different function
2021-04-18 12:21:09 +02:00
Olivier Goffart
ea5e611f41 Properly combine the alpha in the GL backend 2021-04-15 15:55:14 +02:00
Simon Hausmann
6d7f8b6bab Fix handling of border width for clip in the GL backend
Similar to commit 48e6d2f48b, share the rect adjustment
code between the rectangle drawing code and the clipping.
2021-04-15 15:43:49 +02:00
Olivier Goffart
3bf3761450 Implement the Opacity filter.
Notice that the GL implementation currently don't combine the opacity
2021-04-15 10:17:52 +02:00
Olivier Goffart
ba2f2d5719 Add an Opacity element that does nothing 2021-04-15 10:17:52 +02:00
Simon Hausmann
fad4ef677f Improve colorize effect with the GL backend
As reported in issue #176 , there is a difference between the rendering
with Qt and femtovg. It appears that this is due to incorrect
assumptions about whether the rgb values in the intermediate buffer
image for colorization have the alpha-channel pre-multiplied or not.

When rendering into the image buffer, we would pre-multiply the alpha,
but when rendering the buffer itself, femtovg's fragment shader would
assume texture type 2 and multiply the alpha again. Therefore set the
image flag to avoid that.
2021-04-14 19:17:55 +02:00
Simon Hausmann
48e6d2f48b Fix handling of non-zero border width in clip-enabled Rectangles
The border should be visible (as in the included test case), which this
patch fixes for Qt by subtracting the border width just like when drawing.
2021-04-14 13:34:51 +02:00
Simon Hausmann
6a1191c5a5 Add Window.default-font-weight
This completes the font properties that can be set as default.
2021-04-14 11:16:22 +02:00
Simon Hausmann
afe3df6381 Remove the public API for registering fonts by path or memory chunk
This is not needed anymore in the light of being able to write `import "blah.ttf"` in .60 markup
2021-04-14 10:01:33 +02:00
Simon Hausmann
5e7a030e67 Fix cargo fmt
Remove trailing whitespace
2021-04-14 09:49:02 +02:00
Simon Hausmann
f7ce1ba8b4 Generate registration code for custom fonts imported in .60 files
This removes the need to manually register fonts. This is initially
applied to the printer demo, but the other demos and removal of the
public manual registration API will come in follow-up commits.
2021-04-14 09:30:32 +02:00
Simon Hausmann
87a80023c9 Fix warning when compiling on non-windows 2021-04-13 15:49:32 +02:00
Simon Hausmann
f2c59725fb Fix rendering of chinese text on Windows
Use font-kit's get_fallback_fonts on Windows, since it's actually implemented there.
This allows determining the fonts to fall back to given the reference text.

Fixes #195
2021-04-13 15:47:23 +02:00
Simon Hausmann
0883d15a92 GL renderer: Cache the result of the font resolution in the item rendering cache
For rendering itself as well as font_metrics() queries, store the result
in the item's rendering cache. This will be needed as the lookup is
about to become more expensive due to the need of calling OS functions
that do text analysis to determine a list of fallback fonts.

When text hasn't changed but we re-render items or re-do the layout, we
need that to be cached.
2021-04-13 15:31:58 +02:00
Simon Hausmann
104eee2527 Simplify GLFontMetrics
Store the GLFont directly as in the future that'll come out of the item cache.
2021-04-13 15:31:09 +02:00
Simon Hausmann
47a255eea5 Further preparation for more aggressive font caching
Pass everything needed for delayed evaluation for
`PlatformWindow::font_metrics()` to permit caching the font matching
result in the Text/TextInput's rendering cache.
2021-04-13 15:30:33 +02:00
Simon Hausmann
a48b81022b Prepare for font caching in text items in the GL renderer
We query text metrics frequently for text items, for example when in
layouts. This requires font resolution, which is about to become more
much more expensive due to analysis of the underlying text. To speed
this up, the objective is to use the item rendering cache. Making that
work in turn requires querying all related properties inside a property
tracker. That means we need to delay querying anything related to that,
including the font request needed for the `font_metrics()` function on
the PlatformWindow trait.
2021-04-13 15:02:57 +02:00