1
0
Fork 0
Commit graph

8407 commits

Author SHA1 Message Date
Jonas Ådahl
cd2bf776b1 clutter: Add color manager type
This type is intended to carry color related state that is "global",
without having to add more and more things to ClutterContext.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3897>
2024-07-24 21:33:30 +00:00
Daniel van Vugt
55209cfb13 clutter/deform-effect: Hide G_STATIC_ASSERT from the g-ir-scanner
According to gmacros.h, G_STATIC_ASSERT is undefined for __GI_SCANNER__
because it causes confusion. Which is understandable, and so is the
complaint about the lingering G_STATIC_ASSERT after preprocessing.

This problem seems to be unique to just clutter-deform-effect.h because
it's the only header file containing a top-level G_STATIC_ASSERT. The
rest are all in C files.

Fixes: 138e5d4f54
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3591
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3898>
2024-07-23 14:08:52 +08:00
Bilal Elmoussaoui
138e5d4f54 cogl: Move TextureVertex to Clutter
The type is only used in ClutterDeformEffect, so move it there

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3895>
2024-07-22 17:36:10 +02:00
Bilal Elmoussaoui
f5c376e860 cogl: Move PrimitiveTexture functions to Texture
Since the move to GObject for CoglTexture, CoglPrimitiveTexture was
removed. So drop remaining of that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3885>
2024-07-15 21:42:38 +02:00
Sebastian Keller
2ae3012fd5 clutter/paint-nodes: Don't leak CoglColor on paint node creation
The pointer returned by cogl_color_copy() was not stored anywhere and
the allocation it was pointing to got leaked. However we also don't need
to use that function here and can just copy the struct values directly.

Fixes: dc52ccc75 ("cleanup: Port from ClutterColor to CoglColor")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3884>
2024-07-15 18:50:02 +02:00
Bilal Elmoussaoui
54748b7f1f cogl: Call init when creating a context from Clutter
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3857>
2024-07-15 14:39:23 +00:00
Bilal Elmoussaoui
24f46448ce cogl/pango: Take a context as a param when constructing a font map
Avoids using the get_context macro

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3857>
2024-07-15 14:39:23 +00:00
Jonas Ådahl
2a6e8f7188 clutter/stage-view: Add API to get output color state
Will be used for direct transforms from source to output color state.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
20c7653d49 compositor-view/native: Don't scan out surface with color state mismatch
If the color state of a surface doesn't match the output, don't try to
scan it out, as it needs to pass through color state transformations to
look correct.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
6b07141f1a clutter/paint-nodes: Make paint nodes handle color transformations
Either handle them directly, or when using the pipeline paint node, add
them on-demand if the color transformation capability isn't already set
by something else.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
9b34aac441 clutter/text: Handle color state transformations
This uses the color state tracking in the paint context to add color
state transformations to the ClutterText actor.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
2d48ca8aa1 clutter/paint-nodes: Copy instead of ref passed pipelines
A ClutterPipelineNode took a reference to the passed pipeline and used
it during the lifetime of the paint node. In theory this meant that a
paint node pipeline could be changed, and reused, affecting the previous
paint node drawing.

Referencing instead of copying also meant the ClutterPipelineNode isn't
able to itself manipulate the pipeline any further.

Fix both of these issues by copying, instead of adding a reference to,
the passed pipeline. While resulting in some additional allocation
over head, it means we can now eventually handle color transformations
automatically for ClutterPipelineNode's.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
a1163385db paint-nodes: Sanity check color transform in blit nodes
Blitting cannot run with a shader, thus cannot do color state
transformations, so log a warning when that happens.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
9a0fbbfa81 cogl/pango: Add argument to supply extra snippet
This will be applied to the pipeline used for drawing, and can be used
to include color state transformation snippets.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
aaba08e5aa Set names of various Cogl pipelines
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
0c653b4cf2 clutter/actor: Pass paint context in paint_node()
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
15df584b7e clutter: Add color state pipeline capability enum
So far 'color-state' is added, intended to tag pipelines with color
state transformation capabilities. Color state transformation snippets
are tagged with it. Eventually handlers of pipelines will use this
information to on-demand decorate pipelines with color transformation
snippets.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:07 +02:00
Jonas Ådahl
4238512764 clutter: Introduce color transform aware pipeline cache
Color aware rendering needs shaders / pipelines that adapt to what
output they render to. For example if we want to render to a linear
BT.2020 intermediate framebuffer on one monitor, and a non-linear sRGB
direct target buffer on another, the shader for the same paint node or
content will depend on where they are going to be presented.

In order to help keeping track of what shader should target what
monitor, without having to regenerate them each time, introduce a
pipeline cache that knows how to handle differentiating between
transforming between different color state.

The cache is meant to handle caches for multiple pipeline users, where
each user might potentially want to keep track of multiple pipelines
itself. Lookup should be O(1), and in order to achieve this, separate
the cache into 3 levels.

The first level is the "pipeline group", where e.g. a ClutterContent
type allocates a group where it can store its pipelines. Each group has
a fixed number of "slots" where it can store a pipeline. Each slot has a
hash table where the key is derived from a color state transform, and
where the value is a CoglPipeline where the thame color state
transformation is expected to be handled.

A content will when painting know about its own color state, and the
target state it should render into, retrieve a cached pipeline for the
correct transform, or if the cache didn't have it, generate it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:56:06 +02:00
Jonas Ådahl
0c2fa8e9a8 clutter/stage-view: Add linear intermediate color space buffer
Allow compositing in a linear color space and do so either when forcing
it via the debug controls D-Bus API, or when the experimental HDR mode
is enabled.

