Commit graph

601 commits

Author SHA1 Message Date
Robert Broketa
c3c7765f80 Add no-frame property for a borderless/frameless window 2021-10-11 10:21:21 +02:00
Philipp Gesang
f916ca4124 Bound Text contents width
The contents of a Text would wander to the left with center and
right alignment because some size calculations don't take the
maximum available width into account.
2021-10-08 08:05:42 +02:00
ogoffart
77fcd5221b Bump version number to 0.1.4 2021-10-07 09:36:43 +00:00
Simon Hausmann
7aa6545046 Enable support for gzipped SVG
usvg detects gzipped SVG by looking at the first bytes, and Qt supports it as well.
2021-10-06 21:24:44 +02:00
Simon Hausmann
30e79d3ea2 Fix panic with GL backend when using non-existent font families
The database is not empty, as the changed expect() suggests, but instead
it just means that the family could not be found. This can happen for
example with something like this:

export App := Window {
    Text {
        text: "Ok";
        font-family: "Non-existent";
    }
}

or it can also happen when loading the printer demo in the online
editor, where a custom font is supposed to be available but that's not
implemented for wasm builds.

So instead of panicing, fall back to querying for a last-resort
sans-serif family.

For Linux, we register fontconfig's choice for sans-serif, otherwise
fontdb has defaults for macOS and Windows, and for wasm we register our
copy of DejaVu. So that cannot really fail....
2021-10-05 14:03:17 +02:00
Simon Hausmann
05b7d3e2ee Avoid over-eager animation ticks
Only update animations on input events and when the windowing system requests a redraw.
2021-10-05 12:43:11 +02:00
Simon Hausmann
e987a4aba3 Fix granularity of run-time borrows in GL backend window handling
When processing window specific events, or generally when accessing
the ALL_WINDOWS refcell, keep the time for borrow to an absolute
miniumum. That way any subsequent method calls may further acquire the
refcell.

This patch re-organizes the entire deeply nested window event handling
in a function with slightly less indentation.

Fixes a panic when calling hide on a Window from within a callback
handler.

Fixes #539
2021-10-05 12:43:11 +02:00
ogoffart
8b9717633e Bump version number to 0.1.3 2021-10-05 10:31:45 +00:00
Simon Hausmann
0e8efea2ff Further speed up font handling in the GL backend
Use the new fontdb API:

* When registering embedded fonts, we don't need to make a copy of the
  embedded font data anymore.
* We don't have to mmap the font files ourselves anymore, fontdb can
  do this now for us.
2021-10-04 15:11:55 +02:00
Olivier Goffart
2716e4b4dd TouchArea: add the pointer-event callback
... instead of `pressed-changed`

This allows to see what mouse button was pressed.

Closes #535
2021-10-04 14:39:49 +02:00
Simon Hausmann
137ad32886 Fix abrupt process abort when showing a window with constraints in Weston/Wayland
Don't apply constraints to the winit window if we're in fullscreen mode,
as that might result in us allocating a surface that's bigger than the
screen, which in turn may result in the process exiting right away.

