Simon Hausmann
a48f4253a2
Minor cleanup in draw_text
...
Create the font request on the text item side to reduce duplication and
remove the fallback logic from the font_weight accessor, in preparation
for automatic generation of that getter.
2021-01-14 08:53:13 +01:00
Simon Hausmann
a02186df22
Add support for application fonts
...
Needed to run the sliding puzzle demo
2021-01-14 08:53:13 +01:00
Olivier Goffart
0522b04d70
Rename create_gl_window to create_window
2021-01-14 08:53:13 +01:00
Simon Hausmann
cd915ddbe0
More vertical text alignment fixes - makes the printer demo look better
...
* When calculating the height of text for vertical alignment purposes,
don't use the minimum height but stick to ascent + descent - like the old
renderer. This gives Text items a constant height that depends on the
font size and not the content.
* Avoid scaling text metrics twice. It turns out that femtovg uses the
device pixel ratio / dpi argument for `set_size` only for scaling text
metrics. Since we do all the mapping from logical pixels to physical pixels
it's correct to let femto only operate in physical pixel range. As a bonus
this allows removing the refresh_window_scale_factor() dance in the
backend (including making the context current, etc.)
2021-01-14 08:53:13 +01:00
Simon Hausmann
b61c1e3af7
Fix baseline for text items
...
In the previous renderer the text, by default, is drawn at the top of the
bounding box. The default femtovg alignment is more like QPainter, but
that's not quite what we want here.
2021-01-14 08:53:13 +01:00
Simon Hausmann
065d717814
Fix missing rectangle border rendering
2021-01-14 08:53:13 +01:00
Simon Hausmann
76cee4a598
Fix some warnings about unused variables or imports
2021-01-14 08:53:13 +01:00
Simon Hausmann
9d7e151cb9
Simplify property access code in the renderer
...
Generate convenient property accessors using a derive macro
2021-01-14 08:53:13 +01:00
Olivier Goffart
9ef1c36a52
Move the eventloop module to the backend
2021-01-14 08:53:13 +01:00
Olivier Goffart
ab08502c77
Move the GraphicsWindow to the graphics backend
2021-01-14 08:53:13 +01:00
Simon Hausmann
41910f6694
Remove HasFont trait
...
This was only used for syntactic sugar which, as it turns out,
we can also have with a regular associated function that takes
Pin<&Self> \o/
2021-01-14 08:53:13 +01:00
Simon Hausmann
727c9a19f7
Add basic text item support
...
This needs more work, but gets something onto the screen at least.
2021-01-14 08:53:13 +01:00
Olivier Goffart
9050c29305
Don't use the window through the eventloop module
2021-01-14 08:53:13 +01:00
Olivier Goffart
c7ff67d0fc
Move the ItemRenderer to the item_rendering module
2021-01-14 08:52:22 +01:00
Simon Hausmann
769ad146e7
Preparation for text handling
...
Ensure the dpi on the canvas is up-to-date before/after rendering, as
measure_text etc. rely on it and it's otherwise initialized to 1 by
default. Unfortunately this requires jumping through some hoops, but
that can be fixed later in the canvas.
2021-01-14 08:52:22 +01:00
Simon Hausmann
5906f39a47
Silence some warnings
2021-01-14 08:52:22 +01:00
Simon Hausmann
c74c8592a0
Minor simplification of new_renderer
trait function
...
It's not necesary to pass the window dimensions when the renderer owns
the window.
2021-01-14 08:52:22 +01:00
Simon Hausmann
de4194c9ba
Make ItemRenderer take &mut again
...
It's cleaner and indeed possible
2021-01-14 08:52:22 +01:00
Olivier Goffart
16a1b7b2bd
Cache the pixmap in the native style
2021-01-14 08:52:22 +01:00
Simon Hausmann
43127cb059
Implement releasing of textures when items are destroyed
...
This means going back to an immutable renderer reference and interior
mutability for the canvas and the gpu cache. This is because while
traversing the item tree for rendering we may end up destroying
other items due to the lazyness of the models.
2021-01-14 08:52:22 +01:00
Simon Hausmann
1f9ba94c59
Rename the image cache
...
... to a more general gpu_cache and store an enum. That way we can
encapsulate the resource releasing - in the future - entirely in the
backend through run-time polymorphism in the backend (gpu cache data
enum) instead of a vtable method in the item to destruct the correct
type of data.
2021-01-14 08:52:22 +01:00
Olivier Goffart
6d316185fc
Fix Painting of native widget
...
the cx and cy needs to be the same as the widget position
2021-01-14 08:52:22 +01:00
Olivier Goffart
b157648ab2
More work towards getting native widget with the femtovg backend
2021-01-14 08:52:22 +01:00
Simon Hausmann
7643174f28
Use interior mutability for the canvas
...
We're going to need it later for the resource releasing
2021-01-14 08:52:22 +01:00
Olivier Goffart
f7c8d53e7a
Port the Qt Native item to the new API
...
this mostly restores code that was removed in commit 1a260b9dce13db38128f1f489633ba96f264d461
2021-01-14 08:52:22 +01:00
Simon Hausmann
d159a3b523
Implement caching of images
...
Don't re-load/decode the image every frame (and leak it), just load it
once per source change.
2021-01-14 08:52:22 +01:00
Simon Hausmann
8cfcc9bbf9
Fix image positioning, part 2
...
Don't forget the item's origin
2021-01-14 08:52:22 +01:00
Simon Hausmann
9b72081f01
Fix image scaling
...
Scale only the image if requested, not its position
2021-01-14 08:52:22 +01:00
Simon Hausmann
d92fe445d5
Remove the old GL renderer
...
and try to stub in the hooks to trigger the new one
2021-01-14 08:52:22 +01:00
Simon Hausmann
607fecdb18
Simplify rendering interface
...
Instead of passing through a generic transformation matrix, let's just
pass through what we actually use: a translation point
2021-01-14 08:52:22 +01:00
Simon Hausmann
d4f603246c
WIP: Start a femtovg backend
2021-01-14 08:52:22 +01:00
Simon Hausmann
f13215ba2c
Bump the glow version
2020-12-23 09:52:24 +01:00
Simon Hausmann
ca1fb8ab0d
Fix GPU primitive vs. rendering variable division for Rectangle
...
Changing the border radius or border width does not require uploading a new geometry.
Therefore these can become rendering variables.
2020-12-15 18:08:33 +01:00
Olivier Goffart
b32b7a5a7e
Fix the "pressed circle" in the slide puzzle being a square on firefox android
2020-12-15 13:40:24 +01:00
Olivier Goffart
aea1b3393d
Fix wasm build
2020-12-15 12:38:42 +01:00
Olivier Goffart
2b5213c408
Refactor the rendering variables in a enum instead of an array
...
And finish the ImageFit::contain implementation
2020-12-15 12:16:44 +01:00
Olivier Goffart
63a0d9308b
Bump version
2020-12-14 08:49:54 +01:00
Olivier Goffart
f6d60c2662
Update winit
2020-12-11 16:17:45 +01:00
Simon Hausmann
d9a92aea81
Prospective fix for WebGL rendering performance on Windows
...
Disable anti-aliasing on the GL context, as that's often implemented
multi-sampling and it appears generally slow with Angle on Windows.Since
we do anti-aliasing ourselves, so it is not needed.
2020-12-10 09:41:29 +01:00
Simon Hausmann
8314fbbb86
Simplify the texture width/height calculation a little bit
2020-12-08 16:01:53 +01:00
Simon Hausmann
1b2261c562
Fix two compiler warnings about unsued code paths when targeting wasm
2020-12-08 12:09:44 +01:00
Olivier Goffart
125ec13f24
Bump version numbers
...
Note: this does not update the documentation yet
2020-12-07 15:41:29 +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
fc4656571f
Tweak the html canvas handling
...
Refresh the canvas size if the browser window gets resized, for example due to orientation changes.
2020-11-26 10:42:04 +01:00
Simon Hausmann
af8df5cfbe
More font handling cleanup
...
Rename FontHandle to PlatformFont
2020-11-25 08:39:32 +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
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
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
bad7734c21
Avoid leaking cached texture allocations
...
Let the texture cache hold weak references and drain them each time
the rendering primitives builder finishes.
2020-11-23 16:26:21 +01:00
Simon Hausmann
ad99dc6475
Add support for image loading caching for embedded images
...
Extend the texture cache in the GL rendering backend to has by either
the path on disk or by the address of the static data.
2020-11-23 15:50:00 +01:00