This relies on paint nodes etc to actually transform everything into the
linear target color space, which isn't done yet, so enabling it right
now will cause a broken result. Yet, introduce this now, so that
painting can be fixed piece by piece.

Linear blending is automatically enabled on monitors where HDR is
enabled, as this makes it possible to use an linear color space when
blending content from different color spaces with different transfer
functions.

Linear blending requires extra precision, i.e. 16 bit per channel
in the intermediate buffer due how the values are distributed,
so only enable the experimental HDR mode if the Cogl context supports
half float formats.

By default, no intermadiate linear offscreen framebuffer is used.

To test, do e.g.

  ./tools/debug-control.py --toggle ForceLinearBlending

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:55:54 +02:00
Jonas Ådahl
b275af95b7 clutter/paint-context: Add content and target color state tracking
The initial target color state is the color state of the stage view
being painted to. If we're painting to an arbitrary framebuffer, it's
currently hard coded to sRGB/electrical.

The content color state is not set on construction, but when starting to
paint, it's set to the color state of the stage itself. Whenever an
actor is painted, it'll set the color state to the color state of
itself. The intention is that offscreen rendering pushes a target color
state that causes painting to it to not necessarily be in the stage view
color state.

Pass color state with offscreen framebuffer, as this avoids hard coding
sRGB in the lower level bits of paint contexts. It's still practically
hard coded, only that it's derived from somewhere else (e.g. the stage
or window actor).

Nothing is actually using this yet, but will eventually.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:51:30 +02:00
Jonas Ådahl
1a52108c17 clutter/stage-view: Add API to get view color state
This aims to provide the color state used for compositing for a specific
view. It's currently hard coded to default, but will eventually be
configured depending on the monitor and configuration. It's intended to
be used as a target color state for rendering with color awareness.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:51:17 +02:00
Jonas Ådahl
2bd8216eb1 clutter/color-state: Cache snippets
The cogl shader cache uses snippet pointers as cache keys, meaning even
if we generate two identical snippets; if they have different pointer
addresses, they'll generate separate cache entries. Handle this by
caching our snippets on the context.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
d7bbc9712f clutter/color-state: Pass the ClutterContext when constructing
This will be used to cache pipeline snippets shared by multiple color
states.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
4a07242fed clutter/color-state: Add color state transform helper
This helper generates shader snippets that converts pixels from one
color state to another. For example if there is content with sRGB color
state that should be converted to linear BT.2020 before being written to
the framebuffer, a shader that makes the pixel go through the following
steps will be generated:

 1. sRGB EOTF
 2. Luminance gain (hard coded for now)
 3. Color space mapping

The intention is that it should be possible to composite in a linear
color space, into an intermediate framebuffer, which is then passed
through an inverse EOTF to produce linear content in the output color
state.

When transforming from BT.2020/PQ to sRGB/sRGB, clamping to the sRGB
max luminance is done.

Cases where direct transform is also handled, i.e. where one doesn't go
via an linear intermediate buffer, in which case there might be both an
EOTF and an inverted EOTF in the same shader snippet to still do color
space mapping using optical color encoding. This will be used for e.g.
transforming cursor sprites.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
8b425f4e85 clutter/actor: Make unsetting color state an explicit function
It makes things easier and more straight forward to handle.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
af71749e75 clutter/color-state: Add transfer function
Another enum, defining SRGB gamma transfer function, and the PQ transfer
function. As with color spaces, add a 'default' that for now is treated
as if it was sRGB.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
b74515b8cf clutter/actor: Default to 'default' color space
Do this so one can distinguish between "unspecified" and explicitly
sRGB.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
9adbaa05b3 clutter/enums: Removing trailing whitespace
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
563fff9c9c colorspace: Rename 'unknown' to 'default'
An unknown color space isn't very useful to have, as there is not very
actionable what to do with it. Rename it to 'default'. Later it'll be
used to an implicit color space, which in practice will be treated as
sRGB.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
2ae5af62ea clutter/stage-view: Make shadow fbs use the onscreen pixel format
We'd use the "default" format otherwise; once the onscreen gets
something other than the hard coded format, we'll want to make sure we
use the same here.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
42d4287f20 clutter/actor: Make actors have a context
The context can be set via a property (currently unused) or via the
current global singleton as a fallback. It means API that acts on an
actor can avoid going via any globals.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Jonas Ådahl
2e02078638 clutter/actor: Fix indentation of color state getter/setter
They were different from all the other ones around it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
2024-07-09 18:00:58 +02:00
Bilal Elmoussaoui
a172c0f0dd clutter: Remove uneeded dependencies
Clutter doesn't interact with x11/wayland/libwacom directly

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3853>
2024-06-30 15:09:00 +02:00
Carlos Garnacho
01444e803f clutter: Specify that input-only grabs are started inactive in API
Add the _inactive suffix, so that the state of these objects is clear.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3747>
2024-06-28 22:49:45 +00:00
Carlos Garnacho
8e5f3a1f83 clutter: Add API to create inactive ClutterGrabs, and activate them explicitly
This gives greater control to the callers on the place where a grab is being
activated, this may make a difference in the handling of crossing events
triggered through it, e.g. by having callers rely on having already obtained
a ClutterGrab prior to handling the resulting effects.