Fixes #532
2021-10-02 09:07:57 +02:00
Simon Hausmann
4bda3c16db Bump GL backend dependencies
Various third-party bumps and femtovg bumped to include a fix for exact
GLES 2.0 detection. Glutin may give us a 3.x GLES context even if we ask
for 2.0 (https://github.com/rust-windowing/glutin/issues/1282) and I can
reproduce that for example on Raspbian with MESA. But femtovg should
work with both, hence the update.
2021-09-30 14:40:19 +02:00
Simon Hausmann
87dc98b5d9 GL backend: Fix rendering of SVGs with text inside
It works with the Qt backend, and it should work with the GL backend as
well. usvg supports it, uses the same underlying shaper and the API even
allows sharing the font database.
2021-09-30 14:32:46 +02:00
Olivier Goffart
465857c42e Handle the Keypad Enter as Return
Fixes #525 : LineEdit::accepted doesn't react on numpad Enter
2021-09-30 11:48:09 +02:00
Simon Hausmann
684fcc8dff Fix support for OpenGL ES 2.0
We default to querying GlLatest from glutin, which might run into a code
path in glutin's `bind_and_get_api` in `egl/mod.rs` that will return
None as version and pass that to `choose_fbconfig`. That function will
panic with unimplemented() if the bound API is GLES, because we need to
know which version of GLES. The bound API in turn might be GLES if
desktop GL is not supported.

To accomodate for this situation, this patch changes the GL context
creation logic to first try explicitly GLES 2.0 and then fall back to
the GlLatest variants.

In addition this pulls in a newer version of femtovg to fix FBO
rendering with stencil with GLES 2.0.
2021-09-30 11:10:42 +02:00
Simon Hausmann
001d8442a8 Remove unnecessary glow dependency
We depend on glow through femtovg, but we don't use any APIs of it anymore.
2021-09-30 10:58:48 +02:00
Simon Hausmann
dd92c84ea2 Apply suggestions from code review
* Remove stray debug statement
* Fix typo

Co-authored-by: Olivier Goffart <ogoffart@sixtyfps.io>
2021-09-29 17:03:46 +02:00
Simon Hausmann
91ffb4d41f Initial support for mmapping fonts directly into femtovg
This version doesn't require the change to fontdb yet, but uses the new
femtovg API to allow feeding in shared (mmapped) font data. On macOS
this saves 4-5 MB of ram just for the gallery, on my default Ubuntu it's
roughly ~40MB.
2021-09-29 17:03:46 +02:00
Olivier Goffart
3f13c69ca8 Hide the cursor of the disabled TextEdit
Fixes #513
2021-09-23 12:39:57 +02:00
Simon Hausmann
7edf19d5b2 Fix GL backend build without x11
Copypasta's wayland clipboard requires a different API that we don't cater to yet, so
for now to fix the build, disable the clipboard (use in-app nop).
2021-09-22 11:52:42 +02:00
Simon Hausmann
043c1932ad Make it possible to disable x11 support
The GL backend defaults to enabling X11. The default crate depends on
the GL backend but it doesn't specify default-features = false,
therefore x11 is basically always enabled.

In line with commit 1fd8c7236a, this
change makes sure that the defaults are defined in the tree entry
points: The Rust API crate, the interpreter crate and the CMake project
define the defaults. The latter already enabled X11 by default, but the
first two did not.
2021-09-22 11:32:51 +02:00
Simon Hausmann
8fea1bf52e GL backend: Fix missing glyphs in the slide puzzle demo
The checkmark and reload have always been missing in some circumstances.
The recent fixes with glyph coverage check helped, but they do not account for the fact that
characters like the check mark map to the same script (Common). So for these scripts
we need to perform an exact glyph coverage check.
2021-09-21 14:12:44 +02:00
Simon Hausmann
1214e444f0 GL backend: minor speed up for font fallback handling
Avoid the dance of using font-kit to re-discover the same .ttf file and
read it all into memory every time we need to render text where the primary font
provides insufficient coverage.
2021-09-21 11:09:37 +02:00
Simon Hausmann
b5de610eb6 GL backend: minor speed up in text rendering
Only query fallback fonts from the system if we really need to.
2021-09-21 10:50:09 +02:00
Simon Hausmann
ac0cc85d33 Simplify font resolution in the GL backend
The font resolution function querying fontdb is fast now, so we can
always call it when rendering text. That way we don't need all the
indirection in the text_size(), etc. functions, we don't need an entry
in the item graphics cache for the font and we can avoid a lot of
property dependencies.
2021-09-21 10:10:45 +02:00
Simon Hausmann
2f1db396e8 GL backend: Speed up glyph coverage checking
Instead of always mapping the face (from disk), first fan out existing
cached coverage information. Any unchecked scripts are then checked
in the slow code path with `with_face_data` later.
2021-09-21 10:07:21 +02:00
Simon Hausmann
b021152fcc GL backend: Fix internal variable name
The available families is used on all platforms and doesn't need a _ prefix anymore.
2021-09-21 09:20:01 +02:00
Simon Hausmann
d2923d51f6 GL backend: add basic font fallback support for Linux
Use the static (but long) fallback list that we get from fontconfig in the beginning.

This works, but can be optimized to operate on a trimmed and shorter list,
which will speed up the fallback. But for now this makes it work.
2021-09-17 18:58:18 +02:00
Simon Hausmann
cc7ea5b92a GL renderer: fix rendering of Text/TextInput when the text property changes in a way that requires different fonts
Unfortunately the text property was not included in the property dependency chain
for the cached Font.
This is fixed by delaying that with a getter function, but in the mid term
we should be able to remove this again once
femtovg learns lazy font resolution.
2021-09-17 18:27:44 +02:00
Simon Hausmann
db842e1b6b Fix font fallback handling on macOS
Permit processing the entire font cascade list and load fonts from there
lazily by checking their glyph coverage and remembering it.
2021-09-17 18:27:40 +02:00
Simon Hausmann
6130e04e84 Rework the font loading in the GL backend
The basic idea is to use fontdb's load_system_fonts() mechanism, in
conjunction with its built-in mmap support, to get an overview over all
installed fonts on macOS, Windows and Linux.

This isn't quite perfect in terms of discovering systems defaults, but
it's much faster than font-kit's approach of querying the system (good)
but reading the matched files into memory (not using mmap). And we have
the option of perfecting it by using fontconfig directly on Linux (where
the backend is most important).

This also paves the way for better fallback handling, as now we have a
list of all available families and we can use system APIs to query for
fallbacks.
2021-09-17 14:41:14 +02:00
Simon Hausmann
ed3d848d02 Fix native widget rendering when the window is inactive
Set QStyle::State_Active conditional to whether the window is active,
which maps to Qt's active window concept and winit's has-focus (until we
render popups differently).
2021-09-15 15:34:34 +02:00
Simon Hausmann
37464a45c5 Fix rustdoc build in the CI
The nightly has become a bit more picky about seemingly unused variables
:-)
2021-09-13 14:19:17 +02:00
Simon Hausmann
011a9ffb83 GL backend: Prospective fix for panic when trying to create window with AMD GL driver
The srgb workaround from commit a0e827e200
appears to work with the AMD GL driver, without which the GL context
creation works (as tested by the reporter).

