backends: Delegate pointer confinements to an impl object
Split pointer confinements in 2 objects, one set from the upper layers containing its definition, and another managed by the backend that applies it. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
This commit is contained in:

committed by
Marge Bot

parent
efd065259d
commit
8a8d47725c
@ -39,10 +39,34 @@
|
||||
|
||||
#include "backends/meta-pointer-constraint.h"
|
||||
|
||||
#ifdef HAVE_NATIVE_BACKEND
|
||||
#include "backends/native/meta-backend-native.h"
|
||||
#include "backends/native/meta-pointer-constraint-native.h"
|
||||
#endif
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
struct _MetaPointerConstraint
|
||||
{
|
||||
GObject parent_instance;
|
||||
cairo_region_t *region;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaPointerConstraint, meta_pointer_constraint, G_TYPE_OBJECT);
|
||||
|
||||
G_DEFINE_TYPE (MetaPointerConstraintImpl, meta_pointer_constraint_impl,
|
||||
G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
meta_pointer_constraint_finalize (GObject *object)
|
||||
{
|
||||
MetaPointerConstraint *constraint = META_POINTER_CONSTRAINT (object);
|
||||
|
||||
g_clear_pointer (&constraint->region, cairo_region_destroy);
|
||||
|
||||
G_OBJECT_CLASS (meta_pointer_constraint_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_pointer_constraint_init (MetaPointerConstraint *constraint)
|
||||
{
|
||||
@ -50,12 +74,43 @@ meta_pointer_constraint_init (MetaPointerConstraint *constraint)
|
||||
|
||||
static void
|
||||
meta_pointer_constraint_class_init (MetaPointerConstraintClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = meta_pointer_constraint_finalize;
|
||||
}
|
||||
|
||||
|
||||
MetaPointerConstraint *
|
||||
meta_pointer_constraint_new (const cairo_region_t *region)
|
||||
{
|
||||
MetaPointerConstraint *constraint;
|
||||
|
||||
constraint = g_object_new (META_TYPE_POINTER_CONSTRAINT, NULL);
|
||||
constraint->region = cairo_region_copy (region);
|
||||
|
||||
return constraint;
|
||||
}
|
||||
|
||||
cairo_region_t *
|
||||
meta_pointer_constraint_get_region (MetaPointerConstraint *constraint)
|
||||
{
|
||||
return constraint->region;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_pointer_constraint_impl_init (MetaPointerConstraintImpl *constraint_impl)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_pointer_constraint_impl_class_init (MetaPointerConstraintImplClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_pointer_constraint_constrain:
|
||||
* @constraint: a #MetaPointerConstraint.
|
||||
* meta_pointer_constraint_impl_constrain:
|
||||
* @constraint_impl: a #MetaPointerConstraintImpl.
|
||||
* @device; the device of the pointer.
|
||||
* @time: the timestamp (in ms) of the event.
|
||||
* @prev_x: X-coordinate of the previous pointer position.
|
||||
@ -67,17 +122,25 @@ meta_pointer_constraint_class_init (MetaPointerConstraintClass *klass)
|
||||
* if needed.
|
||||
*/
|
||||
void
|
||||
meta_pointer_constraint_constrain (MetaPointerConstraint *constraint,
|
||||
ClutterInputDevice *device,
|
||||
guint32 time,
|
||||
float prev_x,
|
||||
float prev_y,
|
||||
float *x,
|
||||
float *y)
|
||||
meta_pointer_constraint_impl_constrain (MetaPointerConstraintImpl *constraint_impl,
|
||||
ClutterInputDevice *device,
|
||||
uint32_t time,
|
||||
float prev_x,
|
||||
float prev_y,
|
||||
float *x,
|
||||
float *y)
|
||||
{
|
||||
META_POINTER_CONSTRAINT_GET_CLASS (constraint)->constrain (constraint,
|
||||
device,
|
||||
time,
|
||||
prev_x, prev_y,
|
||||
x, y);
|
||||
META_POINTER_CONSTRAINT_IMPL_GET_CLASS (constraint_impl)->constrain (constraint_impl,
|
||||
device,
|
||||
time,
|
||||
prev_x, prev_y,
|
||||
x, y);
|
||||
}
|
||||
|
||||
void
|
||||
meta_pointer_constraint_impl_ensure_constrained (MetaPointerConstraintImpl *constraint_impl,
|
||||
ClutterInputDevice *device)
|
||||
{
|
||||
META_POINTER_CONSTRAINT_IMPL_GET_CLASS (constraint_impl)->ensure_constrained (constraint_impl,
|
||||
device);
|
||||
}
|
||||
|
Reference in New Issue
Block a user