The "input only" grab has also been turned inactive by default, in order to
to have the ClutterGrab pointer available for checks at the MetaWaylandEventHandler
focus changing methods triggered through grab activation.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3463
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3747>
2024-06-28 22:49:45 +00:00
Shiki Okasaka
4b1411696e clutter: Use character offsets for specifying the surrounding text
clutter_input_focus_set_surrounding() expects cursor and anchor positions
to be provided in character offsets.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3440
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3719>
2024-06-28 19:25:48 +00:00
Jonas Ådahl
422ee4515d Compile with -Wfloat-conversion
This means we'll get warnings whenever a floating point value looses
precision, e.g. gets implicitly casted to an integer. It also warns when
implicitly casting double's to float's, which arguably is less of a
problem, but there are no warning for just float/double to int.

This would have caught
https://gitlab.gnome.org/GNOME/mutter/-/issues/3530.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3822>
2024-06-25 20:48:24 +02:00
Jonas Ådahl
d5bc883712 clutter/paint-nodes: Remove radius field from blur node
It wasn't used.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3822>
2024-06-25 20:45:27 +02:00
Bilal Elmoussaoui
cb4b31f858 clutter: Don't generate unused keys_by_name table
Spotted by codeql

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3837>
2024-06-22 23:53:49 +00:00
Bilal Elmoussaoui
43dabfc8d1 clutter: Remove unused static function
Detected through codeql

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3837>
2024-06-22 23:53:49 +00:00
Georges Basile Stavracas Neto
5cfbe2528c clutter/cally-actor: Ensure accessible lives long enough
Inside the "if (clutter_actor_has_accessible (actor))" condition,
the 'atk_child' variable is set and a signal is emitted on it.
There is a classic ref/unref dance around the signal to guarantee
that 'atk_child' won't be destroyed.

However, this ref/unref dance doesn't work, because the unref is
done *before* the 'atk_child' variable is used again. So if this
was the last reference to it, it would have been destroyed in the
unref call, then used for another signal emission a few lines down.

That's a use-after-free.

Fix that by declaring the 'atk_child' variable with g_autoptr. This
delays the unref until the very end of the function, and is NULL safe.
Also add a sneaky assertion, just for extra safety.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3828>
2024-06-21 14:40:47 +00:00
Bilal Elmoussaoui
23a4261736 cally: Remove Actor.[add|remove]_actor vfuncs
They were not doing anything special other than forwarding the calls.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3814>
2024-06-18 15:59:09 +02:00
Bilal Elmoussaoui
03032805a6 cally: Move AtkAction from Actor to Text
Currently AtkActor iface is implemented by CallyActor as well
as a ton of infrastructure just for one action in ClutterText, the
activate action.

Instead, simplify the whole thing and move the AtkAction implementation
where it supposed to be.

This refactoring would help with merging Cally within Clutter in
the future

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3814>
2024-06-18 15:50:34 +02:00
Bilal Elmoussaoui
730783b670 clutter: Remove Color type
As it is no longer used now

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544>
2024-06-13 15:25:40 +02:00
Bilal Elmoussaoui
531072d482 clutter: Implement interval progress for CoglColor
For that, rename clutter-graphene and use that C file to define all the
progress functions

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544>
2024-06-13 15:25:40 +02:00
Bilal Elmoussaoui
dc52ccc75a cleanup: Port from ClutterColor to CoglColor
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544>
2024-06-13 14:45:53 +02:00
Bilal Elmoussaoui
408cb6ee57 clutter: Drop Color.to_pixel
Keep the function around as Color.hash

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3802>
2024-06-12 16:25:18 +00:00
Bilal Elmoussaoui
74ece2ad92 clutter: Drop various Color constructors
The fields are writable, there is no need to provide a custom constructor.
This shapes the Color API to be similar to GdkRGBA

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3802>
2024-06-12 16:25:18 +00:00
Bilal Elmoussaoui
04842393aa clutter: Drop Color.from_pixel
Goes along with https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3367
Helps https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3802>
2024-06-12 16:25:18 +00:00
Jonas Ådahl
f19f8fcb16 clutter/frame-clock: Only update immediately after idle if vsynced
If the presentation time isn't known, e.g. if the monitor is virtual and
the actual presentation happens far away, the presentation time we
actually received tends to be the time a frame was presented to the next
layer, meaning practically immediately after painting.

When scheduling another update after that, don't assume that if the next
calculated update is not the immediate next update, schedule an update
sooner, as that will in such cases always be true, meaning we ended up
busy looping with constant frame updates being scheduled.

Fix this by only triggering that logic if the last presentation time was
actually vsync:ed.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3803>
2024-06-12 15:11:04 +00:00
Bilal Elmoussaoui
27ecc9d1cd clutter/color: Stop falling back to PangoColor for X11 colors
As we don't really make use of that feature anyways. The
ClutterColor.from_string API is used by gnome-shell to retrieve the
following settings: cross-hairs-color, primary-color, secondary-color
which are always set in their hex representationby gnome-control-center.

Helps https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3796>
2024-06-12 14:32:14 +00:00
Marco Trevisan (Treviño)
44c0c311ba clutter/clone: Do not use global transformation for scaling clones
When cloning an actor we were applying a global scale to it, based on
the size of the clone itself and of the cloned actor.

This implied that the transformed size of the clone was not the one that
was set, but it was taking taking in account the actor scaling too.
So in practice we were scaling it twice.

While this had no visual implications it indeed was causing troubles
when a ClutterClone was reactive because in such case only the scaled
area of the scaled clone was considered reactive.

Assume you had an actor of 100x100 pixels, scaling it to a clone of
50x50 pixels:
 - The scale applied to the clone was 0.5
 - The transformed size of the clone was: 25x25 pixels
 - The clone was reactive only in that sub-area