So instead of panicing, fall back to the glutin default with possibly an
srgb framebuffer, when trying to create a GL context. If that also
fails, provide a better error message than "called unwrap on an err".

cc #481
2021-09-09 11:53:19 +02:00
Simon Hausmann
df4e06be98 GL backend: render the cursor also for an empty text input if requested 2021-09-07 11:33:28 +02:00
Simon Hausmann
c142cd61b3 Janitor: bump usvg and resvg once more :) 2021-09-07 08:38:40 +02:00
Simon Hausmann
9a947553b7 Janitor: Bump glow and femtovg versions
femtovg also brings in the same glow version, so no duplicates here
2021-09-07 08:33:37 +02:00
Simon Hausmann
8b5e29534f Upgrade fontdb
The new version splits the mmap feature out of the fs feature.
2021-09-06 15:41:52 +02:00
Simon Hausmann
dd043fc51b Fix texture caching for images with the same source but different image-rendering properties
As tests/cases/examples/image_rendering.60 itself demonstrates, the png file
should be loaded into the CPU side image cache once, but the two textures
should be cached independently.

cc #465
2021-09-06 13:47:41 +02:00
Simon Hausmann
71cd4bb3f0 GL backend: clean up of window map state handling
Use std::cell:Ref/RefMut to reduce the indentation and make it easier to
see where the borrow occurs.
2021-09-06 13:15:06 +02:00
Simon Hausmann
192652b78e Fix panic with viewer's --auto-reload feature with the GL backend
Improve the granularity of the borrow of the mapped window, to avoid
that when applying window properties we recurse into a borrow due to
the call for setting the geometry triggering a notify that borrows.
2021-09-06 11:55:22 +02:00
Simon Hausmann
7fb58b9334 Minor cleanup: unify two impl blocks for GraphicsWindow 2021-09-06 11:55:22 +02:00
Ryan Van Gilder
e7245cd0af cargo fmt and remove uneeded HorizontalLayout import 2021-09-06 10:03:51 +02:00
Ryan Van Gilder
4d1d0e73a4 Rename image-scaling to image-rendering to align with CSS 2021-09-06 10:03:51 +02:00
Ryan Van Gilder
a03a27ae0d Add image-scaling property to Images to control how they are scaled
Like CSS image-rendering it has "smooth" and "pixelated" options.
Only OpenGL has been tested right now, have not tested WASM or Qt.
Right now the first instance of a @image-url() will set the scaling
for that specific image. The same image used from memory on the otherhand
can all have a different scaling property.
2021-09-06 10:03:51 +02:00
Olivier Goffart
b075b40f23 Update resvg version 2021-09-04 10:50:20 +02:00
ogoffart
e54e03148f Bump version number to 0.1.2 2021-09-04 10:08:51 +02:00
Simon Hausmann
5a81976f3b Allow selecting features in the CMake integration
Provide the same features as in the Rust API crate, as CMake
options.
2021-09-03 14:33:55 +02:00
Olivier Goffart
4f1eacd6d8 LineEdit is now able to scroll to keep the cursor visible 2021-09-02 17:20:44 +02:00
Simon Hausmann
baa55e8824 Internal cleanup: Remove canvas dependency from text layout code
We can use the non-canvas bound TextContext and need the canvas only
in the closure when painting.
2021-09-02 11:09:32 +02:00