Commit graph

441 commits

Author SHA1 Message Date
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
Olivier Goffart
5a21f1bd81 Rename emit_ to call_ for callback
Signal was renamed to Callback, but one does not emit a callback, one calls it
2021-01-25 15:59:10 +01:00
Simon Hausmann
a69ce3a397 Remove the 'align-' prefix from TextHorizontal/TextVerticalAlignment 2021-01-25 10:59:18 +01:00
Olivier Goffart
e37ac6e45f Add a documentaion on how to install Qt
And link from it from the warning
2021-01-24 14:06:14 +01:00
Simon Hausmann
4df0334ed2 Fix regular key press event handling with winit
With commit

    9ca87ab312

and

    c62b0e5316

the winit event loop sends our KeyPress for
winit::event::WindowEvent::KeyboardInput only when the virtual key code
matches our specially encoded keys. For regular keys we rely on
winit::event::WindowEvent::ReceivedCharacter, for which we sent only
KeyRelease (which TextInput listens for), but not KeyPressed. With
this patch we simulate press & release.
2021-01-23 10:11:57 +01:00
Olivier Goffart
86d40ad5e0 Some warning fix in the CI
- re-enable Qt for the C++ part now that the download server is back up
 - Use the proper way to set env variable on Windows
 - Silent deprecated warning for alloc::LayoutError
 - Silent warning in qt/lib.rs when Qt is not there
 - remove LD_LIBRARY_PATH workaround as the install-qt-action is fixed
2021-01-22 17:58:53 +01:00
Olivier Goffart
9eedb730d2 Fix build when Qt is not available 2021-01-22 17:11:21 +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
9e0927f324 Move the clipboard access from corelib to the backend
This way the backend doesn't need to depend on copypasta.
2021-01-22 15:25:06 +01:00
Simon Hausmann
a951e75fdc Move the backend pointer/cell to the corelib
This way we can add window-independent functions to Backend and use it
from items.
2021-01-22 15:24:26 +01:00
Simon Hausmann
8dee095480 Minor cleanup
Clarify precedence
2021-01-22 15:21:35 +01:00
Simon Hausmann
c62b0e5316 Fix copy & paste with the GL backend
We rely on ReceivedCharacter to send the event to the item for
combinations like Ctrl+C, instead of the single KeyEvent from winit. We
use the latter only for special key codes.
2021-01-22 15:18:38 +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
Olivier Goffart
916ad96ea5 Allow to disable Qt build with an env variable 2021-01-22 13:28:08 +01:00
Simon Hausmann
44687bd219 Fix wasm build 2021-01-22 10:25:26 +01:00
Simon Hausmann
22749d4240 Remove the winit dependency from corelib
The last dependency were the keyboard modifiers, which we can map
manually.
2021-01-22 10:15:05 +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
15b055f89f Workaround the visible \n 2021-01-21 10:22:43 +01:00
Olivier Goffart
4af4924567 C++: Fix cbindgen so it can process callback with arguments 2021-01-20 10:25:15 +01:00
Olivier Goffart
265efbbf4f Draw multi-line text with GL backend 2021-01-19 12:10:16 +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
c08ad1676f Fix custom scale factor in the GL backend
Don't use the winit window's scale factor, instead use the one from the
GraphicsWindow, as tests may want to override it.
2021-01-19 09:57:00 +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
2b7a1eebcd Prepare winit event loop for show()/hide() on PlatformWindow
Reduce the dependency of the GLRenderer to a new trait that exposes the
EventLoopTarget and EventLoopProxy. Those are provided by either an
winit::event_loop::EventLoop or, once the loop is started using the
self-consuming run(), by the event loop target provided to the run_fn.

This way renderers can be created from either within run or before.
The initial event loop instance is kept in TLS. When starting the loop,
it's taken out and instead the event loop target is placed into a scoped
tls variable.
2021-01-18 20:26:09 +01:00
Simon Hausmann
88839ea6a6 Fix panic during rendering with GL backend
During rendering the GLRenderer's Option<WindowedContext<NotCurrent>>
is None. That however leads to any font_metrics() calls such as due to
implicit sizing to panic, because the call requires access to the
window's scale factor.

This is fixed by keeping a shared reference to the PossiblyCurrent
WindowedContext also in the GLRenderer.
2021-01-18 20:26:09 +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
Simon Hausmann
2bd1f75aeb Minor cleanup
We don't need to borrow_mut() to call a function that takes &self.
2021-01-16 12:41:30 +01:00
Simon Hausmann
2b8a24dc3e Minor cleanup
For loading cached images the resource getter is called only once,
so we can require an FnOnce and avoid cloning the resource.
2021-01-16 12:40:34 +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
f397e08abc Also update neon 2021-01-15 16:04:14 +01:00
Olivier Goffart
d65a655333 Fix Wasm build error and warnings 2021-01-15 15:23:17 +01:00