To avoid this, never touch the clone transformation matrix, but only
transform it at paint time.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2959>
2024-06-01 11:11:32 +02:00
Bilal Elmoussaoui
6fbf5f0888 clutter: Drop unused const
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3762>
2024-05-21 09:38:35 +00:00
Georges Basile Stavracas Neto
638d3355b4 cogl: Drop CoglSwapChain
CoglSwapChain is currently unused, and doesn't hold any information
nor is used for anything in particular.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3759>
2024-05-20 11:45:31 +00:00
Corentin Noël
0ab5ff6eed clutter/transition: Do not call methods of a NULL ClutterAnimatable
Only call clutter_animatable_get_actor on a non-null object, otherwise set
the timeline actor to NULL directly.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3750>
2024-05-16 08:00:23 +00:00
Carlos Garnacho
c087d9b746 clutter: Make low-level picking function private to ClutterStage
It's now only called within it, inside other higher-level accessors
to update picking based on actor/view/event changes. This can now be
made a private call.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3696>
2024-04-17 14:28:14 +00:00
Carlos Garnacho
4ab868154f clutter: Update all devices in a view in ClutterStage code
Avoid open-coding the process of figuring out the affected devices
on view changes and repick on those, in exchange for a ClutterStage
method to do this altogether.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3696>
2024-04-17 14:28:14 +00:00
Carlos Garnacho
5220bc61b4 clutter: Add ClutterStage function to repick from event
Instead of doing that in clutter-main.c code, move it together
with the rest of picking calls to ClutterStage.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3696>
2024-04-17 14:28:14 +00:00
Carlos Garnacho
22d0ff569a clutter: Drop clutter-wide clutter_stage_repick_device()
This is only called from a single place inside ClutterStage code,
drop this public internal function, and repick in place.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3696>
2024-04-17 14:28:14 +00:00
Jonas Dreßler
64a1da9363 clutter/input-method: Check for equality before notifying properties
ClutterInputMethods content hint or purpose will be set again (even to the
same values) whenever a wayland client sends us a new content type/purpose.
Gtk appears to always set a content purpose on wl_text_input changes, so we
currently set and notify the "content-purpose" property on every change in a
gtk text field.

Since the OSK is gnome-shell listens to this property and re-generates its
entire layout when the content-purpose prop gets notified, this is currently
causing lag/freezes on every keypress in the OSK in gnome-shell.

So ensure to not notify these properties in case they're equal and set the
properties in the same way as we usually set them instead of going via
GObject.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3645>
2024-03-16 12:32:49 +01:00
Jonas Dreßler
6612c4fe41 clutter/gesture: Allow only a single gesture to recognize globally
Gestures are independent from each other when they are on different
actors and when they don't have a conflict over input with each other: For
example a gesture on one window and a gesture on another window will
recognize at the same time perfectly fine right now.

For those gestures (let's call them "independent gestures") we don't want
to control how the conflicting input should be handled, i.e. whether one
gesture wins over another or whether both can be recognizing using the
same touchpoint (e.g. zoom+rotate on the same actor). Instead we want
to control whether they are allowed to start while another one is running.

For now, make it impossible for two gestures to recognize globally at
the same time in all cases. This helps prevent subtle bugs and makes life
easier for users of the API. We can introduce API for fine grained control
over the behavior later.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-15 00:08:02 +01:00
Jonas Dreßler
6f84fb0a24 clutter/stage: Store a list of all active gestures on the whole stage
With the next commit, we'll need a list of all gestures that currently are
active globally. Since actors and actions (and therefore also gestures) in
Clutter are bound to a stage, it makes sense for this list to exist on the
ClutterStage level.

The list itself is a simple GPtrArray (to allow for quick searches) that
doesn't reference the gestures and is not manipulated by the stage itself.
All manipulation of the array is left to ClutterGestures.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-15 00:08:02 +01:00
Jonas Dreßler
63cc4da4f9 clutter/gesture: Cancel other gestures when moving to RECOGNIZING
Quite often there are situations where multiple gestures try to
recognize, keeping track of the same set of points (for example an edge
drag gesture on the stage and a click gesture somewhere in the
scenegraph). Usually what's wanted here is that the first gesture to
move to RECOGNIZING wins over all other active gestures and "claims" the
point for itself.

We implement this by introducing a concept called "influencing". It
works by making all gestures operating on a shared set of points aware
of each other using ClutterAction->register_sequence().
ClutterGesture uses this vfunc to keep track of all other
ClutterGestures that are potentially conflicting, and keeps a list
(priv->cancel_on_recognizing) of those. As soon as the move to
RECOGNIZING happens, all gestures inside this list get moved to
CANCELLED.

To allow fine-grained control over this behavior, two APIs are
introduced:

1) on the implementation level (should_influence() and
should_be_influenced_by()): This is a vfunc that gets called as soon as
a potential conflict is detected. It's helpful when a specific gesture
always behaves the same towards another gesture, for example to make
sure a LongPress gesture never cancels a DragGesture.

2) on the gesture user level, clutter_gesture_can_not_cancel() is
introduced: This allows control for the user of a gesture to specify
that a specific instance of a gesture won't cancel another gesture.
Calling this twice so that both gestures can't cancel each other allows
for things like simultaneous recognition of a pinch-to-zoom and rotate
gesture.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-15 00:07:59 +01:00
Jonas Dreßler
7dd37558b1 clutter/gesture: Add a new ClutterAction for touch and mouse gestures
Introduce ClutterGesture, a new ClutterAction subclass and the successor
of ClutterGestureAction that brings the necessary tools to handle
sequences of events and abstract touch and mouse gestures from those.

The big difference compared to ClutterGestureAction is that ClutterGesture
provides the implementation with point_added/moved/ended and
sequences_cancelled events and expects the implementation to move the
ClutterGesture through the ClutterGestureState state machine. This state
machine is then used internally by ClutterGesture to coordinate with other
gestures.

With the next commits, ClutterGesture will handle relationships between
conflicting gestures completely by itself, allowing the implementation or
the user to specify the details of the relationship between two gestures.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-15 00:05:50 +01:00
Jonas Dreßler
2803c381ec clutter/event: Remove DEPRECATED flag from clutter_event_get_source()
clutter_event_get_source() is still valid for the case of crossing events,
just like clutter_event_get_related(). The latter is not deprecated, so the
former shouldn't be either.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-14 23:09:21 +01:00
Jonas Dreßler
7342863b9f Revert "clutter: Drop Event.get_source"
We'll need this API again when adding ClutterGesture.

This reverts commit 6032be04a0.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-14 23:09:21 +01:00
Jonas Dreßler
753156c7f2 clutter: Add GESTURES debug flag
This will be used with the next commit, where we introduce a new gesture
tracker for Clutter.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-14 23:09:21 +01:00
Jonas Dreßler
05cb4a4443 clutter/action: Take a ref on actions during event handling
ClutterStage will unref an action in the middle of its own event handler in
case the action causes its own actor to be destroyed. In this case the
action would get freed underneath our feet. To avoid it, take a ref on the
action while calling its handle_event() vfunc, just as we do in
clutter_actor_event() while emitting an event to an actor.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2389>
2024-03-14 23:09:21 +01:00
Robert Mader
aaae07f9dd onscreen/native: Mark GPU rendering duration as valid if supported
Since commit e30eb78891 `ClutterFrameClock` assumes that a valid CPU time
implies timestamp query support, which is also checked in
`cogl_onscreen_egl_swap_buffers_with_damage()`.

Unconditionally setting the CPU time on direct scanout meant that the
compositing path would be stuck on the last (direct scanout optimized)
result on GL implementations without timestamp query support since.

be0aa2976e (clutter/frame-clock: Avoid rapidly toggling dynamic max render time)

Fix that by explicitly marking the gpu rendering duration as valid when
querying the GPU timestamps is supported and check for it ClutterFrameClock.

Fixes: 56580ea7c9 ("backends/native: Assume zero rendering time for direct scanout buffers")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3655>
2024-03-13 16:37:16 +01:00
Zander Brown
6a445d2eef build: Make exported package in gir consistent
Additionally Cogl was missing xlib as an include

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1918>
2024-03-13 12:52:41 +00:00
Peter Hutterer
46ca7fbe00 clutter: Indentation and whitespace fix
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3647>
2024-03-07 14:34:36 +10:00
Christian Hergert
0810238d22 clutter/frame-clock: Use timerfd for clock timing
Currently, ClutterFrameClock uses g_source_set_ready_time() to determine
the usec timing of the next frame. That translates into a poll() with a
millisecond timeout if no trigger occurs to break the poll() out early.

To avoid spinning the CPU, GLib always rounds *up* to the next millisecond
value unless a timeout of 0 was provided by a GSource.

This means that timeouts for the ClutterFrameClock can easily skew beyond
their expected time as the precision is too coarse.

This applies the same concept as GNOME/glib!3949 but just for the
ClutterFrameClock. That may be more ideal than adding a timerfd for every
GMainContext, but we'll see if that lands upstream. I wanted to provide
this here because it could easily be cherry-picked in the mean time if
this is found to be useful.

From a timer stability perspective, this improves things from erratically
jumping between 100s and 1000s off of the expected awake time to single
or low double digits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3636>
2024-03-06 23:10:13 +00:00
Carlos Garnacho
7aebc9e63d clutter: Pass scroll source to discrete events
This piece of information was lost, always returning
"unknown". We can do better on the native backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3642>
2024-03-05 21:47:43 +00:00
Carlos Garnacho
3c217d2902 cally: Use text length if caret is at the end of ClutterText
ClutterText uses -1 to express the caret being at the end of the
text content. A11y expects this position to be equivalent to the
number of characters in the text, fetch that if the position is
at the end.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7459
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3643>
2024-03-05 17:53:30 +00:00
Dor Askayo
d5f68c8140 clutter/frame-clock: Add a mode for variable scheduling
A new variable scheduling mode is introduced which allows lower
priority updates to be scheduled on a timeout which represents a lower
refresh rate, while allowing high priority updates to be scheduled to
occur as soon as possible.

This mode will be used by following commits to implement
synchronization of page flips to the update rate of specifc surface
actors.

High priorty updates are either scheduled to occur "now" if they
arrive at a rate which is lower than the maximum refresh rate, or
according to the measured maximum render time if they arrive at a
rate which meets or exceeds the maximum refresh rate. This approach
allows achieving low input latency in both scenarios.

Seperate handling for low priority updates is needed to avoid visible
stutter in the content of the surface that drives the refresh rate. An
example for a low priority update is cursor movement when the KMS
deadline timer is disabled.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1154>
2024-03-02 12:08:21 +00:00
Carlos Garnacho
6cee9410f5 clutter: Bypass priv->has_key_focus when unsetting focus from self
This is conditionally toggled by grabs on the current key focus depending
on whether the current key focus actor would receive events according
to the grab or not. Which means it's no longer a reliable method for an
actor to know it does have focus, without asking the stage about it.

Avoid this check and ask the stage for the key focus, in order to make
key focus actors able to unset themselves despite the presence of grabs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3629>
2024-03-02 09:27:39 +00:00
Julian Sparber
a26fca0117 clutter/text: Use the PangoLayout y offset for min height calculation
The min height reported by ClutterText when ellipsize and line-wrapping are
enabled was too small to fit the text.

The coordinates from `pango_layout_get_line_extents()` are baseline relative,
so the `y` coordinate means that the highest ascent would be `-y` above the
baseline and height gives the span between the ascent above the baseline and
the descent below it, so `logical_line_rect.y + logical_line_rect.height`
gives us the size of the descent. This is the wrong height to use for the
height of the actor.
The coordinates of the layout extents don't seems to be related to the baseline
and are just for offsets when rendering, that's probably how this bug got
initially introduced.
Therefore, the `y` coordinate from the layout is the correct offset to use,
even though, when looking at `pango_layout_get_extends_internal()`, it appears
that `y` is always set to 0.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3610>
2024-02-28 14:35:51 +01:00
Florian Müllner
100dc6d2b1 cally/text: Fix emission of text_caret_moved signal
CallyText was still listening to changes to the deprecated
`ClutterText:position` property to emit the signal, but the
property was removed in commit 3184986897.

Switch to the proper `cursor-position` property to fix the
issue.

Close: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7442
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3621>
2024-02-27 16:07:43 +01:00
Marco Trevisan (Treviño)
52901320f0 clutter: Add missing dependency on Gio-2.0 gir
Without this we'd get:
  ../../mutter/clutter/clutter/clutter-actor.c:18241: Warning:
    Clutter: clutter_actor_bind_model_with_properties: argument model:
      Unresolved type: 'GListModel*'

And missing bindings

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3620>
2024-02-27 10:30:19 +01:00
Bilal Elmoussaoui
60e10511ae cogl: Remove Color.init_from_4ub
Slowly switching to using floats only in CoglColor
Helps https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3594>
2024-02-22 12:34:58 +00:00
Bilal Elmoussaoui
cf0803ab71 cogl: Remove Color.get_*_byte
Helps with https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3594>
2024-02-22 12:34:58 +00:00
Corentin Noël
e7de5c36f3 build: Remove the config.h inclusion from all public headers
Do not include it at header side as it is not part of the installed headers.

Only keep it in cogl-gl-headers.h as it is a private header.

Add it to all the source files that depend on it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3593>
2024-02-17 11:58:55 +00:00
Bilal Elmoussaoui
2c613df4eb cogl: Drop Pipeline.set_color_*
Those setters variants makes it very hard to do across project changes
to the
color type. As part of
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544
I would like to switch from using integers to floats inside CoglColor
which this PR would simplify

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3553>
2024-02-16 12:13:23 +01:00
Bilal Elmoussaoui
b00fcbf948 clutter: Remove unused Color APIs
Nothing uses them in GNOME Shell, so let us simplify the API
a little bit

Helps https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3588>
2024-02-16 10:24:24 +00:00
Bilal Elmoussaoui
72c2d8913e clutter: Drop static colors
There is literally zero reasons nowadays to still provide the tango color
palette as part of the Clutter API. End users of Mutter can define the
colors on their side if they want to.

The change simplifies https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3544

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3588>
2024-02-16 10:24:24 +00:00
Carlos Garnacho
9c5bd9f847 clutter: Add "revoked" property to ClutterGrab
Users of Clutter grabs may listen for notify::revoked changes in
order to know that their grab is no longer in charge of event
propagation, without the use of crossing events.

Since a ClutterGrab may stay in the stack and regain effects,
this notification also happens the other way around.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3420>
2024-02-13 12:36:26 +01:00
Carlos Garnacho
b154fddd0f clutter: Make ClutterGrab a GObject
We'll want to add notifications on it, make it a GObject
to allow that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3420>
2024-02-13 12:36:26 +01:00
Carlos Garnacho
09101e36f8 wayland: Handle pointer focus inhibition at the Clutter level
The MetaWaylandPointer used to put this together through
MetaCursorTracker cursor visibility, and ClutterSeat-level
inhibition API, applying the pointer focus changes due to
visibility logically to Wayland clients.

In order to make this work over all Clutter widgetry
instead of just Wayland clients, make the ClutterSeat-level
inhibition API control this feature at the ClutterStage picking
level, and leave/enter the seat pointer as appropriate.

By default, the seat pointer has (un)focus inhibited. The
MetaCursorTracker has been made another player in unfocus
inhibition, simply asking for the pointer to get its focus
while the cursor is visible.

This in practice means that picking code may return a NULL
actor, some asserts and preconditions had to be changed to
handle this, plus some test code slightly.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3420>
2024-02-13 01:01:48 +01:00
Dor Askayo
82cdf90a71 clutter/frame-clock: Add a state for when scheduled "now"
The new CLUTTER_FRAME_CLOCK_STATE_SCHEDULED_NOW state is almost
identical to CLUTTER_FRAME_CLOCK_STATE_SCHEDULED, with one important
difference being that it avoids updates from being repeatedly
rescheduled "now" when multiple calls to
clutter_frame_clock_schedule_update_now() are done before the source
is actually dispatched.

Such repeated calls to schedule an update "now" may actually postpone
the dispatch if the CPU is very busy and the source dispatch is
delayed, defeating the purpose of scheduling a frame "now".

It also allows rescheduling "now" when the frame clock is uninhibited
after being inhibited while an update was scheduled "now". This may
be important in cases where the frame clock is inhibited for very
short periods in which it would otherwise lose the state of being
scheduled "now".

Scenarios such as this would become more common with the introduction
of variable refresh rate since it makes scheduling "now" a commonplace
occurrence.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3561>
2024-02-10 16:16:19 +00:00
Bilal Elmoussaoui
cc1957a4ba clutter/flow-layout: Use Orientation enum
Instead of having a custom FlowOrientation one

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3573>
2024-02-09 18:03:09 +01:00
Bilal Elmoussaoui
40ba60b52b clutter/main: Move struct where it is used
The struct & functions are no longer used elsewhere, so move them from
the header file

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3573>
2024-02-09 18:03:05 +01:00
Bilal Elmoussaoui
4fab773e12 clutter: Don't display actor names on paint volumes
Currently, the paint-volumes/redraws debug flags displays the actor
debug
names on top of the paint volume making it very unusable. Especially
that you can easily get the relevant actor from looking glass.

The motivation is to reduce the usage of pango (through the text node)
in order to possibly move all the fonts bits to gnome shell

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3571>
2024-02-09 10:37:52 +00:00
Dor Askayo
aedb0f200d clutter/frame-clock: Set the last "next presentation time" on feedback
This removes an incorrect implicit assumption in
calculate_next_update_time_us() that a frame may only be scheduled
once in the duration of a refresh cycle. It accomplishes this by
setting last_next_presentation_time_us on presentation feedback
instead of calculating it every time an update is scheduled.

Specifically, it corrects the intended scheduling logic in scenarios
like the following, when all of the below occur in the context of a
single refresh cycle:
  1. Frame update (1) is scheduled normally, and
     "is_next_presentation_time_valid" is set to TRUE
  2. Frame update (1) is dispatched but ends up being "empty" (no
     presentation necessary)
  3. Frame update (2) is scheduled "now" and
     "is_next_presentation_time_valid" is set to FALSE
  4. Frame update (2) is dispatched but ends up being "empty" (no
     presentation necessary)
  5. Frame update (3) is scheduled normally, and since
     "is_next_presentation_time_valid" is set to FALSE, the
     "early presented event" logic is unintentionally skipped in
     calculate_next_update_time_us().
  6. Frame update (3) is dispatched and ends up being a "non-empty"
     update, but its update time was calculated incorrectly because
     some logic was skipped.

Scenarios such as this would become more common with the introduction
of variable refresh rate since it makes scheduling "now" a commonplace
occurrence.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3560>
2024-02-08 22:57:55 +00:00
Bilal Elmoussaoui
467120d5aa cleanup: Remove unused callbacks
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3570>
2024-02-08 13:32:51 +00:00
Bilal Elmoussaoui
73651b553e clutter: Explicitly depend on cairo
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
bbd06f26e0 clutter: Drop cairo-gobject dependency
It is no longer used since the switch to MtkRegion
and the removal of ClutterCanvas

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Jonas Dreßler
265f6ef64e clutter/actor: Use g_signal_connect for connecting to pango context
In commit ba8f5a1178 it might have been overseen
to switch to g_signal_connect from g_signal_connect_object, so do that now to
make things a bit more clear.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3543>
2024-01-27 09:42:05 +00:00
Dor Askayo
c9cd9cef6a clutter/frame: Export clutter_frame_get_result()
This makes the function available to Wayland.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3549>
2024-01-26 19:03:02 +00:00
Dor Askayo
3e4a330ae7 clutter/frame-clock,wayland: Calculate frame deadline during scheduling
Calculate the frame deadline in ClutterFrameClock's
calculate_next_update_time_us() rather than in MetaWaylandCompositor's
on_after_update().

The specifics of the deadline calculation for a given frame should be
implementation detail of the frame clock and and remain internal to
allow extensibility.

This extensibility is specifically useful for scenarios where a
different deadline calculation is needed due to alternative frame
scheduling logic, such as for VRR.

No change in behavior.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3521>
2024-01-22 15:39:48 +00:00
Bilal Elmoussaoui
a2397e6b80 clutter: Prefer using ClutterTextDirection
In various public APIs, Clutter used to return a PangoDirection
while we have a text direction enum defined in Clutter.

This allows us to drop pango dependency from meta making it specific
to cogl-pango & clutter

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3531>
2024-01-22 15:02:33 +00:00
Shmuel Melamud
237e505cc7 clutter: Move ClutterCanvas to gnome-shell
Since StDrawingArea in gnome-shell is the only user of ClutterCanvas,
it is possible to move ClutterCanvas completely out of Mutter to
gnome-shell. This allows to remove another Cairo dependency from
Mutter.

This patch removes ClutterCanvas code from Mutter.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3470>
2024-01-17 11:58:47 +01:00
Sebastian Wick
41a7e8e3e0 build: Make g-ir-scanner warnings fatal when -werror is set
This should help catching problems with introspection in CI.

This also pulls out some common arguments to the gnome.generate_gir
call.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3528>
2024-01-17 09:26:00 +00:00
Daniel van Vugt
e8116ba4f0 clutter/actor: Double asterisk is required for GObject Introspection
Like GtkDoc and Doxygen before it.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3252

Fixes: f4c6fa949d
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3527>
2024-01-17 15:04:48 +08:00
Daniel van Vugt
7551ffa81e clutter/actor: Remove whitespace at end of line
It's upsetting check-code-style

Fixes: 00b4d4c4bc
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3527>
2024-01-17 15:04:48 +08:00
Shmuel Melamud
f4c6fa949d clutter: Make clutter_actor_create_texture_paint_node public
Since StDrawingArea in gnome-shell is the only user of ClutterCanvas,
it is possible to move ClutterCanvas completely out of Mutter to
gnome-shell. This allows to remove another Cairo dependency from
Mutter.

This patch makes clutter_actor_create_texture_paint_node() function
public to be used by StDrawingArea in gnome-shell that replaces
ClutterCanvas.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3507>
2024-01-15 17:02:55 +00:00
Carlos Garnacho
bd387a6308 clutter: Drop clutter_event_new() from public headers
This is a leftover of the port to immutable events, and should
not be used.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3511>
2024-01-12 14:39:17 +00:00
Bilal Elmoussaoui
692e1f2759 docs/clutter: Drop no longer applicable examples links
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3515>
2024-01-12 11:40:20 +00:00
Carlos Garnacho
9108f2eeec clutter: Update picked actor on scroll events
On one hand this avoids crashes early after startup if the very first
pointer event is a scroll event, since the stage did not pick an actor
for the pointer device yet.

On the other hand, scroll events have some likelihood to change the
actor under the pointer even though it doesn't move. We still want to
cross towards the new actor under the pointer ASAP, without waiting
for later events.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3112
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3517>
2024-01-11 14:23:25 +00:00
Bilal Elmoussaoui
8ae87ce041 clutter: Mark FixedLayout as derivable
As GNOME Shell derives this type

Fixes: 5b527ac89 ("fixed-layout: Use macros for subclassing
boilerplate")

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3509>
2024-01-10 12:55:02 +01:00
Bilal Elmoussaoui
38fd27b528 clutter: Mark BoxLayout as derivable
As it is subclassed in GNOME Shell

Fixes: 23d921080 ("box-layout: Use macros for subclassing boilerplate")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3509>
2024-01-10 11:52:51 +01:00
Bilal Elmoussaoui
8e04168fb2 Revert "clutter: Mark BinLayout as final"
This reverts commit 2dca60bd1c.

As GNOME Shell subclass that layout manager 3 times in the JS code part

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3509>
2024-01-10 11:31:13 +01:00
Bilal Elmoussaoui
2dca60bd1c clutter: Mark BinLayout as final
It doesn't make sense to subclass a layout manager

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:38 +01:00
Bilal Elmoussaoui
56023e3110 cally/text: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:38 +01:00
Bilal Elmoussaoui
cdcf32620a cally/stage: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:38 +01:00
Bilal Elmoussaoui
22d77c9ba4 cally/root: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:37 +01:00
Bilal Elmoussaoui
befb21cbb2 cally/clone: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:37 +01:00
Bilal Elmoussaoui
4483d3ee96 cally/actor: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:36 +01:00
Bilal Elmoussaoui
105c8583ee cally/util: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:19 +01:00
Bilal Elmoussaoui
566b14e48d clutter/input-device: Move autocleanup macro
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:15 +01:00
Bilal Elmoussaoui
3679c82482 text: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:37:13 +01:00
Bilal Elmoussaoui
9409604820 scroll-actor: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:35:33 +01:00
Bilal Elmoussaoui
fbef2afb37 clone: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:34:58 +01:00
Bilal Elmoussaoui
d07056992b stage: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:34:24 +01:00
Bilal Elmoussaoui
62482c2ac0 clutter/actor: Move autocleanup functions
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:32:49 +01:00
Bilal Elmoussaoui
35b9d24cae actor-meta-group: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:32:47 +01:00
Bilal Elmoussaoui
c40be814c1 brightness-contrast-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:31:54 +01:00
Bilal Elmoussaoui
5fecb069a0 desaturate-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:31:22 +01:00
Bilal Elmoussaoui
0c46978188 input-device-tool: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:30:34 +01:00
Bilal Elmoussaoui
acb2c4b6be flatten-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:30:23 +01:00
Bilal Elmoussaoui
4a2f7a51e3 stage-manager: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:30:21 +01:00
Bilal Elmoussaoui
4425636219 clutter: Move autoptr cleanup function defintion
So we can drop the header file

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:29:47 +01:00
Bilal Elmoussaoui
84dabd9f8b interval: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:29:44 +01:00
Bilal Elmoussaoui
43d6f73714 grid-layout: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:28:47 +01:00
Bilal Elmoussaoui
ba689b86ba flow-layout: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:28:47 +01:00
Bilal Elmoussaoui
5b527ac89b fixed-layout: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:28:40 +01:00
Bilal Elmoussaoui
23d9210806 box-layout: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:28:26 +01:00
Bilal Elmoussaoui
764c3ef602 blur-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:28:08 +01:00
Bilal Elmoussaoui
9bd12d7e88 page-turn-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:27:46 +01:00
Bilal Elmoussaoui
581343dc9a deform-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:27:42 +01:00
Bilal Elmoussaoui
accff6b937 shader-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:26:20 +01:00
Bilal Elmoussaoui
7b32f06f44 colorize-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:25:03 +01:00
Bilal Elmoussaoui
99501482df offscreen-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:24:20 +01:00
Bilal Elmoussaoui
0760e90b0d keyframe-transition: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:23:16 +01:00
Bilal Elmoussaoui
6e3223a0cc property-transition: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:22:19 +01:00
Bilal Elmoussaoui
57fbc304f5 swipe-action: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:21:14 +01:00
Bilal Elmoussaoui
1df56ca77a text-buffer: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:21:05 +01:00
Bilal Elmoussaoui
a944889f49 tap-action: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:20:31 +01:00
Bilal Elmoussaoui
64ad3abded rotate-action: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:20:09 +01:00
Bilal Elmoussaoui
aa8ef78b17 pan-action: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:20:07 +01:00
Bilal Elmoussaoui
d79f0ab9f3 snap-constraint: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
2024-01-10 09:19:18 +01:00