Compare commits

..

1 Commits

Author SHA1 Message Date
Carlos Garnacho
162d6d45a0 cogl/egl: Use EGL_IMG_context_priority
As long as the context_priority extension is available request a high
priority context, to help the compositor look fluid despite heavy GPU usage
from other applications at a regular priority.

This becomes sort of pointless if/when unredirection applies, should still
help with overview/workspace switch animations, or if the application is
not fullscreen.

Based on a similar patch by Daniel Stone to Weston.
2019-01-21 16:33:44 +01:00
329 changed files with 2109 additions and 5404 deletions

View File

@@ -7,24 +7,14 @@ stages:
build-mutter: build-mutter:
stage: build stage: build
script: script:
- meson . build -Dbuildtype=debugoptimized -Degl_device=true -Dwayland_eglstream=true --werror - meson . build -Degl_device=true -Dwayland_eglstream=true
- ninja -C build - ninja -C build
- ninja -C build install - ninja -C build install
artifacts:
expire_in: 1 day
paths:
- build
test-mutter: test-mutter:
stage: test stage: test
dependencies:
- build-mutter
variables:
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
GSETTINGS_SCHEMA_DIR: "$CI_PROJECT_DIR/build/data"
script: script:
- mkdir -m 700 $XDG_RUNTIME_DIR - meson . build -Degl_device=true -Dwayland_eglstream=true
- glib-compile-schemas $GSETTINGS_SCHEMA_DIR - ninja -C build
- > - glib-compile-schemas $PWD/build/data
dbus-run-session -- xvfb-run -s '+iglx -noreset' - env XDG_RUNTIME_DIR=/tmp/ GSETTINGS_SCHEMA_DIR=$PWD/build/data dbus-run-session -- xvfb-run -s '+iglx -noreset' meson test -C build -t 10 --verbose --no-stdsplit --wrap catchsegv
meson test -C build --no-rebuild -t 10 --verbose --no-stdsplit --wrap catchsegv

View File

@@ -11,7 +11,10 @@ RUN dnf -y update && dnf -y upgrade && \
dnf install -y xorg-x11-server-Xvfb mesa-dri-drivers dbus dbus-x11 && \ dnf install -y xorg-x11-server-Xvfb mesa-dri-drivers dbus dbus-x11 && \
# Unpackaged versions # Unpackaged versions
dnf install -y https://copr-be.cloud.fedoraproject.org/results/jadahl/mutter-ci/fedora-29-x86_64/00848426-gsettings-desktop-schemas/gsettings-desktop-schemas-3.30.1-1.20181206git918efdd69be53.fc29.x86_64.rpm https://copr-be.cloud.fedoraproject.org/results/jadahl/mutter-ci/fedora-29-x86_64/00848426-gsettings-desktop-schemas/gsettings-desktop-schemas-devel-3.30.1-1.20181206git918efdd69be53.fc29.x86_64.rpm && \ dnf install -y https://copr-be.cloud.fedoraproject.org/results/jadahl/mutter-ci/fedora-29-x86_64/00836095-gsettings-desktop-schemas/gsettings-desktop-schemas-3.30.1-1.20181206git918efdd69be53.fc29.x86_64.rpm https://copr-be.cloud.fedoraproject.org/results/jadahl/mutter-ci/fedora-29-x86_64/00836095-gsettings-desktop-schemas/gsettings-desktop-schemas-devel-3.30.1-1.20181206git918efdd69be53.fc29.x86_64.rpm && \
# Packages not yet in stable
dnf install -y https://kojipkgs.fedoraproject.org//packages/pipewire/0.2.5/1.fc29/x86_64/pipewire-0.2.5-1.fc29.x86_64.rpm https://kojipkgs.fedoraproject.org//packages/pipewire/0.2.5/1.fc29/x86_64/pipewire-devel-0.2.5-1.fc29.x86_64.rpm https://kojipkgs.fedoraproject.org//packages/pipewire/0.2.5/1.fc29/x86_64/pipewire-libs-0.2.5-1.fc29.x86_64.rpm && \
dnf install -y intltool redhat-rpm-config make && \ dnf install -y intltool redhat-rpm-config make && \
dnf clean all dnf clean all

25
NEWS
View File

@@ -1,28 +1,3 @@
3.31.90
=======
* Fix support of extended characters in on-screen keyboard [Andrea; #109]
* Improve selection of the primary GPU [Pekka, Emilio; !271]
* Screen-cast cursor updates as PipeWire stream metadata [Jonas; !357]
* Fix rendering glitches in magnifier [Daniel; gnome-shell#387]
* Fix monitor recording on HiDPI [Jonas; !415]
* Honour secondary GPU supported pixel formats [Pekka; !341]
* Fall back to CPU copy path when using a software renderer [Emilio; !325]
* Remove fallback app menu [Florian; gnome-shell#624]
* wayland: Add support for viewporter protocol [Robert; !323]
* Misc. bug fixes and cleanups [Florian, Carlos, Olivier, Marco, Robert,
Daniel, Pekka, Jonas, Ole, Georges; !391, #335, #442, !406, !395, #447,
!375, gnome-shell#349, #451, !416, #784199, !408, !181, !405]
Contributors:
Jonas Ådahl, Andrea Azzarone, Ole Jørgen Brønner, Piotr Drąg, Olivier Fourdan,
Dariusz Gadomski, Carlos Garnacho, Antoine Jacoutot, Iain Lane, Robert Mader,
Emilio Pozuelo Monfort, Florian Müllner, Georges Basile Stavracas Neto,
Pekka Paalanen, Marco Trevisan (Treviño), Josh Triplett, Daniel van Vugt
Translators:
Fabio Tomat [fur], Balázs Úr [hu], Daniel Mustieles [es], Kukuh Syafaat [id],
Jordi Mas [ca], Piotr Drąg [pl]
3.31.4 3.31.4
====== ======
* keybindings: Limit corner move to current monitor [Jānis; #320] * keybindings: Limit corner move to current monitor [Jānis; #320]

View File

@@ -1,12 +0,0 @@
#ifndef __CLUTTER_ACTOR_BOX_PRIVATE_H__
#define __CLUTTER_ACTOR_BOX_PRIVATE_H__
#include <clutter/clutter-types.h>
G_BEGIN_DECLS
void _clutter_actor_box_enlarge_for_effects (ClutterActorBox *box);
G_END_DECLS
#endif /* __CLUTTER_ACTOR_BOX_PRIVATE_H__ */

View File

@@ -5,7 +5,6 @@
#include "clutter-types.h" #include "clutter-types.h"
#include "clutter-interval.h" #include "clutter-interval.h"
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-actor-box-private.h"
/** /**
* clutter_actor_box_new: * clutter_actor_box_new:
@@ -543,57 +542,6 @@ clutter_actor_box_set_size (ClutterActorBox *box,
box->y2 = box->y1 + height; box->y2 = box->y1 + height;
} }
void
_clutter_actor_box_enlarge_for_effects (ClutterActorBox *box)
{
float width, height;
/* The aim here is that for a given rectangle defined with floating point
* coordinates we want to determine a stable quantized size in pixels
* that doesn't vary due to the original box's sub-pixel position.
*
* The reason this is important is because effects will use this
* API to determine the size of offscreen framebuffers and so for
* a fixed-size object that may be animated accross the screen we
* want to make sure that the stage paint-box has an equally stable
* size so that effects aren't made to continuously re-allocate
* a corresponding fbo.
*
* The other thing we consider is that the calculation of this box is
* subject to floating point precision issues that might be slightly
* different to the precision issues involved with actually painting the
* actor, which might result in painting slightly leaking outside the
* user's calculated paint-volume. For this we simply aim to pad out the
* paint-volume by at least half a pixel all the way around.
*/
width = box->x2 - box->x1;
height = box->y2 - box->y1;
width = CLUTTER_NEARBYINT (width);
height = CLUTTER_NEARBYINT (height);
/* XXX: NB the width/height may now be up to 0.5px too small so we
* must also pad by 0.25px all around to account for this. In total we
* must padd by at least 0.75px around all sides. */
/* XXX: The furthest that we can overshoot the bottom right corner by
* here is 1.75px in total if you consider that the 0.75 padding could
* just cross an integer boundary and so ceil will effectively add 1.
*/
box->x2 = ceilf (box->x2 + 0.75);
box->y2 = ceilf (box->y2 + 0.75);
/* Now we redefine the top-left relative to the bottom right based on the
* rounded width/height determined above + a constant so that the overall
* size of the box will be stable and not dependant on the box's
* position.
*
* Adding 3px to the width/height will ensure we cover the maximum of
* 1.75px padding on the bottom/right and still ensure we have > 0.75px
* padding on the top/left.
*/
box->x1 = box->x2 - width - 3;
box->y1 = box->y2 - height - 3;
}
G_DEFINE_BOXED_TYPE_WITH_CODE (ClutterActorBox, clutter_actor_box, G_DEFINE_BOXED_TYPE_WITH_CODE (ClutterActorBox, clutter_actor_box,
clutter_actor_box_copy, clutter_actor_box_copy,
clutter_actor_box_free, clutter_actor_box_free,

View File

@@ -3740,7 +3740,7 @@ clutter_actor_paint_node (ClutterActor *actor,
if (!clutter_stage_get_no_clear_hint (CLUTTER_STAGE (actor))) if (!clutter_stage_get_no_clear_hint (CLUTTER_STAGE (actor)))
clear_flags |= COGL_BUFFER_BIT_COLOR; clear_flags |= COGL_BUFFER_BIT_COLOR;
node = clutter_root_node_new (fb, &bg_color, clear_flags); node = _clutter_root_node_new (fb, &bg_color, clear_flags);
clutter_paint_node_set_name (node, "stageClear"); clutter_paint_node_set_name (node, "stageClear");
clutter_paint_node_add_rectangle (node, &box); clutter_paint_node_add_rectangle (node, &box);
clutter_paint_node_add_child (root, node); clutter_paint_node_add_child (root, node);
@@ -3779,7 +3779,7 @@ clutter_actor_paint_node (ClutterActor *actor,
} }
#endif /* CLUTTER_ENABLE_DEBUG */ #endif /* CLUTTER_ENABLE_DEBUG */
clutter_paint_node_paint (root); _clutter_paint_node_paint (root);
return TRUE; return TRUE;
} }
@@ -18467,10 +18467,6 @@ clutter_actor_set_margin_top (ClutterActor *self,
g_return_if_fail (margin >= 0.f); g_return_if_fail (margin >= 0.f);
info = _clutter_actor_get_layout_info_or_defaults (self); info = _clutter_actor_get_layout_info_or_defaults (self);
if (info->margin.top == margin)
return;
_clutter_actor_create_transition (self, obj_props[PROP_MARGIN_TOP], _clutter_actor_create_transition (self, obj_props[PROP_MARGIN_TOP],
info->margin.top, info->margin.top,
margin); margin);
@@ -18515,10 +18511,6 @@ clutter_actor_set_margin_bottom (ClutterActor *self,
g_return_if_fail (margin >= 0.f); g_return_if_fail (margin >= 0.f);
info = _clutter_actor_get_layout_info_or_defaults (self); info = _clutter_actor_get_layout_info_or_defaults (self);
if (info->margin.bottom == margin)
return;
_clutter_actor_create_transition (self, obj_props[PROP_MARGIN_BOTTOM], _clutter_actor_create_transition (self, obj_props[PROP_MARGIN_BOTTOM],
info->margin.bottom, info->margin.bottom,
margin); margin);
@@ -18563,10 +18555,6 @@ clutter_actor_set_margin_left (ClutterActor *self,
g_return_if_fail (margin >= 0.f); g_return_if_fail (margin >= 0.f);
info = _clutter_actor_get_layout_info_or_defaults (self); info = _clutter_actor_get_layout_info_or_defaults (self);
if (info->margin.left == margin)
return;
_clutter_actor_create_transition (self, obj_props[PROP_MARGIN_LEFT], _clutter_actor_create_transition (self, obj_props[PROP_MARGIN_LEFT],
info->margin.left, info->margin.left,
margin); margin);
@@ -18611,10 +18599,6 @@ clutter_actor_set_margin_right (ClutterActor *self,
g_return_if_fail (margin >= 0.f); g_return_if_fail (margin >= 0.f);
info = _clutter_actor_get_layout_info_or_defaults (self); info = _clutter_actor_get_layout_info_or_defaults (self);
if (info->margin.right == margin)
return;
_clutter_actor_create_transition (self, obj_props[PROP_MARGIN_RIGHT], _clutter_actor_create_transition (self, obj_props[PROP_MARGIN_RIGHT],
info->margin.right, info->margin.right,
margin); margin);

View File

@@ -24,7 +24,6 @@
#include <clutter/clutter-backend.h> #include <clutter/clutter-backend.h>
#include <clutter/clutter-device-manager.h> #include <clutter/clutter-device-manager.h>
#include <clutter/clutter-keymap.h>
#include <clutter/clutter-stage-window.h> #include <clutter/clutter-stage-window.h>
#include "clutter-event-translator.h" #include "clutter-event-translator.h"
@@ -61,8 +60,6 @@ struct _ClutterBackend
GList *event_translators; GList *event_translators;
ClutterInputMethod *input_method; ClutterInputMethod *input_method;
ClutterKeymap *keymap;
}; };
struct _ClutterBackendClass struct _ClutterBackendClass
@@ -107,8 +104,6 @@ struct _ClutterBackendClass
void (* bell_notify) (ClutterBackend *backend); void (* bell_notify) (ClutterBackend *backend);
ClutterKeymap * (* get_keymap) (ClutterBackend *backend);
/* signals */ /* signals */
void (* resolution_changed) (ClutterBackend *backend); void (* resolution_changed) (ClutterBackend *backend);
void (* font_changed) (ClutterBackend *backend); void (* font_changed) (ClutterBackend *backend);

View File

@@ -577,18 +577,6 @@ clutter_backend_real_get_device_manager (ClutterBackend *backend)
return backend->device_manager; return backend->device_manager;
} }
static ClutterKeymap *
clutter_backend_real_get_keymap (ClutterBackend *backend)
{
if (G_UNLIKELY (backend->keymap == NULL))
{
g_critical ("No keymap available, expect broken keyboard input");
return NULL;
}
return backend->keymap;
}
static gboolean static gboolean
clutter_backend_real_translate_event (ClutterBackend *backend, clutter_backend_real_translate_event (ClutterBackend *backend,
gpointer native, gpointer native,
@@ -687,7 +675,6 @@ clutter_backend_class_init (ClutterBackendClass *klass)
klass->translate_event = clutter_backend_real_translate_event; klass->translate_event = clutter_backend_real_translate_event;
klass->create_context = clutter_backend_real_create_context; klass->create_context = clutter_backend_real_create_context;
klass->get_features = clutter_backend_real_get_features; klass->get_features = clutter_backend_real_get_features;
klass->get_keymap = clutter_backend_real_get_keymap;
} }
static void static void
@@ -1412,17 +1399,3 @@ clutter_backend_set_input_method (ClutterBackend *backend,
{ {
g_set_object (&backend->input_method, method); g_set_object (&backend->input_method, method);
} }
/**
* clutter_backend_get_keymap:
* @backend: the #ClutterBackend
*
* Gets the keymap used by Clutter
*
* Returns: (transfer none): the keymap
**/
ClutterKeymap *
clutter_backend_get_keymap (ClutterBackend *backend)
{
return CLUTTER_BACKEND_GET_CLASS (backend)->get_keymap (backend);
}

View File

@@ -34,7 +34,6 @@
#include <cogl/cogl.h> #include <cogl/cogl.h>
#include <clutter/clutter-config.h> #include <clutter/clutter-config.h>
#include <clutter/clutter-keymap.h>
#include <clutter/clutter-types.h> #include <clutter/clutter-types.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@@ -84,9 +83,6 @@ ClutterInputMethod * clutter_backend_get_input_method (Clutter
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_backend_set_input_method (ClutterBackend *backend, void clutter_backend_set_input_method (ClutterBackend *backend,
ClutterInputMethod *method); ClutterInputMethod *method);
CLUTTER_EXPORT
ClutterKeymap * clutter_backend_get_keymap (ClutterBackend *backend);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_BACKEND_H__ */ #endif /* __CLUTTER_BACKEND_H__ */

View File

@@ -36,7 +36,7 @@ G_BEGIN_DECLS
typedef struct _ClutterBezier ClutterBezier; typedef struct _ClutterBezier ClutterBezier;
ClutterBezier *_clutter_bezier_new (void); ClutterBezier *_clutter_bezier_new ();
void _clutter_bezier_free (ClutterBezier * b); void _clutter_bezier_free (ClutterBezier * b);

View File

@@ -150,9 +150,9 @@ typedef struct _RequestedSize
gfloat natural_size; gfloat natural_size;
} RequestedSize; } RequestedSize;
static float distribute_natural_allocation (float extra_space, static gint distribute_natural_allocation (gint extra_space,
unsigned int n_requested_sizes, guint n_requested_sizes,
RequestedSize *sizes); RequestedSize *sizes);
static void count_expand_children (ClutterLayoutManager *layout, static void count_expand_children (ClutterLayoutManager *layout,
ClutterContainer *container, ClutterContainer *container,
gint *visible_children, gint *visible_children,
@@ -624,19 +624,7 @@ get_preferred_size_for_opposite_orientation (ClutterBoxLayout *self,
else else
{ {
/* Bring children up to size first */ /* Bring children up to size first */
if (isnormal (size) || size == 0) size = distribute_natural_allocation (MAX (0, size), nvis_children, sizes);
{
size = distribute_natural_allocation (MAX (0, size),
nvis_children,
sizes);
}
else
{
g_critical ("Actor %s (%p) received the invalid "
"value %f as minimum/natural size\n",
G_OBJECT_TYPE_NAME (container), container, size);
size = 0;
}
/* Calculate space which hasn't distributed yet, /* Calculate space which hasn't distributed yet,
* and is available for expanding children. * and is available for expanding children.
@@ -891,18 +879,17 @@ compare_gap (gconstpointer p1,
* *
* Pulled from gtksizerequest.c from Gtk+ * Pulled from gtksizerequest.c from Gtk+
*/ */
static float static gint
distribute_natural_allocation (float extra_space, distribute_natural_allocation (gint extra_space,
unsigned int n_requested_sizes, guint n_requested_sizes,
RequestedSize *sizes) RequestedSize *sizes)
{ {
unsigned int *spreading; guint *spreading;
int i; gint i;
g_return_val_if_fail (isnormal (extra_space) || extra_space == 0, 0);
g_return_val_if_fail (extra_space >= 0, 0); g_return_val_if_fail (extra_space >= 0, 0);
spreading = g_newa (unsigned int, n_requested_sizes); spreading = g_newa (guint, n_requested_sizes);
for (i = 0; i < n_requested_sizes; i++) for (i = 0; i < n_requested_sizes; i++)
spreading[i] = i; spreading[i] = i;
@@ -926,7 +913,7 @@ distribute_natural_allocation (float extra_space,
/* Sort descending by gap and position. */ /* Sort descending by gap and position. */
g_qsort_with_data (spreading, g_qsort_with_data (spreading,
n_requested_sizes, sizeof (unsigned int), n_requested_sizes, sizeof (guint),
compare_gap, sizes); compare_gap, sizes);
/* Distribute available space. /* Distribute available space.
@@ -938,11 +925,11 @@ distribute_natural_allocation (float extra_space,
* Sort order and reducing remaining space by assigned space * Sort order and reducing remaining space by assigned space
* ensures that space is distributed equally. * ensures that space is distributed equally.
*/ */
int glue = (extra_space + i) / (i + 1); gint glue = (extra_space + i) / (i + 1);
int gap = sizes[(spreading[i])].natural_size gint gap = sizes[(spreading[i])].natural_size
- sizes[(spreading[i])].minimum_size; - sizes[(spreading[i])].minimum_size;
int extra = MIN (glue, gap); gint extra = MIN (glue, gap);
sizes[spreading[i]].minimum_size += extra; sizes[spreading[i]].minimum_size += extra;
@@ -1069,9 +1056,7 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
else else
{ {
/* Bring children up to size first */ /* Bring children up to size first */
size = (gint) distribute_natural_allocation (MAX (0, (float) size), size = distribute_natural_allocation (MAX (0, size), nvis_children, sizes);
nvis_children,
sizes);
/* Calculate space which hasn't distributed yet, /* Calculate space which hasn't distributed yet,
* and is available for expanding children. * and is available for expanding children.

View File

@@ -38,7 +38,6 @@
#include "clutter-build-config.h" #include "clutter-build-config.h"
#include "clutter-actor-private.h"
#include "clutter-content-private.h" #include "clutter-content-private.h"
#include "clutter-debug.h" #include "clutter-debug.h"
@@ -92,11 +91,6 @@ clutter_content_real_invalidate (ClutterContent *content)
{ {
} }
static void
clutter_content_real_invalidate_size (ClutterContent *content)
{
}
static void static void
clutter_content_real_paint_content (ClutterContent *content, clutter_content_real_paint_content (ClutterContent *content,
ClutterActor *actor, ClutterActor *actor,
@@ -114,7 +108,6 @@ clutter_content_default_init (ClutterContentInterface *iface)
iface->attached = clutter_content_real_attached; iface->attached = clutter_content_real_attached;
iface->detached = clutter_content_real_detached; iface->detached = clutter_content_real_detached;
iface->invalidate = clutter_content_real_invalidate; iface->invalidate = clutter_content_real_invalidate;
iface->invalidate_size = clutter_content_real_invalidate_size;
/** /**
* ClutterContent::attached: * ClutterContent::attached:
@@ -195,45 +188,6 @@ clutter_content_invalidate (ClutterContent *content)
} }
} }
/**
* clutter_content_invalidate_size:
* @content: a #ClutterContent
*
* Signals that @content's size changed. Attached actors with request mode
* set to %CLUTTER_REQUEST_CONTENT_SIZE will have a relayout queued.
*
* Attached actors with other request modes are not redrawn. To redraw them
* too, use clutter_content_invalidate().
*/
void
clutter_content_invalidate_size (ClutterContent *content)
{
ClutterActor *actor;
GHashTable *actors;
GHashTableIter iter;
g_return_if_fail (CLUTTER_IS_CONTENT (content));
CLUTTER_CONTENT_GET_IFACE (content)->invalidate_size (content);
actors = g_object_get_qdata (G_OBJECT (content), quark_content_actors);
if (actors == NULL)
return;
g_hash_table_iter_init (&iter, actors);
while (g_hash_table_iter_next (&iter, (gpointer *) &actor, NULL))
{
ClutterRequestMode request_mode;
g_assert (actor != NULL);
request_mode = clutter_actor_get_request_mode (actor);
if (request_mode == CLUTTER_REQUEST_CONTENT_SIZE)
_clutter_actor_queue_only_relayout (actor);
}
}
/*< private > /*< private >
* _clutter_content_attached: * _clutter_content_attached:
* @content: a #ClutterContent * @content: a #ClutterContent

View File

@@ -86,8 +86,6 @@ struct _ClutterContentIface
ClutterActor *actor); ClutterActor *actor);
void (* invalidate) (ClutterContent *content); void (* invalidate) (ClutterContent *content);
void (* invalidate_size) (ClutterContent *content);
}; };
CLUTTER_EXPORT CLUTTER_EXPORT
@@ -100,9 +98,6 @@ gboolean clutter_content_get_preferred_size (ClutterContent *content
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_content_invalidate (ClutterContent *content); void clutter_content_invalidate (ClutterContent *content);
CLUTTER_EXPORT
void clutter_content_invalidate_size (ClutterContent *content);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_CONTENT_H__ */ #endif /* __CLUTTER_CONTENT_H__ */

View File

@@ -80,9 +80,9 @@ extern guint clutter_pick_debug_flags;
extern guint clutter_paint_debug_flags; extern guint clutter_paint_debug_flags;
void _clutter_debug_messagev (const char *format, void _clutter_debug_messagev (const char *format,
va_list var_args) G_GNUC_PRINTF (1, 0); va_list var_args);
void _clutter_debug_message (const char *format, void _clutter_debug_message (const char *format,
...) G_GNUC_PRINTF (1, 2); ...);
G_END_DECLS G_END_DECLS

View File

@@ -772,10 +772,7 @@ void clutter_event_get_gesture_motion_delta (const Clut
gdouble *dx, gdouble *dx,
gdouble *dy); gdouble *dy);
CLUTTER_EXPORT
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event); ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
CLUTTER_EXPORT
ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags (const ClutterEvent *event); ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags (const ClutterEvent *event);
CLUTTER_EXPORT CLUTTER_EXPORT

View File

@@ -53,8 +53,6 @@
struct _ClutterImagePrivate struct _ClutterImagePrivate
{ {
CoglTexture *texture; CoglTexture *texture;
gint width;
gint height;
}; };
static void clutter_content_iface_init (ClutterContentIface *iface); static void clutter_content_iface_init (ClutterContentIface *iface);
@@ -70,27 +68,6 @@ clutter_image_error_quark (void)
return g_quark_from_static_string ("clutter-image-error-quark"); return g_quark_from_static_string ("clutter-image-error-quark");
} }
static void
update_image_size (ClutterImage *self)
{
gint width, height;
if (self->priv->texture == NULL)
return;
width = cogl_texture_get_width (self->priv->texture);
height = cogl_texture_get_height (self->priv->texture);
if (self->priv->width == width &&
self->priv->height == height)
return;
self->priv->width = width;
self->priv->height = height;
clutter_content_invalidate_size (CLUTTER_CONTENT (self));
}
static void static void
clutter_image_finalize (GObject *gobject) clutter_image_finalize (GObject *gobject)
{ {
@@ -261,7 +238,6 @@ clutter_image_set_data (ClutterImage *image,
} }
clutter_content_invalidate (CLUTTER_CONTENT (image)); clutter_content_invalidate (CLUTTER_CONTENT (image));
update_image_size (image);
return TRUE; return TRUE;
} }
@@ -330,7 +306,6 @@ clutter_image_set_bytes (ClutterImage *image,
} }
clutter_content_invalidate (CLUTTER_CONTENT (image)); clutter_content_invalidate (CLUTTER_CONTENT (image));
update_image_size (image);
return TRUE; return TRUE;
} }
@@ -424,7 +399,6 @@ clutter_image_set_area (ClutterImage *image,
} }
clutter_content_invalidate (CLUTTER_CONTENT (image)); clutter_content_invalidate (CLUTTER_CONTENT (image));
update_image_size (image);
return TRUE; return TRUE;
} }

View File

@@ -1,64 +0,0 @@
/*
* Copyright (C) 2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#include "clutter-build-config.h"
#include "clutter-keymap.h"
#include "clutter-private.h"
G_DEFINE_ABSTRACT_TYPE (ClutterKeymap, clutter_keymap, G_TYPE_OBJECT)
enum
{
STATE_CHANGED,
N_SIGNALS
};
static guint signals[N_SIGNALS] = { 0, };
static void
clutter_keymap_class_init (ClutterKeymapClass *klass)
{
signals[STATE_CHANGED] =
g_signal_new (I_("state-changed"),
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}
static void
clutter_keymap_init (ClutterKeymap *keymap)
{
}
gboolean
clutter_keymap_get_num_lock_state (ClutterKeymap *keymap)
{
return CLUTTER_KEYMAP_GET_CLASS (keymap)->get_num_lock_state (keymap);
}
gboolean
clutter_keymap_get_caps_lock_state (ClutterKeymap *keymap)
{
return CLUTTER_KEYMAP_GET_CLASS (keymap)->get_caps_lock_state (keymap);
}

View File

@@ -1,56 +0,0 @@
/*
* Copyright (C) 2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#ifndef CLUTTER_KEYMAP_H
#define CLUTTER_KEYMAP_H
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <clutter/clutter.h> can be included directly."
#endif
#include <clutter/clutter-macros.h>
#include <glib-object.h>
typedef struct _ClutterKeymap ClutterKeymap;
typedef struct _ClutterKeymapClass ClutterKeymapClass;
struct _ClutterKeymapClass
{
GObjectClass parent_class;
gboolean (* get_num_lock_state) (ClutterKeymap *keymap);
gboolean (* get_caps_lock_state) (ClutterKeymap *keymap);
};
#define CLUTTER_TYPE_KEYMAP (clutter_keymap_get_type ())
CLUTTER_EXPORT
G_DECLARE_DERIVABLE_TYPE (ClutterKeymap, clutter_keymap,
CLUTTER, KEYMAP,
GObject)
CLUTTER_EXPORT
gboolean clutter_keymap_get_num_lock_state (ClutterKeymap *keymap);
CLUTTER_EXPORT
gboolean clutter_keymap_get_caps_lock_state (ClutterKeymap *keymap);
#endif /* CLUTTER_KEYMAP_H */

View File

@@ -72,8 +72,6 @@
#include "clutter-debug.h" #include "clutter-debug.h"
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-stage-private.h" #include "clutter-stage-private.h"
#include "clutter-paint-volume-private.h"
#include "clutter-actor-box-private.h"
struct _ClutterOffscreenEffectPrivate struct _ClutterOffscreenEffectPrivate
{ {
@@ -84,10 +82,8 @@ struct _ClutterOffscreenEffectPrivate
ClutterActor *actor; ClutterActor *actor;
ClutterActor *stage; ClutterActor *stage;
ClutterVertex position; gfloat x_offset;
gfloat y_offset;
int fbo_offset_x;
int fbo_offset_y;
/* This is the calculated size of the fbo before being passed /* This is the calculated size of the fbo before being passed
through create_texture(). This needs to be tracked separately so through create_texture(). This needs to be tracked separately so
@@ -97,6 +93,16 @@ struct _ClutterOffscreenEffectPrivate
int fbo_height; int fbo_height;
gint old_opacity_override; gint old_opacity_override;
/* The matrix that was current the last time the fbo was updated. We
need to keep track of this to detect when we can reuse the
contents of the fbo without redrawing the actor. We need the
actual matrix rather than just detecting queued redraws on the
actor because any change in the parent hierarchy (even just a
translation) could cause the actor to look completely different
and it won't cause a redraw to be queued on the parent's
children. */
CoglMatrix last_matrix_drawn;
}; };
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterOffscreenEffect, G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterOffscreenEffect,
@@ -216,15 +222,15 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect)
{ {
ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect);
ClutterOffscreenEffectPrivate *priv = self->priv; ClutterOffscreenEffectPrivate *priv = self->priv;
ClutterActorBox raw_box, box; ClutterActorBox box;
ClutterActor *stage; ClutterActor *stage;
CoglMatrix projection, old_modelview, modelview; CoglMatrix projection;
const ClutterPaintVolume *volume;
CoglColor transparent; CoglColor transparent;
gfloat stage_width, stage_height; gfloat stage_width, stage_height;
gfloat fbo_width = -1, fbo_height = -1; gfloat fbo_width = -1, fbo_height = -1;
ClutterVertex local_offset = { 0.f, 0.f, 0.f }; gfloat width, height;
gfloat old_viewport[4]; gfloat xexpand, yexpand;
int texture_width, texture_height;
if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect))) if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)))
return FALSE; return FALSE;
@@ -235,82 +241,92 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect)
stage = _clutter_actor_get_stage_internal (priv->actor); stage = _clutter_actor_get_stage_internal (priv->actor);
clutter_actor_get_size (stage, &stage_width, &stage_height); clutter_actor_get_size (stage, &stage_width, &stage_height);
/* Get the minimal bounding box for what we want to paint, relative to the /* The paint box is the bounding box of the actor's paint volume in
* parent of priv->actor. Note that we may actually be painting a clone of * stage coordinates. This will give us the size for the framebuffer
* priv->actor so we need to be careful to avoid querying the transformation * we need to redirect its rendering offscreen and its position will
* of priv->actor (like clutter_actor_get_paint_box would). Just stay in * be used to setup an offset viewport */
* local coordinates for now... if (clutter_actor_get_paint_box (priv->actor, &box))
*/
volume = clutter_actor_get_paint_volume (priv->actor);
if (volume)
{ {
ClutterPaintVolume mutable_volume; clutter_actor_box_get_size (&box, &fbo_width, &fbo_height);
clutter_actor_box_get_origin (&box, &priv->x_offset, &priv->y_offset);
_clutter_paint_volume_copy_static (volume, &mutable_volume); fbo_width = MIN (fbo_width, stage_width);
_clutter_paint_volume_get_bounding_box (&mutable_volume, &raw_box); fbo_height = MIN (fbo_height, stage_height);
clutter_paint_volume_free (&mutable_volume);
} }
else else
{ {
clutter_actor_get_allocation_box (priv->actor, &raw_box); fbo_width = stage_width;
fbo_height = stage_height;
} }
box = raw_box; if (fbo_width == stage_width)
_clutter_actor_box_enlarge_for_effects (&box); priv->x_offset = 0.0f;
if (fbo_height == stage_height)
priv->fbo_offset_x = box.x1 - raw_box.x1; priv->y_offset = 0.0f;
priv->fbo_offset_y = box.y1 - raw_box.y1;
clutter_actor_box_get_size (&box, &fbo_width, &fbo_height);
/* First assert that the framebuffer is the right size... */ /* First assert that the framebuffer is the right size... */
if (!update_fbo (effect, fbo_width, fbo_height)) if (!update_fbo (effect, fbo_width, fbo_height))
return FALSE; return FALSE;
cogl_get_modelview_matrix (&old_modelview); texture_width = cogl_texture_get_width (priv->texture);
texture_height = cogl_texture_get_height (priv->texture);
/* get the current modelview matrix so that we can copy it to the
* framebuffer. We also store the matrix that was last used when we
* updated the FBO so that we can detect when we don't need to
* update the FBO to paint a second time */
cogl_get_modelview_matrix (&priv->last_matrix_drawn);
/* let's draw offscreen */ /* let's draw offscreen */
cogl_push_framebuffer (priv->offscreen); cogl_push_framebuffer (priv->offscreen);
/* We don't want the FBO contents to be transformed. That could waste memory /* Copy the modelview that would have been used if rendering onscreen */
* (e.g. during zoom), or result in something that's not rectangular (clipped cogl_set_modelview_matrix (&priv->last_matrix_drawn);
* incorrectly). So drop the modelview matrix of the current paint chain.
* This is fine since paint_texture runs with the same modelview matrix,
* so it will come out correctly whenever that is used to put the FBO
* contents on screen...
*/
clutter_actor_get_transform (priv->stage, &modelview);
cogl_set_modelview_matrix (&modelview);
/* Save the original viewport for calculating priv->position */ /* Set up the viewport so that it has the same size as the stage,
_clutter_stage_get_viewport (CLUTTER_STAGE (priv->stage), * but offset it so that the actor of interest lands on our
&old_viewport[0], * framebuffer. */
&old_viewport[1], clutter_actor_get_size (priv->stage, &width, &height);
&old_viewport[2],
&old_viewport[3]);
/* Set up the viewport so that it has the same size as the stage (avoid /* Expand the viewport if the actor is partially off-stage,
* distortion), but translated to account for the FBO offset... * otherwise the actor will end up clipped to the stage viewport
*/ */
cogl_set_viewport (-priv->fbo_offset_x, xexpand = 0.f;
-priv->fbo_offset_y, if (priv->x_offset < 0.f)
stage_width, xexpand = -priv->x_offset;
stage_height); if (priv->x_offset + texture_width > width)
xexpand = MAX (xexpand, (priv->x_offset + texture_width) - width);
yexpand = 0.f;
if (priv->y_offset < 0.f)
yexpand = -priv->y_offset;
if (priv->y_offset + texture_height > height)
yexpand = MAX (yexpand, (priv->y_offset + texture_height) - height);
/* Set the viewport */
cogl_set_viewport (-(priv->x_offset + xexpand), -(priv->y_offset + yexpand),
width + (2 * xexpand), height + (2 * yexpand));
/* Copy the stage's projection matrix across to the framebuffer */ /* Copy the stage's projection matrix across to the framebuffer */
_clutter_stage_get_projection_matrix (CLUTTER_STAGE (priv->stage), _clutter_stage_get_projection_matrix (CLUTTER_STAGE (priv->stage),
&projection); &projection);
/* Now save the global position of the effect (not just of the actor). /* If we've expanded the viewport, make sure to scale the projection
* It doesn't appear anyone actually uses this yet, but get_target_rect is * matrix accordingly (as it's been initialised to work with the
* documented as returning it. So we should... * original viewport and not our expanded one).
*/ */
_clutter_util_fully_transform_vertices (&old_modelview, if (xexpand > 0.f || yexpand > 0.f)
&projection, {
old_viewport, gfloat new_width, new_height;
&local_offset,
&priv->position, new_width = width + (2 * xexpand);
1); new_height = height + (2 * yexpand);
cogl_matrix_scale (&projection,
width / new_width,
height / new_height,
1);
}
cogl_set_projection_matrix (&projection); cogl_set_projection_matrix (&projection);
@@ -369,14 +385,13 @@ clutter_offscreen_effect_paint_texture (ClutterOffscreenEffect *effect)
cogl_push_matrix (); cogl_push_matrix ();
/* The current modelview matrix is *almost* perfect already. It's only /* Now reset the modelview to put us in stage coordinates so
* missing a correction for the expanded FBO and offset rendering within... * we can drawn the result of our offscreen render as a textured
*/ * quad... */
cogl_get_modelview_matrix (&modelview);
cogl_matrix_translate (&modelview, cogl_matrix_init_identity (&modelview);
priv->fbo_offset_x, _clutter_actor_apply_modelview_transform (priv->stage, &modelview);
priv->fbo_offset_y, cogl_matrix_translate (&modelview, priv->x_offset, priv->y_offset, 0.0f);
0.0f);
cogl_set_modelview_matrix (&modelview); cogl_set_modelview_matrix (&modelview);
/* paint the target material; this is virtualized for /* paint the target material; this is virtualized for
@@ -413,11 +428,16 @@ clutter_offscreen_effect_paint (ClutterEffect *effect,
{ {
ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect);
ClutterOffscreenEffectPrivate *priv = self->priv; ClutterOffscreenEffectPrivate *priv = self->priv;
CoglMatrix matrix;
/* If we've already got a cached image and the actor hasn't been redrawn cogl_get_modelview_matrix (&matrix);
* then we can just use the cached image in the FBO.
*/ /* If we've already got a cached image for the same matrix and the
if (priv->offscreen == NULL || (flags & CLUTTER_EFFECT_PAINT_ACTOR_DIRTY)) actor hasn't been redrawn then we can just use the cached image
in the fbo */
if (priv->offscreen == NULL ||
(flags & CLUTTER_EFFECT_PAINT_ACTOR_DIRTY) ||
!cogl_matrix_equal (&matrix, &priv->last_matrix_drawn))
{ {
/* Chain up to the parent paint method which will call the pre and /* Chain up to the parent paint method which will call the pre and
post paint functions to update the image */ post paint functions to update the image */
@@ -643,8 +663,8 @@ clutter_offscreen_effect_get_target_rect (ClutterOffscreenEffect *effect,
return FALSE; return FALSE;
clutter_rect_init (rect, clutter_rect_init (rect,
priv->position.x, priv->x_offset,
priv->position.y, priv->y_offset,
cogl_texture_get_width (priv->texture), cogl_texture_get_width (priv->texture),
cogl_texture_get_height (priv->texture)); cogl_texture_get_height (priv->texture));

View File

@@ -77,7 +77,6 @@ struct _ClutterPaintNodeClass
typedef enum { typedef enum {
PAINT_OP_INVALID = 0, PAINT_OP_INVALID = 0,
PAINT_OP_TEX_RECT, PAINT_OP_TEX_RECT,
PAINT_OP_MULTITEX_RECT,
PAINT_OP_PATH, PAINT_OP_PATH,
PAINT_OP_PRIMITIVE PAINT_OP_PRIMITIVE
} PaintOpCode; } PaintOpCode;
@@ -86,8 +85,6 @@ struct _ClutterPaintOperation
{ {
PaintOpCode opcode; PaintOpCode opcode;
GArray *multitex_coords;
union { union {
float texrect[8]; float texrect[8];
@@ -97,6 +94,7 @@ struct _ClutterPaintOperation
} op; } op;
}; };
GType _clutter_root_node_get_type (void) G_GNUC_CONST;
GType _clutter_transform_node_get_type (void) G_GNUC_CONST; GType _clutter_transform_node_get_type (void) G_GNUC_CONST;
GType _clutter_dummy_node_get_type (void) G_GNUC_CONST; GType _clutter_dummy_node_get_type (void) G_GNUC_CONST;
@@ -109,9 +107,13 @@ void _clutter_paint_operation_paint_primitive (const C
void _clutter_paint_node_init_types (void); void _clutter_paint_node_init_types (void);
gpointer _clutter_paint_node_create (GType gtype); gpointer _clutter_paint_node_create (GType gtype);
ClutterPaintNode * _clutter_root_node_new (CoglFramebuffer *framebuffer,
const ClutterColor *clear_color,
CoglBufferBit clear_flags);
ClutterPaintNode * _clutter_transform_node_new (const CoglMatrix *matrix); ClutterPaintNode * _clutter_transform_node_new (const CoglMatrix *matrix);
ClutterPaintNode * _clutter_dummy_node_new (ClutterActor *actor); ClutterPaintNode * _clutter_dummy_node_new (ClutterActor *actor);
void _clutter_paint_node_paint (ClutterPaintNode *root);
void _clutter_paint_node_dump_tree (ClutterPaintNode *root); void _clutter_paint_node_dump_tree (ClutterPaintNode *root);
G_GNUC_INTERNAL G_GNUC_INTERNAL

View File

@@ -761,11 +761,6 @@ clutter_paint_operation_clear (ClutterPaintOperation *op)
case PAINT_OP_TEX_RECT: case PAINT_OP_TEX_RECT:
break; break;
case PAINT_OP_MULTITEX_RECT:
if (op->multitex_coords != NULL)
g_array_unref (op->multitex_coords);
break;
case PAINT_OP_PATH: case PAINT_OP_PATH:
if (op->op.path != NULL) if (op->op.path != NULL)
cogl_object_unref (op->op.path); cogl_object_unref (op->op.path);
@@ -799,27 +794,6 @@ clutter_paint_op_init_tex_rect (ClutterPaintOperation *op,
op->op.texrect[7] = y_2; op->op.texrect[7] = y_2;
} }
static inline void
clutter_paint_op_init_multitex_rect (ClutterPaintOperation *op,
const ClutterActorBox *rect,
const float *tex_coords,
unsigned int tex_coords_len)
{
clutter_paint_operation_clear (op);
op->opcode = PAINT_OP_MULTITEX_RECT;
op->multitex_coords = g_array_sized_new (FALSE, FALSE,
sizeof (float),
tex_coords_len);
g_array_append_vals (op->multitex_coords, tex_coords, tex_coords_len);
op->op.texrect[0] = rect->x1;
op->op.texrect[1] = rect->y1;
op->op.texrect[2] = rect->x2;
op->op.texrect[3] = rect->y2;
}
static inline void static inline void
clutter_paint_op_init_path (ClutterPaintOperation *op, clutter_paint_op_init_path (ClutterPaintOperation *op,
CoglPath *path) CoglPath *path)
@@ -907,33 +881,6 @@ clutter_paint_node_add_texture_rectangle (ClutterPaintNode *node,
g_array_append_val (node->operations, operation); g_array_append_val (node->operations, operation);
} }
/**
* clutter_paint_node_add_multitexture_rectangle:
* @node: a #ClutterPaintNode
* @rect: a #ClutterActorBox
* @text_coords: array of multitexture values
* @text_coords_len: number of items of @text_coords
*
* Adds a rectangle region to the @node, with multitexture coordinates.
*/
void
clutter_paint_node_add_multitexture_rectangle (ClutterPaintNode *node,
const ClutterActorBox *rect,
const float *text_coords,
unsigned int text_coords_len)
{
ClutterPaintOperation operation = PAINT_OP_INIT;
g_return_if_fail (CLUTTER_IS_PAINT_NODE (node));
g_return_if_fail (rect != NULL);
clutter_paint_node_maybe_init_operations (node);
clutter_paint_op_init_multitex_rect (&operation, rect, text_coords, text_coords_len);
g_array_append_val (node->operations, operation);
}
/** /**
* clutter_paint_node_add_path: (skip) * clutter_paint_node_add_path: (skip)
* @node: a #ClutterPaintNode * @node: a #ClutterPaintNode
@@ -989,15 +936,15 @@ clutter_paint_node_add_primitive (ClutterPaintNode *node,
g_array_append_val (node->operations, operation); g_array_append_val (node->operations, operation);
} }
/** /*< private >
* clutter_paint_node_paint: * _clutter_paint_node_paint:
* @node: a #ClutterPaintNode * @node: a #ClutterPaintNode
* *
* Paints the @node using the class implementation, traversing * Paints the @node using the class implementation, traversing
* its children, if any. * its children, if any.
*/ */
void void
clutter_paint_node_paint (ClutterPaintNode *node) _clutter_paint_node_paint (ClutterPaintNode *node)
{ {
ClutterPaintNodeClass *klass = CLUTTER_PAINT_NODE_GET_CLASS (node); ClutterPaintNodeClass *klass = CLUTTER_PAINT_NODE_GET_CLASS (node);
ClutterPaintNode *iter; ClutterPaintNode *iter;
@@ -1014,7 +961,7 @@ clutter_paint_node_paint (ClutterPaintNode *node)
iter != NULL; iter != NULL;
iter = iter->next_sibling) iter = iter->next_sibling)
{ {
clutter_paint_node_paint (iter); _clutter_paint_node_paint (iter);
} }
if (res) if (res)
@@ -1059,7 +1006,7 @@ clutter_paint_node_to_json (ClutterPaintNode *node)
if (node->operations != NULL) if (node->operations != NULL)
{ {
guint i, j; guint i;
for (i = 0; i < node->operations->len; i++) for (i = 0; i < node->operations->len; i++)
{ {
@@ -1084,19 +1031,6 @@ clutter_paint_node_to_json (ClutterPaintNode *node)
json_builder_end_array (builder); json_builder_end_array (builder);
break; break;
case PAINT_OP_MULTITEX_RECT:
json_builder_set_member_name (builder, "texrect");
json_builder_begin_array (builder);
for (j = 0; i < op->multitex_coords->len; j++)
{
float coord = g_array_index (op->multitex_coords, float, j);
json_builder_add_double_value (builder, coord);
}
json_builder_end_array (builder);
break;
case PAINT_OP_PATH: case PAINT_OP_PATH:
json_builder_set_member_name (builder, "path"); json_builder_set_member_name (builder, "path");
json_builder_add_int_value (builder, (gint64) op->op.path); json_builder_add_int_value (builder, (gint64) op->op.path);

View File

@@ -49,9 +49,6 @@ ClutterPaintNode * clutter_paint_node_ref (Clutter
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_paint_node_unref (ClutterPaintNode *node); void clutter_paint_node_unref (ClutterPaintNode *node);
CLUTTER_EXPORT
void clutter_paint_node_paint (ClutterPaintNode *node);
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_paint_node_set_name (ClutterPaintNode *node, void clutter_paint_node_set_name (ClutterPaintNode *node,
const char *name); const char *name);
@@ -70,12 +67,6 @@ void clutter_paint_node_add_texture_rectangle (Clutter
float x_2, float x_2,
float y_2); float y_2);
CLUTTER_EXPORT
void clutter_paint_node_add_multitexture_rectangle (ClutterPaintNode *node,
const ClutterActorBox *rect,
const float *text_coords,
unsigned int text_coords_len);
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_paint_node_add_path (ClutterPaintNode *node, void clutter_paint_node_add_path (ClutterPaintNode *node,
CoglPath *path); CoglPath *path);

View File

@@ -83,13 +83,16 @@ _clutter_paint_node_init_types (void)
} }
/* /*
* Root node * Root node, private
* *
* any frame can only have a since RootNode instance for each * any frame can only have a since RootNode instance for each
* top-level actor. * top-level actor.
*/ */
#define clutter_root_node_get_type clutter_root_node_get_type #define clutter_root_node_get_type _clutter_root_node_get_type
typedef struct _ClutterRootNode ClutterRootNode;
typedef struct _ClutterPaintNodeClass ClutterRootNodeClass;
struct _ClutterRootNode struct _ClutterRootNode
{ {
@@ -108,8 +111,6 @@ clutter_root_node_pre_draw (ClutterPaintNode *node)
{ {
ClutterRootNode *rnode = (ClutterRootNode *) node; ClutterRootNode *rnode = (ClutterRootNode *) node;
cogl_push_framebuffer (rnode->framebuffer);
cogl_framebuffer_clear (rnode->framebuffer, cogl_framebuffer_clear (rnode->framebuffer,
rnode->clear_flags, rnode->clear_flags,
&rnode->clear_color); &rnode->clear_color);
@@ -120,7 +121,6 @@ clutter_root_node_pre_draw (ClutterPaintNode *node)
static void static void
clutter_root_node_post_draw (ClutterPaintNode *node) clutter_root_node_post_draw (ClutterPaintNode *node)
{ {
cogl_pop_framebuffer ();
} }
static void static void
@@ -158,13 +158,13 @@ clutter_root_node_init (ClutterRootNode *self)
} }
ClutterPaintNode * ClutterPaintNode *
clutter_root_node_new (CoglFramebuffer *framebuffer, _clutter_root_node_new (CoglFramebuffer *framebuffer,
const ClutterColor *clear_color, const ClutterColor *clear_color,
CoglBufferBit clear_flags) CoglBufferBit clear_flags)
{ {
ClutterRootNode *res; ClutterRootNode *res;
res = _clutter_paint_node_create (CLUTTER_TYPE_ROOT_NODE); res = _clutter_paint_node_create (_clutter_root_node_get_type ());
cogl_color_init_from_4ub (&res->clear_color, cogl_color_init_from_4ub (&res->clear_color,
clear_color->red, clear_color->red,
@@ -431,17 +431,6 @@ clutter_pipeline_node_draw (ClutterPaintNode *node)
op->op.texrect[7]); op->op.texrect[7]);
break; break;
case PAINT_OP_MULTITEX_RECT:
cogl_framebuffer_draw_multitextured_rectangle (cogl_get_draw_framebuffer (),
pnode->pipeline,
op->op.texrect[0],
op->op.texrect[1],
op->op.texrect[2],
op->op.texrect[3],
(float*) op->multitex_coords->data,
op->multitex_coords->len);
break;
case PAINT_OP_PATH: case PAINT_OP_PATH:
cogl_path_fill (op->op.path); cogl_path_fill (op->op.path);
break; break;
@@ -838,7 +827,6 @@ clutter_text_node_draw (ClutterPaintNode *node)
cogl_framebuffer_pop_clip (fb); cogl_framebuffer_pop_clip (fb);
break; break;
case PAINT_OP_MULTITEX_RECT:
case PAINT_OP_PATH: case PAINT_OP_PATH:
case PAINT_OP_PRIMITIVE: case PAINT_OP_PRIMITIVE:
case PAINT_OP_INVALID: case PAINT_OP_INVALID:
@@ -1004,7 +992,6 @@ clutter_clip_node_pre_draw (ClutterPaintNode *node)
retval = TRUE; retval = TRUE;
break; break;
case PAINT_OP_MULTITEX_RECT:
case PAINT_OP_PRIMITIVE: case PAINT_OP_PRIMITIVE:
case PAINT_OP_INVALID: case PAINT_OP_INVALID:
break; break;
@@ -1038,7 +1025,6 @@ clutter_clip_node_post_draw (ClutterPaintNode *node)
cogl_framebuffer_pop_clip (fb); cogl_framebuffer_pop_clip (fb);
break; break;
case PAINT_OP_MULTITEX_RECT:
case PAINT_OP_PRIMITIVE: case PAINT_OP_PRIMITIVE:
case PAINT_OP_INVALID: case PAINT_OP_INVALID:
break; break;
@@ -1194,17 +1180,6 @@ clutter_layer_node_post_draw (ClutterPaintNode *node)
cogl_pop_source (); cogl_pop_source ();
break; break;
case PAINT_OP_MULTITEX_RECT:
cogl_framebuffer_draw_multitextured_rectangle (cogl_get_draw_framebuffer (),
lnode->state,
op->op.texrect[0],
op->op.texrect[1],
op->op.texrect[2],
op->op.texrect[3],
(float*) op->multitex_coords->data,
op->multitex_coords->len);
break;
case PAINT_OP_PATH: case PAINT_OP_PATH:
cogl_push_source (lnode->state); cogl_push_source (lnode->state);
cogl_path_fill (op->op.path); cogl_path_fill (op->op.path);

View File

@@ -143,26 +143,6 @@ CLUTTER_EXPORT
ClutterPaintNode * clutter_text_node_new (PangoLayout *layout, ClutterPaintNode * clutter_text_node_new (PangoLayout *layout,
const ClutterColor *color); const ClutterColor *color);
#define CLUTTER_TYPE_ROOT_NODE (clutter_root_node_get_type ())
#define CLUTTER_ROOT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ROOT_NODE, ClutterRootNode))
#define CLUTTER_IS_ROOT_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ROOT_NODE))
/**
* ClutterRootNode:
*
* The #ClutterRootNode structure is an opaque
* type whose members cannot be directly accessed.
*/
typedef struct _ClutterRootNode ClutterRootNode;
typedef struct _ClutterPaintNodeClass ClutterRootNodeClass;
CLUTTER_EXPORT
GType clutter_root_node_get_type (void) G_GNUC_CONST;
CLUTTER_EXPORT
ClutterPaintNode * clutter_root_node_new (CoglFramebuffer *framebuffer,
const ClutterColor *clear_color,
CoglBufferBit clear_flags);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_PAINT_NODES_H__ */ #endif /* __CLUTTER_PAINT_NODES_H__ */

View File

@@ -35,7 +35,6 @@
#include "clutter-paint-volume-private.h" #include "clutter-paint-volume-private.h"
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-stage-private.h" #include "clutter-stage-private.h"
#include "clutter-actor-box-private.h"
G_DEFINE_BOXED_TYPE (ClutterPaintVolume, clutter_paint_volume, G_DEFINE_BOXED_TYPE (ClutterPaintVolume, clutter_paint_volume,
clutter_paint_volume_copy, clutter_paint_volume_copy,
@@ -1139,6 +1138,8 @@ _clutter_paint_volume_get_stage_paint_box (ClutterPaintVolume *pv,
CoglMatrix modelview; CoglMatrix modelview;
CoglMatrix projection; CoglMatrix projection;
float viewport[4]; float viewport[4];
float width;
float height;
_clutter_paint_volume_copy_static (pv, &projected_pv); _clutter_paint_volume_copy_static (pv, &projected_pv);
@@ -1178,7 +1179,50 @@ _clutter_paint_volume_get_stage_paint_box (ClutterPaintVolume *pv,
return; return;
} }
_clutter_actor_box_enlarge_for_effects (box); /* The aim here is that for a given rectangle defined with floating point
* coordinates we want to determine a stable quantized size in pixels
* that doesn't vary due to the original box's sub-pixel position.
*
* The reason this is important is because effects will use this
* API to determine the size of offscreen framebuffers and so for
* a fixed-size object that may be animated accross the screen we
* want to make sure that the stage paint-box has an equally stable
* size so that effects aren't made to continuously re-allocate
* a corresponding fbo.
*
* The other thing we consider is that the calculation of this box is
* subject to floating point precision issues that might be slightly
* different to the precision issues involved with actually painting the
* actor, which might result in painting slightly leaking outside the
* user's calculated paint-volume. For this we simply aim to pad out the
* paint-volume by at least half a pixel all the way around.
*/
width = box->x2 - box->x1;
height = box->y2 - box->y1;
width = CLUTTER_NEARBYINT (width);
height = CLUTTER_NEARBYINT (height);
/* XXX: NB the width/height may now be up to 0.5px too small so we
* must also pad by 0.25px all around to account for this. In total we
* must padd by at least 0.75px around all sides. */
/* XXX: The furthest that we can overshoot the bottom right corner by
* here is 1.75px in total if you consider that the 0.75 padding could
* just cross an integer boundary and so ceil will effectively add 1.
*/
box->x2 = ceilf (box->x2 + 0.75);
box->y2 = ceilf (box->y2 + 0.75);
/* Now we redefine the top-left relative to the bottom right based on the
* rounded width/height determined above + a constant so that the overall
* size of the box will be stable and not dependant on the box's
* position.
*
* Adding 3px to the width/height will ensure we cover the maximum of
* 1.75px padding on the bottom/right and still ensure we have > 0.75px
* padding on the top/left.
*/
box->x1 = box->x2 - width - 3;
box->y1 = box->y2 - height - 3;
clutter_paint_volume_free (&projected_pv); clutter_paint_volume_free (&projected_pv);
} }

View File

@@ -961,7 +961,6 @@ clutter_pan_action_get_motion_delta (ClutterPanAction *self,
return clutter_pan_action_get_interpolated_delta (self, delta_x, delta_y); return clutter_pan_action_get_interpolated_delta (self, delta_x, delta_y);
default: default:
g_assert_not_reached (); g_assert_not_reached ();
return 0.0f;
} }
} }

View File

@@ -202,7 +202,7 @@ gboolean _clutter_feature_init (GError **error);
/* Diagnostic mode */ /* Diagnostic mode */
gboolean _clutter_diagnostic_enabled (void); gboolean _clutter_diagnostic_enabled (void);
void _clutter_diagnostic_message (const char *fmt, ...) G_GNUC_PRINTF (1, 2); void _clutter_diagnostic_message (const char *fmt, ...);
/* Picking code */ /* Picking code */
guint _clutter_pixel_to_id (guchar pixel[4]); guint _clutter_pixel_to_id (guchar pixel[4]);

View File

@@ -333,7 +333,6 @@ clutter_shader_effect_create_shader (ClutterShaderEffect *self)
default: default:
g_assert_not_reached (); g_assert_not_reached ();
return COGL_INVALID_HANDLE;
} }
} }

View File

@@ -1474,8 +1474,8 @@ _clutter_stage_do_pick_on_view (ClutterStage *stage,
if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))) if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
{ {
CLUTTER_NOTE (PICK, "Pushing pick scissor clip x: %d, y: %d, 1x1", CLUTTER_NOTE (PICK, "Pushing pick scissor clip x: %d, y: %d, 1x1",
(int) (dirty_x * fb_scale), (int) dirty_x * fb_scale,
(int) (dirty_y * fb_scale)); (int) dirty_y * fb_scale);
cogl_framebuffer_push_scissor_clip (fb, dirty_x * fb_scale, dirty_y * fb_scale, 1, 1); cogl_framebuffer_push_scissor_clip (fb, dirty_x * fb_scale, dirty_y * fb_scale, 1, 1);
} }
@@ -1495,7 +1495,7 @@ _clutter_stage_do_pick_on_view (ClutterStage *stage,
read_x = dirty_x * fb_scale; read_x = dirty_x * fb_scale;
read_y = dirty_y * fb_scale; read_y = dirty_y * fb_scale;
CLUTTER_NOTE (PICK, "Performing pick at %i,%i on view %dx%d+%d+%d s: %f", CLUTTER_NOTE (PICK, "Performing pick at %i,%i on view %dx%d+%d+%d s: %d",
x, y, x, y,
view_layout.width, view_layout.height, view_layout.width, view_layout.height,
view_layout.x, view_layout.y, fb_scale); view_layout.x, view_layout.y, fb_scale);

View File

@@ -76,7 +76,6 @@
#include "clutter-input-focus.h" #include "clutter-input-focus.h"
#include "clutter-interval.h" #include "clutter-interval.h"
#include "clutter-keyframe-transition.h" #include "clutter-keyframe-transition.h"
#include "clutter-keymap.h"
#include "clutter-keysyms.h" #include "clutter-keysyms.h"
#include "clutter-layout-manager.h" #include "clutter-layout-manager.h"
#include "clutter-layout-meta.h" #include "clutter-layout-meta.h"

View File

@@ -44,7 +44,6 @@
#include "clutter-device-manager-private.h" #include "clutter-device-manager-private.h"
#include "clutter-event-private.h" #include "clutter-event-private.h"
#include "clutter-input-device-evdev.h" #include "clutter-input-device-evdev.h"
#include "clutter-keymap-evdev.h"
#include "clutter-seat-evdev.h" #include "clutter-seat-evdev.h"
#include "clutter-virtual-input-device-evdev.h" #include "clutter-virtual-input-device-evdev.h"
#include "clutter-main.h" #include "clutter-main.h"
@@ -92,6 +91,7 @@ struct _ClutterDeviceManagerEvdevPrivate
GSList *seats; GSList *seats;
ClutterSeatEvdev *main_seat; ClutterSeatEvdev *main_seat;
struct xkb_keymap *keymap;
ClutterPointerConstrainCallback constrain_callback; ClutterPointerConstrainCallback constrain_callback;
gpointer constrain_data; gpointer constrain_data;
@@ -147,6 +147,10 @@ static const char *device_type_str[] = {
* appear and disappear from the system. * appear and disappear from the system.
*/ */
static const char *option_xkb_layout = "us";
static const char *option_xkb_variant = "";
static const char *option_xkb_options = "";
static void static void
clutter_device_manager_evdev_copy_event_data (ClutterEventExtender *event_extender, clutter_device_manager_evdev_copy_event_data (ClutterEventExtender *event_extender,
const ClutterEvent *src, const ClutterEvent *src,
@@ -1929,6 +1933,8 @@ clutter_device_manager_evdev_constructed (GObject *gobject)
ClutterDeviceManagerEvdevPrivate *priv; ClutterDeviceManagerEvdevPrivate *priv;
ClutterEventSource *source; ClutterEventSource *source;
struct udev *udev; struct udev *udev;
struct xkb_context *ctx;
struct xkb_rule_names names;
udev = udev_new (); udev = udev_new ();
if (G_UNLIKELY (udev == NULL)) if (G_UNLIKELY (udev == NULL))
@@ -1960,6 +1966,17 @@ clutter_device_manager_evdev_constructed (GObject *gobject)
udev_unref (udev); udev_unref (udev);
names.rules = "evdev";
names.model = "pc105";
names.layout = option_xkb_layout;
names.variant = option_xkb_variant;
names.options = option_xkb_options;
ctx = xkb_context_new (0);
g_assert (ctx);
priv->keymap = xkb_keymap_new_from_names (ctx, &names, 0);
xkb_context_unref (ctx);
priv->main_seat = clutter_seat_evdev_new (manager_evdev); priv->main_seat = clutter_seat_evdev_new (manager_evdev);
priv->seats = g_slist_append (priv->seats, priv->main_seat); priv->seats = g_slist_append (priv->seats, priv->main_seat);
@@ -2013,6 +2030,9 @@ clutter_device_manager_evdev_finalize (GObject *object)
g_slist_free_full (priv->seats, (GDestroyNotify) clutter_seat_evdev_free); g_slist_free_full (priv->seats, (GDestroyNotify) clutter_seat_evdev_free);
g_slist_free (priv->devices); g_slist_free (priv->devices);
if (priv->keymap)
xkb_keymap_unref (priv->keymap);
if (priv->event_source != NULL) if (priv->event_source != NULL)
clutter_event_source_free (priv->event_source); clutter_event_source_free (priv->event_source);
@@ -2136,7 +2156,6 @@ _clutter_events_evdev_init (ClutterBackend *backend)
{ {
CLUTTER_NOTE (EVENT, "Initializing evdev backend"); CLUTTER_NOTE (EVENT, "Initializing evdev backend");
backend->keymap = g_object_new (CLUTTER_TYPE_KEYMAP_EVDEV, NULL);
backend->device_manager = g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_EVDEV, backend->device_manager = g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_EVDEV,
"backend", backend, "backend", backend,
NULL); NULL);
@@ -2199,6 +2218,14 @@ _clutter_device_manager_evdev_release_device_id (ClutterDeviceManagerEvdev *mana
compare_ids); compare_ids);
} }
struct xkb_keymap *
_clutter_device_manager_evdev_get_keymap (ClutterDeviceManagerEvdev *manager_evdev)
{
ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
return priv->keymap;
}
ClutterStage * ClutterStage *
_clutter_device_manager_evdev_get_stage (ClutterDeviceManagerEvdev *manager_evdev) _clutter_device_manager_evdev_get_stage (ClutterDeviceManagerEvdev *manager_evdev)
{ {
@@ -2261,11 +2288,6 @@ clutter_evdev_update_xkb_state (ClutterDeviceManagerEvdev *manager_evdev)
ClutterSeatEvdev *seat; ClutterSeatEvdev *seat;
xkb_mod_mask_t latched_mods; xkb_mod_mask_t latched_mods;
xkb_mod_mask_t locked_mods; xkb_mod_mask_t locked_mods;
struct xkb_keymap *xkb_keymap;
ClutterKeymap *keymap;
keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
xkb_keymap = clutter_keymap_evdev_get_keyboard_map (CLUTTER_KEYMAP_EVDEV (keymap));
priv = manager_evdev->priv; priv = manager_evdev->priv;
@@ -2278,7 +2300,7 @@ clutter_evdev_update_xkb_state (ClutterDeviceManagerEvdev *manager_evdev)
locked_mods = xkb_state_serialize_mods (seat->xkb, locked_mods = xkb_state_serialize_mods (seat->xkb,
XKB_STATE_MODS_LOCKED); XKB_STATE_MODS_LOCKED);
xkb_state_unref (seat->xkb); xkb_state_unref (seat->xkb);
seat->xkb = xkb_state_new (xkb_keymap); seat->xkb = xkb_state_new (priv->keymap);
xkb_state_update_mask (seat->xkb, xkb_state_update_mask (seat->xkb,
0, /* depressed */ 0, /* depressed */
@@ -2286,9 +2308,9 @@ clutter_evdev_update_xkb_state (ClutterDeviceManagerEvdev *manager_evdev)
locked_mods, locked_mods,
0, 0, seat->layout_idx); 0, 0, seat->layout_idx);
seat->caps_lock_led = xkb_keymap_led_get_index (xkb_keymap, XKB_LED_NAME_CAPS); seat->caps_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_CAPS);
seat->num_lock_led = xkb_keymap_led_get_index (xkb_keymap, XKB_LED_NAME_NUM); seat->num_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_NUM);
seat->scroll_lock_led = xkb_keymap_led_get_index (xkb_keymap, XKB_LED_NAME_SCROLL); seat->scroll_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_SCROLL);
clutter_seat_evdev_sync_leds (seat); clutter_seat_evdev_sync_leds (seat);
} }
@@ -2373,18 +2395,20 @@ clutter_evdev_set_device_callbacks (ClutterOpenDeviceCallback open_callback,
*/ */
void void
clutter_evdev_set_keyboard_map (ClutterDeviceManager *evdev, clutter_evdev_set_keyboard_map (ClutterDeviceManager *evdev,
struct xkb_keymap *xkb_keymap) struct xkb_keymap *keymap)
{ {
ClutterDeviceManagerEvdev *manager_evdev; ClutterDeviceManagerEvdev *manager_evdev;
ClutterKeymap *keymap; ClutterDeviceManagerEvdevPrivate *priv;
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev)); g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
clutter_keymap_evdev_set_keyboard_map (CLUTTER_KEYMAP_EVDEV (keymap),
xkb_keymap);
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev); manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
priv = manager_evdev->priv;
if (priv->keymap)
xkb_keymap_unref (priv->keymap);
priv->keymap = xkb_keymap_ref (keymap);
clutter_evdev_update_xkb_state (manager_evdev); clutter_evdev_update_xkb_state (manager_evdev);
} }
@@ -2479,18 +2503,12 @@ clutter_evdev_set_keyboard_numlock (ClutterDeviceManager *evdev,
ClutterDeviceManagerEvdevPrivate *priv; ClutterDeviceManagerEvdevPrivate *priv;
GSList *iter; GSList *iter;
xkb_mod_mask_t numlock; xkb_mod_mask_t numlock;
struct xkb_keymap *xkb_keymap;
ClutterKeymap *keymap;
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev)); g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev); manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
priv = manager_evdev->priv; priv = manager_evdev->priv;
numlock = (1 << xkb_keymap_mod_get_index(priv->keymap, "Mod2"));
keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
xkb_keymap = clutter_keymap_evdev_get_keyboard_map (CLUTTER_KEYMAP_EVDEV (keymap));
numlock = (1 << xkb_keymap_mod_get_index (xkb_keymap, "Mod2"));
for (iter = priv->seats; iter; iter = iter->next) for (iter = priv->seats; iter; iter = iter->next)
{ {
@@ -2741,9 +2759,3 @@ clutter_evdev_set_seat_id (const gchar *seat_id)
g_free (evdev_seat_id); g_free (evdev_seat_id);
evdev_seat_id = g_strdup (seat_id); evdev_seat_id = g_strdup (seat_id);
} }
struct xkb_state *
_clutter_device_manager_evdev_get_xkb_state (ClutterDeviceManagerEvdev *manager_evdev)
{
return manager_evdev->priv->main_seat->xkb;
}

View File

@@ -64,6 +64,8 @@ gint _clutter_device_manager_evdev_acquire_device_id (ClutterDeviceManagerEvdev
void _clutter_device_manager_evdev_release_device_id (ClutterDeviceManagerEvdev *manager_evdev, void _clutter_device_manager_evdev_release_device_id (ClutterDeviceManagerEvdev *manager_evdev,
ClutterInputDevice *device); ClutterInputDevice *device);
struct xkb_keymap * _clutter_device_manager_evdev_get_keymap (ClutterDeviceManagerEvdev *manager_evdev);
ClutterStage * _clutter_device_manager_evdev_get_stage (ClutterDeviceManagerEvdev *manager_evdev); ClutterStage * _clutter_device_manager_evdev_get_stage (ClutterDeviceManagerEvdev *manager_evdev);
void _clutter_device_manager_evdev_constrain_pointer (ClutterDeviceManagerEvdev *manager_evdev, void _clutter_device_manager_evdev_constrain_pointer (ClutterDeviceManagerEvdev *manager_evdev,
@@ -83,8 +85,6 @@ void _clutter_device_manager_evdev_filter_relative_motion (ClutterDeviceManagerE
void _clutter_device_manager_evdev_dispatch (ClutterDeviceManagerEvdev *manager_evdev); void _clutter_device_manager_evdev_dispatch (ClutterDeviceManagerEvdev *manager_evdev);
struct xkb_state * _clutter_device_manager_evdev_get_xkb_state (ClutterDeviceManagerEvdev *manager_evdev);
static inline guint64 static inline guint64
us (guint64 us) us (guint64 us)
{ {

View File

@@ -1,128 +0,0 @@
/*
* Copyright (C) 2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#include "clutter-build-config.h"
#include "clutter-device-manager-evdev.h"
#include "clutter-keymap-evdev.h"
static const char *option_xkb_layout = "us";
static const char *option_xkb_variant = "";
static const char *option_xkb_options = "";
typedef struct _ClutterKeymapEvdev ClutterKeymapEvdev;
struct _ClutterKeymapEvdev
{
ClutterKeymap parent_instance;
struct xkb_keymap *keymap;
};
G_DEFINE_TYPE (ClutterKeymapEvdev, clutter_keymap_evdev,
CLUTTER_TYPE_KEYMAP)
static void
clutter_keymap_evdev_finalize (GObject *object)
{
ClutterKeymapEvdev *keymap = CLUTTER_KEYMAP_EVDEV (object);
xkb_keymap_unref (keymap->keymap);
G_OBJECT_CLASS (clutter_keymap_evdev_parent_class)->finalize (object);
}
static gboolean
clutter_keymap_evdev_get_num_lock_state (ClutterKeymap *keymap)
{
ClutterDeviceManagerEvdev *device_manager;
struct xkb_state *xkb_state;
device_manager =
CLUTTER_DEVICE_MANAGER_EVDEV (clutter_device_manager_get_default ());
xkb_state = _clutter_device_manager_evdev_get_xkb_state (device_manager);
return xkb_state_mod_name_is_active (xkb_state,
XKB_MOD_NAME_NUM,
XKB_STATE_MODS_LATCHED ||
XKB_STATE_MODS_LOCKED);
}
static gboolean
clutter_keymap_evdev_get_caps_lock_state (ClutterKeymap *keymap)
{
ClutterDeviceManagerEvdev *device_manager;
struct xkb_state *xkb_state;
device_manager =
CLUTTER_DEVICE_MANAGER_EVDEV (clutter_device_manager_get_default ());
xkb_state = _clutter_device_manager_evdev_get_xkb_state (device_manager);
return xkb_state_mod_name_is_active (xkb_state,
XKB_MOD_NAME_CAPS,
XKB_STATE_MODS_LATCHED ||
XKB_STATE_MODS_LOCKED);
}
static void
clutter_keymap_evdev_class_init (ClutterKeymapEvdevClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterKeymapClass *keymap_class = CLUTTER_KEYMAP_CLASS (klass);
object_class->finalize = clutter_keymap_evdev_finalize;
keymap_class->get_num_lock_state = clutter_keymap_evdev_get_num_lock_state;
keymap_class->get_caps_lock_state = clutter_keymap_evdev_get_caps_lock_state;
}
static void
clutter_keymap_evdev_init (ClutterKeymapEvdev *keymap)
{
struct xkb_context *ctx;
struct xkb_rule_names names;
names.rules = "evdev";
names.model = "pc105";
names.layout = option_xkb_layout;
names.variant = option_xkb_variant;
names.options = option_xkb_options;
ctx = xkb_context_new (0);
g_assert (ctx);
keymap->keymap = xkb_keymap_new_from_names (ctx, &names, 0);
xkb_context_unref (ctx);
}
void
clutter_keymap_evdev_set_keyboard_map (ClutterKeymapEvdev *keymap,
struct xkb_keymap *xkb_keymap)
{
if (keymap->keymap)
xkb_keymap_unref (keymap->keymap);
keymap->keymap = xkb_keymap_ref (xkb_keymap);
}
struct xkb_keymap *
clutter_keymap_evdev_get_keyboard_map (ClutterKeymapEvdev *keymap)
{
return keymap->keymap;
}

View File

@@ -1,32 +0,0 @@
/*
* Copyright (C) 2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#include "clutter-xkb-utils.h"
#include "clutter-keymap.h"
#define CLUTTER_TYPE_KEYMAP_EVDEV (clutter_keymap_evdev_get_type ())
G_DECLARE_FINAL_TYPE (ClutterKeymapEvdev, clutter_keymap_evdev,
CLUTTER, KEYMAP_EVDEV,
ClutterKeymap)
void clutter_keymap_evdev_set_keyboard_map (ClutterKeymapEvdev *keymap,
struct xkb_keymap *xkb_keymap);
struct xkb_keymap * clutter_keymap_evdev_get_keyboard_map (ClutterKeymapEvdev *keymap);

View File

@@ -34,7 +34,6 @@
#include "clutter-event-private.h" #include "clutter-event-private.h"
#include "clutter-input-device-evdev.h" #include "clutter-input-device-evdev.h"
#include "clutter-input-device-tool-evdev.h" #include "clutter-input-device-tool-evdev.h"
#include "clutter-keymap-evdev.h"
#include "clutter-main.h" #include "clutter-main.h"
/* Try to keep the pointer inside the stage. Hopefully no one is using /* Try to keep the pointer inside the stage. Hopefully no one is using
@@ -153,8 +152,7 @@ clutter_seat_evdev_new (ClutterDeviceManagerEvdev *manager_evdev)
ClutterSeatEvdev *seat; ClutterSeatEvdev *seat;
ClutterInputDevice *device; ClutterInputDevice *device;
ClutterStage *stage; ClutterStage *stage;
ClutterKeymap *keymap; struct xkb_keymap *keymap;
struct xkb_keymap *xkb_keymap;
seat = g_new0 (ClutterSeatEvdev, 1); seat = g_new0 (ClutterSeatEvdev, 1);
if (!seat) if (!seat)
@@ -185,19 +183,17 @@ clutter_seat_evdev_new (ClutterDeviceManagerEvdev *manager_evdev)
seat->repeat_delay = 250; /* ms */ seat->repeat_delay = 250; /* ms */
seat->repeat_interval = 33; /* ms */ seat->repeat_interval = 33; /* ms */
keymap = clutter_backend_get_keymap (clutter_get_default_backend ()); keymap = _clutter_device_manager_evdev_get_keymap (manager_evdev);
xkb_keymap = clutter_keymap_evdev_get_keyboard_map (CLUTTER_KEYMAP_EVDEV (keymap)); if (keymap)
if (xkb_keymap)
{ {
seat->xkb = xkb_state_new (xkb_keymap); seat->xkb = xkb_state_new (keymap);
seat->caps_lock_led = seat->caps_lock_led =
xkb_keymap_led_get_index (xkb_keymap, XKB_LED_NAME_CAPS); xkb_keymap_led_get_index (keymap, XKB_LED_NAME_CAPS);
seat->num_lock_led = seat->num_lock_led =
xkb_keymap_led_get_index (xkb_keymap, XKB_LED_NAME_NUM); xkb_keymap_led_get_index (keymap, XKB_LED_NAME_NUM);
seat->scroll_lock_led = seat->scroll_lock_led =
xkb_keymap_led_get_index (xkb_keymap, XKB_LED_NAME_SCROLL); xkb_keymap_led_get_index (keymap, XKB_LED_NAME_SCROLL);
} }
return seat; return seat;
@@ -320,13 +316,7 @@ clutter_seat_evdev_notify_key (ClutterSeatEvdev *seat,
queue_event (event); queue_event (event);
if (update_keys && (changed_state & XKB_STATE_LEDS)) if (update_keys && (changed_state & XKB_STATE_LEDS))
{ clutter_seat_evdev_sync_leds (seat);
ClutterBackend *backend;
backend = clutter_get_default_backend ();
g_signal_emit_by_name (clutter_backend_get_keymap (backend), "state-changed");
clutter_seat_evdev_sync_leds (seat);
}
if (state == 0 || /* key release */ if (state == 0 || /* key release */
!seat->repeat || !seat->repeat ||
@@ -776,7 +766,6 @@ discrete_to_direction (double discrete_dx,
return CLUTTER_SCROLL_UP; return CLUTTER_SCROLL_UP;
else else
g_assert_not_reached (); g_assert_not_reached ();
return 0;
} }
void void

View File

@@ -29,7 +29,6 @@
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-virtual-input-device.h" #include "clutter-virtual-input-device.h"
#include "evdev/clutter-input-device-evdev.h" #include "evdev/clutter-input-device-evdev.h"
#include "evdev/clutter-keymap-evdev.h"
#include "evdev/clutter-seat-evdev.h" #include "evdev/clutter-seat-evdev.h"
#include "evdev/clutter-virtual-input-device-evdev.h" #include "evdev/clutter-virtual-input-device-evdev.h"
@@ -287,14 +286,14 @@ pick_keycode_for_keyval_in_current_group (ClutterVirtualInputDevice *virtual_dev
{ {
ClutterVirtualInputDeviceEvdev *virtual_evdev = ClutterVirtualInputDeviceEvdev *virtual_evdev =
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
ClutterKeymap *keymap; ClutterDeviceManager *manager;
struct xkb_keymap *xkb_keymap; struct xkb_keymap *xkb_keymap;
struct xkb_state *state; struct xkb_state *state;
guint keycode, layout; guint keycode, layout;
xkb_keycode_t min_keycode, max_keycode; xkb_keycode_t min_keycode, max_keycode;
keymap = clutter_backend_get_keymap (clutter_get_default_backend ()); manager = clutter_virtual_input_device_get_manager (virtual_device);
xkb_keymap = clutter_keymap_evdev_get_keyboard_map (CLUTTER_KEYMAP_EVDEV (keymap)); xkb_keymap = _clutter_device_manager_evdev_get_keymap (CLUTTER_DEVICE_MANAGER_EVDEV (manager));
state = virtual_evdev->seat->xkb; state = virtual_evdev->seat->xkb;
layout = xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE); layout = xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE);

View File

@@ -48,7 +48,6 @@ clutter_headers = [
'clutter-input-method.h', 'clutter-input-method.h',
'clutter-interval.h', 'clutter-interval.h',
'clutter-keyframe-transition.h', 'clutter-keyframe-transition.h',
'clutter-keymap.h',
'clutter-keysyms.h', 'clutter-keysyms.h',
'clutter-layout-manager.h', 'clutter-layout-manager.h',
'clutter-layout-meta.h', 'clutter-layout-meta.h',
@@ -135,7 +134,6 @@ clutter_sources = [
'clutter-virtual-input-device.c', 'clutter-virtual-input-device.c',
'clutter-interval.c', 'clutter-interval.c',
'clutter-keyframe-transition.c', 'clutter-keyframe-transition.c',
'clutter-keymap.c',
'clutter-keysyms-table.c', 'clutter-keysyms-table.c',
'clutter-layout-manager.c', 'clutter-layout-manager.c',
'clutter-layout-meta.c', 'clutter-layout-meta.c',
@@ -358,7 +356,6 @@ if have_native_backend
'evdev/clutter-event-evdev.c', 'evdev/clutter-event-evdev.c',
'evdev/clutter-input-device-evdev.c', 'evdev/clutter-input-device-evdev.c',
'evdev/clutter-input-device-tool-evdev.c', 'evdev/clutter-input-device-tool-evdev.c',
'evdev/clutter-keymap-evdev.c',
'evdev/clutter-seat-evdev.c', 'evdev/clutter-seat-evdev.c',
'evdev/clutter-virtual-input-device-evdev.c', 'evdev/clutter-virtual-input-device-evdev.c',
'evdev/clutter-xkb-utils.c', 'evdev/clutter-xkb-utils.c',
@@ -370,7 +367,6 @@ if have_native_backend
'evdev/clutter-device-manager-evdev.h', 'evdev/clutter-device-manager-evdev.h',
'evdev/clutter-input-device-evdev.h', 'evdev/clutter-input-device-evdev.h',
'evdev/clutter-input-device-tool-evdev.h', 'evdev/clutter-input-device-tool-evdev.h',
'evdev/clutter-keymap-evdev.h',
'evdev/clutter-seat-evdev.h', 'evdev/clutter-seat-evdev.h',
'evdev/clutter-virtual-input-device-evdev.h', 'evdev/clutter-virtual-input-device-evdev.h',
'evdev/clutter-xkb-utils.h', 'evdev/clutter-xkb-utils.h',
@@ -495,7 +491,7 @@ clutter_marshal = gnome.genmarshal('clutter-marshal',
prefix: '_clutter_marshal', prefix: '_clutter_marshal',
sources: 'clutter-marshal.list', sources: 'clutter-marshal.list',
valist_marshallers: true, valist_marshallers: true,
extra_args: ['--quiet'], extra_args: ['--prototypes', '--quiet'],
install_dir: clutter_clutter_includedir, install_dir: clutter_clutter_includedir,
install_header: true, install_header: true,
) )
@@ -523,12 +519,10 @@ libmutter_clutter = shared_library(libmutter_clutter_name,
cally_headers, cally_headers,
cally_private_headers, cally_private_headers,
], ],
version: '0.0.0', soversion: '0.0.0',
soversion: 0,
c_args: clutter_c_args, c_args: clutter_c_args,
include_directories: clutter_includes, include_directories: clutter_includes,
dependencies: [clutter_deps], dependencies: [clutter_deps],
gnu_symbol_visibility: 'hidden',
link_with: [ link_with: [
libmutter_cogl, libmutter_cogl,
libmutter_cogl_pango, libmutter_cogl_pango,

View File

@@ -807,14 +807,6 @@ clutter_backend_x11_get_keymap_direction (ClutterBackend *backend)
return _clutter_keymap_x11_get_direction (backend_x11->keymap); return _clutter_keymap_x11_get_direction (backend_x11->keymap);
} }
static ClutterKeymap *
clutter_backend_x11_get_keymap (ClutterBackend *backend)
{
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (backend);
return CLUTTER_KEYMAP (backend_x11->keymap);
}
static void static void
clutter_backend_x11_class_init (ClutterBackendX11Class *klass) clutter_backend_x11_class_init (ClutterBackendX11Class *klass)
{ {
@@ -837,7 +829,6 @@ clutter_backend_x11_class_init (ClutterBackendX11Class *klass)
backend_class->get_display = clutter_backend_x11_get_display; backend_class->get_display = clutter_backend_x11_get_display;
backend_class->get_keymap_direction = clutter_backend_x11_get_keymap_direction; backend_class->get_keymap_direction = clutter_backend_x11_get_keymap_direction;
backend_class->get_keymap = clutter_backend_x11_get_keymap;
} }
static void static void

View File

@@ -97,9 +97,9 @@ translate_key_event (ClutterBackendX11 *backend_x11,
_clutter_keymap_x11_get_is_modifier (backend_x11->keymap, _clutter_keymap_x11_get_is_modifier (backend_x11->keymap,
event->key.hardware_keycode); event->key.hardware_keycode);
event_x11->num_lock_set = event_x11->num_lock_set =
clutter_keymap_get_num_lock_state (CLUTTER_KEYMAP (backend_x11->keymap)); _clutter_keymap_x11_get_num_lock_state (backend_x11->keymap);
event_x11->caps_lock_set = event_x11->caps_lock_set =
clutter_keymap_get_caps_lock_state (CLUTTER_KEYMAP (backend_x11->keymap)); _clutter_keymap_x11_get_caps_lock_state (backend_x11->keymap);
/* unicode_value is the printable representation */ /* unicode_value is the printable representation */
n = XLookupString (&xevent->xkey, buffer, sizeof (buffer) - 1, NULL, NULL); n = XLookupString (&xevent->xkey, buffer, sizeof (buffer) - 1, NULL, NULL);

View File

@@ -1386,9 +1386,9 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
_clutter_keymap_x11_get_is_modifier (backend_x11->keymap, _clutter_keymap_x11_get_is_modifier (backend_x11->keymap,
event->key.hardware_keycode); event->key.hardware_keycode);
event_x11->num_lock_set = event_x11->num_lock_set =
clutter_keymap_get_num_lock_state (CLUTTER_KEYMAP (backend_x11->keymap)); _clutter_keymap_x11_get_num_lock_state (backend_x11->keymap);
event_x11->caps_lock_set = event_x11->caps_lock_set =
clutter_keymap_get_caps_lock_state (CLUTTER_KEYMAP (backend_x11->keymap)); _clutter_keymap_x11_get_caps_lock_state (backend_x11->keymap);
source_device = g_hash_table_lookup (manager_xi2->devices_by_id, source_device = g_hash_table_lookup (manager_xi2->devices_by_id,
GINT_TO_POINTER (xev->sourceid)); GINT_TO_POINTER (xev->sourceid));

View File

@@ -53,7 +53,7 @@ struct _DirectionCacheEntry
struct _ClutterKeymapX11 struct _ClutterKeymapX11
{ {
ClutterKeymap parent_instance; GObject parent_instance;
ClutterBackend *backend; ClutterBackend *backend;
@@ -86,7 +86,7 @@ struct _ClutterKeymapX11
struct _ClutterKeymapX11Class struct _ClutterKeymapX11Class
{ {
ClutterKeymapClass parent_class; GObjectClass parent_class;
}; };
enum enum
@@ -104,8 +104,7 @@ static void clutter_event_translator_iface_init (ClutterEventTranslatorIface *if
#define clutter_keymap_x11_get_type _clutter_keymap_x11_get_type #define clutter_keymap_x11_get_type _clutter_keymap_x11_get_type
G_DEFINE_TYPE_WITH_CODE (ClutterKeymapX11, clutter_keymap_x11, G_DEFINE_TYPE_WITH_CODE (ClutterKeymapX11, clutter_keymap_x11, G_TYPE_OBJECT,
CLUTTER_TYPE_KEYMAP,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_EVENT_TRANSLATOR, G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_EVENT_TRANSLATOR,
clutter_event_translator_iface_init)); clutter_event_translator_iface_init));
@@ -216,10 +215,12 @@ static void
update_locked_mods (ClutterKeymapX11 *keymap_x11, update_locked_mods (ClutterKeymapX11 *keymap_x11,
gint locked_mods) gint locked_mods)
{ {
#if 0
gboolean old_caps_lock_state, old_num_lock_state; gboolean old_caps_lock_state, old_num_lock_state;
old_caps_lock_state = keymap_x11->caps_lock_state; old_caps_lock_state = keymap_x11->caps_lock_state;
old_num_lock_state = keymap_x11->num_lock_state; old_num_lock_state = keymap_x11->num_lock_state;
#endif
keymap_x11->caps_lock_state = (locked_mods & CLUTTER_LOCK_MASK) != 0; keymap_x11->caps_lock_state = (locked_mods & CLUTTER_LOCK_MASK) != 0;
keymap_x11->num_lock_state = (locked_mods & keymap_x11->num_lock_mask) != 0; keymap_x11->num_lock_state = (locked_mods & keymap_x11->num_lock_mask) != 0;
@@ -228,9 +229,12 @@ update_locked_mods (ClutterKeymapX11 *keymap_x11,
keymap_x11->num_lock_state ? "set" : "unset", keymap_x11->num_lock_state ? "set" : "unset",
keymap_x11->caps_lock_state ? "set" : "unset"); keymap_x11->caps_lock_state ? "set" : "unset");
#if 0
/* Add signal to ClutterBackend? */
if ((keymap_x11->caps_lock_state != old_caps_lock_state) || if ((keymap_x11->caps_lock_state != old_caps_lock_state) ||
(keymap_x11->num_lock_state != old_num_lock_state)) (keymap_x11->num_lock_state != old_num_lock_state))
g_signal_emit_by_name (keymap_x11, "state-changed"); g_signal_emit_by_name (keymap_x11->backend, "key-lock-changed");
#endif
} }
/* the code to retrieve the keymap direction and cache it /* the code to retrieve the keymap direction and cache it
@@ -520,27 +524,10 @@ clutter_keymap_x11_finalize (GObject *gobject)
G_OBJECT_CLASS (clutter_keymap_x11_parent_class)->finalize (gobject); G_OBJECT_CLASS (clutter_keymap_x11_parent_class)->finalize (gobject);
} }
static gboolean
clutter_keymap_x11_get_num_lock_state (ClutterKeymap *keymap)
{
ClutterKeymapX11 *keymap_x11 = CLUTTER_KEYMAP_X11 (keymap);
return keymap_x11->num_lock_state;
}
static gboolean
clutter_keymap_x11_get_caps_lock_state (ClutterKeymap *keymap)
{
ClutterKeymapX11 *keymap_x11 = CLUTTER_KEYMAP_X11 (keymap);
return keymap_x11->caps_lock_state;
}
static void static void
clutter_keymap_x11_class_init (ClutterKeymapX11Class *klass) clutter_keymap_x11_class_init (ClutterKeymapX11Class *klass)
{ {
GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterKeymapClass *keymap_class = CLUTTER_KEYMAP_CLASS (klass);
obj_props[PROP_BACKEND] = obj_props[PROP_BACKEND] =
g_param_spec_object ("backend", g_param_spec_object ("backend",
@@ -552,10 +539,6 @@ clutter_keymap_x11_class_init (ClutterKeymapX11Class *klass)
gobject_class->constructed = clutter_keymap_x11_constructed; gobject_class->constructed = clutter_keymap_x11_constructed;
gobject_class->set_property = clutter_keymap_x11_set_property; gobject_class->set_property = clutter_keymap_x11_set_property;
gobject_class->finalize = clutter_keymap_x11_finalize; gobject_class->finalize = clutter_keymap_x11_finalize;
keymap_class->get_num_lock_state = clutter_keymap_x11_get_num_lock_state;
keymap_class->get_caps_lock_state = clutter_keymap_x11_get_caps_lock_state;
g_object_class_install_properties (gobject_class, PROP_LAST, obj_props); g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
} }
@@ -629,6 +612,22 @@ _clutter_keymap_x11_get_key_group (ClutterKeymapX11 *keymap,
return XkbGroupForCoreState (state); return XkbGroupForCoreState (state);
} }
gboolean
_clutter_keymap_x11_get_num_lock_state (ClutterKeymapX11 *keymap)
{
g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), FALSE);
return keymap->num_lock_state;
}
gboolean
_clutter_keymap_x11_get_caps_lock_state (ClutterKeymapX11 *keymap)
{
g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), FALSE);
return keymap->caps_lock_state;
}
G_GNUC_BEGIN_IGNORE_DEPRECATIONS G_GNUC_BEGIN_IGNORE_DEPRECATIONS
/* XXX - yes, I know that XKeycodeToKeysym() has been deprecated; hopefully, /* XXX - yes, I know that XKeycodeToKeysym() has been deprecated; hopefully,

View File

@@ -480,7 +480,7 @@ xsettings_client_new_with_grab_funcs (Display *display,
{ {
XSettingsClient *client; XSettingsClient *client;
char buffer[256]; char buffer[256];
const char *atom_names[3]; char *atom_names[3];
Atom atoms[3]; Atom atoms[3];
client = malloc (sizeof *client); client = malloc (sizeof *client);

View File

@@ -29,30 +29,26 @@ endif
clutter_c_args += clutter_debug_c_args clutter_c_args += clutter_debug_c_args
clutter_pkg_deps = [ clutter_pkg_deps = [
atk_dep, gdk_pixbuf_dep,
cairo_gobject_dep, cairo_gobject_dep,
glib_dep, glib_dep,
gobject_dep, gobject_dep,
gio_dep, gio_dep,
json_glib_dep,
pango_dep,
]
clutter_pkg_private_deps = [
gdk_pixbuf_dep,
gthread_dep, gthread_dep,
gmodule_no_export_dep, gmodule_no_export_dep,
atk_dep,
pangocairo_dep, pangocairo_dep,
json_glib_dep,
] ]
if have_pango_ft2 if have_pango_ft2
clutter_pkg_private_deps += [ clutter_pkg_deps += [
pangoft2_dep, pangoft2_dep,
] ]
endif endif
if have_wayland if have_wayland
clutter_pkg_private_deps += [ clutter_pkg_deps += [
wayland_egl_dep, wayland_egl_dep,
wayland_server_dep, wayland_server_dep,
] ]
@@ -61,8 +57,6 @@ endif
if have_x11 if have_x11
clutter_pkg_deps += [ clutter_pkg_deps += [
x11_dep, x11_dep,
]
clutter_pkg_private_deps += [
xext_dep, xext_dep,
xdamage_dep, xdamage_dep,
xcomposite_dep, xcomposite_dep,
@@ -72,7 +66,7 @@ if have_x11
endif endif
if have_native_backend if have_native_backend
clutter_pkg_private_deps += [ clutter_pkg_deps += [
libudev_dep, libudev_dep,
libinput_dep, libinput_dep,
xkbcommon_dep, xkbcommon_dep,
@@ -80,14 +74,13 @@ if have_native_backend
endif endif
if have_libwacom if have_libwacom
clutter_pkg_private_deps += [ clutter_pkg_deps += [
libwacom_dep, libwacom_dep,
] ]
endif endif
clutter_deps = [ clutter_deps = [
clutter_pkg_deps, clutter_pkg_deps,
clutter_pkg_private_deps,
libmutter_cogl_dep, libmutter_cogl_dep,
m_dep m_dep
] ]

View File

@@ -0,0 +1,119 @@
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#define STAGE_WIDTH (300)
#define STAGE_HEIGHT (300)
typedef struct
{
ClutterActor *stage;
ClutterActor *actor_group1;
ClutterEffect *blur_effect1;
ClutterActor *actor_group2;
ClutterEffect *blur_effect2;
} Data;
static void
check_results (ClutterStage *stage, gpointer user_data)
{
Data *data = user_data;
gfloat width, height;
ClutterRect rect;
clutter_offscreen_effect_get_target_rect (CLUTTER_OFFSCREEN_EFFECT (data->blur_effect1),
&rect);
width = clutter_rect_get_width (&rect);
height = clutter_rect_get_height (&rect);
if (g_test_verbose ())
g_print ("Checking effect1 size: %.2f x %.2f\n",
clutter_rect_get_width (&rect),
clutter_rect_get_height (&rect));
g_assert_cmpint (width, <, STAGE_WIDTH);
g_assert_cmpint (height, <, STAGE_HEIGHT);
clutter_offscreen_effect_get_target_rect (CLUTTER_OFFSCREEN_EFFECT (data->blur_effect2),
&rect);
width = clutter_rect_get_width (&rect);
height = clutter_rect_get_height (&rect);
if (g_test_verbose ())
g_print ("Checking effect2 size: %.2f x %.2f\n", width, height);
g_assert_cmpint (width, ==, STAGE_WIDTH);
g_assert_cmpint (height, ==, STAGE_HEIGHT);
clutter_main_quit ();
}
static ClutterActor *
create_actor (gfloat x, gfloat y,
gfloat width, gfloat height,
const ClutterColor *color)
{
return g_object_new (CLUTTER_TYPE_ACTOR,
"x", x,
"y", y,
"width", width,
"height", height,
"background-color", color,
NULL);
}
static void
actor_offscreen_limit_max_size (void)
{
Data data;
if (!cogl_features_available (COGL_FEATURE_OFFSCREEN))
return;
data.stage = clutter_test_get_stage ();
g_signal_connect (data.stage, "after-paint",
G_CALLBACK (check_results), &data);
clutter_actor_set_size (data.stage, STAGE_WIDTH, STAGE_HEIGHT);
data.actor_group1 = clutter_actor_new ();
clutter_actor_add_child (data.stage, data.actor_group1);
data.blur_effect1 = clutter_blur_effect_new ();
clutter_actor_add_effect (data.actor_group1, data.blur_effect1);
clutter_actor_add_child (data.actor_group1,
create_actor (10, 10,
100, 100,
CLUTTER_COLOR_Blue));
clutter_actor_add_child (data.actor_group1,
create_actor (100, 100,
100, 100,
CLUTTER_COLOR_Gray));
data.actor_group2 = clutter_actor_new ();
clutter_actor_add_child (data.stage, data.actor_group2);
data.blur_effect2 = clutter_blur_effect_new ();
clutter_actor_add_effect (data.actor_group2, data.blur_effect2);
clutter_actor_add_child (data.actor_group2,
create_actor (-10, -10,
100, 100,
CLUTTER_COLOR_Yellow));
clutter_actor_add_child (data.actor_group2,
create_actor (250, 10,
100, 100,
CLUTTER_COLOR_ScarletRed));
clutter_actor_add_child (data.actor_group2,
create_actor (10, 250,
100, 100,
CLUTTER_COLOR_Yellow));
clutter_actor_show (data.stage);
clutter_main ();
}
CLUTTER_TEST_SUITE (
CLUTTER_TEST_UNIT ("/actor/offscreen/limit-max-size", actor_offscreen_limit_max_size)
)

View File

@@ -189,11 +189,10 @@ verify_redraws (gpointer user_data)
clutter_actor_queue_redraw (data->child); clutter_actor_queue_redraw (data->child);
verify_redraw (data, 1); verify_redraw (data, 1);
/* Modifying the transformation on the parent should not cause a redraw, /* Modifying the transformation on the parent should cause a
since the FBO stores pre-transformed rendering that can be reused with redraw */
any transformation. */
clutter_actor_set_anchor_point (data->parent_container, 0, 1); clutter_actor_set_anchor_point (data->parent_container, 0, 1);
verify_redraw (data, 0); verify_redraw (data, 1);
/* Redrawing an unrelated actor shouldn't cause a redraw */ /* Redrawing an unrelated actor shouldn't cause a redraw */
clutter_actor_set_position (data->unrelated_actor, 0, 1); clutter_actor_set_position (data->unrelated_actor, 0, 1);

View File

@@ -19,6 +19,7 @@ clutter_conform_tests_actor_tests = [
'actor-iter', 'actor-iter',
'actor-layout', 'actor-layout',
'actor-meta', 'actor-meta',
'actor-offscreen-limit-max-size',
'actor-offscreen-redirect', 'actor-offscreen-redirect',
'actor-paint-opacity', 'actor-paint-opacity',
'actor-pick', 'actor-pick',

View File

@@ -27,9 +27,6 @@ typedef struct SuperOH
static gint n_hands = NHANDS; static gint n_hands = NHANDS;
int
test_actors_main (int argc, char *argv[]);
static GOptionEntry super_oh_entries[] = { static GOptionEntry super_oh_entries[] = {
{ {
"num-hands", 'n', "num-hands", 'n',

View File

@@ -4,12 +4,6 @@
static gboolean is_expanded = FALSE; static gboolean is_expanded = FALSE;
int
test_animation_main (int argc, char *argv[]);
const char *
test_animation_describe (void);
static void static void
on_rect_transitions_completed (ClutterActor *actor) on_rect_transitions_completed (ClutterActor *actor)
{ {

View File

@@ -5,10 +5,6 @@
static ClutterAnimator *animator; static ClutterAnimator *animator;
gint
test_animator_main (gint argc,
gchar **argv);
static ClutterActor *new_rect (gint r, static ClutterActor *new_rect (gint r,
gint g, gint g,
gint b, gint b,

View File

@@ -47,12 +47,6 @@ static const gchar *desaturare_glsl_shader =
static gboolean is_expanded = FALSE; static gboolean is_expanded = FALSE;
const char *
test_bind_constraint_describe (void);
int
test_bind_constraint_main (int argc, char *argv[]);
static gboolean static gboolean
on_button_release (ClutterActor *actor, on_button_release (ClutterActor *actor,
ClutterEvent *event, ClutterEvent *event,

View File

@@ -31,14 +31,6 @@ struct _KeyGroupClass
ClutterActor *child); ClutterActor *child);
}; };
GType key_group_get_type (void);
int
test_binding_pool_main (int argc, char *argv[]);
const char *
test_binding_pool_describe (void);
G_DEFINE_TYPE (KeyGroup, key_group, CLUTTER_TYPE_ACTOR) G_DEFINE_TYPE (KeyGroup, key_group, CLUTTER_TYPE_ACTOR)
enum enum

View File

@@ -3,12 +3,6 @@
#include <cairo.h> #include <cairo.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
int
test_cairo_clock_main (int argc, char *argv[]);
const char *
test_cairo_clock_describe (void);
static gboolean static gboolean
draw_clock (ClutterCanvas *canvas, draw_clock (ClutterCanvas *canvas,
cairo_t *cr, cairo_t *cr,

View File

@@ -25,12 +25,6 @@ Flower;
static ClutterActor *stage = NULL; static ClutterActor *stage = NULL;
int
test_cairo_flowers_main (int argc, char **argv);
const char *
test_cairo_flowers_describe (void);
static gboolean static gboolean
draw_flower (ClutterCanvas *canvas, draw_flower (ClutterCanvas *canvas,
cairo_t *cr, cairo_t *cr,

View File

@@ -30,11 +30,6 @@ typedef struct _TestMultiLayerMaterialState
} TestMultiLayerMaterialState; } TestMultiLayerMaterialState;
int
test_cogl_multitexture_main (int argc, char *argv[]);
const char *
test_cogl_multitexture_describe (void);
static void static void
frame_cb (ClutterTimeline *timeline, frame_cb (ClutterTimeline *timeline,

View File

@@ -56,12 +56,6 @@ struct _TestCoglboxClass
static GType test_coglbox_get_type (void) G_GNUC_CONST; static GType test_coglbox_get_type (void) G_GNUC_CONST;
int
test_cogl_offscreen_main (int argc, char *argv[]);
const char *
test_cogl_offscreen_describe (void);
G_END_DECLS G_END_DECLS
/* Coglbox private declaration /* Coglbox private declaration
@@ -159,7 +153,7 @@ test_coglbox_dispose (GObject *object)
* This sets up a Clutter like coordinate system for a Cogl * This sets up a Clutter like coordinate system for a Cogl
* framebuffer * framebuffer
*/ */
static void void
setup_viewport (unsigned int width, setup_viewport (unsigned int width,
unsigned int height, unsigned int height,
float fovy, float fovy,

View File

@@ -51,12 +51,6 @@ struct _Data
CoglMaterial *material; CoglMaterial *material;
}; };
int
test_cogl_point_sprites_main (int argc, char *argv[]);
const char *
test_cogl_point_sprites_describe (void);
static CoglHandle static CoglHandle
generate_round_texture (void) generate_round_texture (void)
{ {

View File

@@ -7,13 +7,10 @@
typedef struct typedef struct
{ {
const char *name; char *name;
const char *source; char *source;
} ShaderSource; } ShaderSource;
int
test_cogl_shader_glsl_main (int argc, char *argv[]);
/* a couple of boilerplate defines that are common amongst all the /* a couple of boilerplate defines that are common amongst all the
* sample shaders * sample shaders
*/ */
@@ -54,6 +51,22 @@ static ShaderSource shaders[]=
{"box-blur", {"box-blur",
FRAGMENT_SHADER_VARS FRAGMENT_SHADER_VARS
#if GPU_SUPPORTS_DYNAMIC_BRANCHING
"uniform float radius;"
FRAGMENT_SHADER_BEGIN
"float u, v;"
"int count = 1;"
"for (u=-radius;u<radius;u++)"
" for (v=-radius;v<radius;v++)"
" {"
" color += texture2D(tex, "
" vec2(cogl_tex_coord_in[0].s + u * 2.0 * x_step, "
" cogl_tex_coord_in[0].t + v * 2.0 * y_step));"
" count ++;"
" }"
"color = color / float(count);"
FRAGMENT_SHADER_END
#else
"vec4 get_rgba_rel(sampler2D tex, float dx, float dy)" "vec4 get_rgba_rel(sampler2D tex, float dx, float dy)"
"{" "{"
" return texture2D (tex, cogl_tex_coord_in[0].st " " return texture2D (tex, cogl_tex_coord_in[0].st "
@@ -73,6 +86,7 @@ static ShaderSource shaders[]=
" color += get_rgba_rel (tex, x_step, y_step); count++;" " color += get_rgba_rel (tex, x_step, y_step); count++;"
" color = color / count;" " color = color / count;"
FRAGMENT_SHADER_END FRAGMENT_SHADER_END
#endif
}, },
{"invert", {"invert",

View File

@@ -56,12 +56,6 @@ struct _TestCoglboxClass
static GType test_coglbox_get_type (void) G_GNUC_CONST; static GType test_coglbox_get_type (void) G_GNUC_CONST;
int
test_cogl_tex_convert_main (int argc, char *argv[]);
const char *
test_cogl_tex_convert_describe (void);
G_END_DECLS G_END_DECLS
/* Coglbox private declaration /* Coglbox private declaration

View File

@@ -60,9 +60,6 @@ typedef struct _TestCoglbox TestCoglbox;
typedef struct _TestCoglboxClass TestCoglboxClass; typedef struct _TestCoglboxClass TestCoglboxClass;
typedef struct _TestCoglboxPrivate TestCoglboxPrivate; typedef struct _TestCoglboxPrivate TestCoglboxPrivate;
const char *
test_cogl_tex_foreign_describe (void);
struct _TestCoglbox struct _TestCoglbox
{ {
ClutterActor parent; ClutterActor parent;
@@ -119,9 +116,6 @@ G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
#define TEST_COGLBOX_GET_PRIVATE(obj) \ #define TEST_COGLBOX_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
int
test_cogl_tex_foreign_main (int argc, char *argv[]);
/* Coglbox implementation /* Coglbox implementation
*--------------------------------------------------*/ *--------------------------------------------------*/

View File

@@ -56,12 +56,6 @@ struct _TestCoglboxClass
static GType test_coglbox_get_type (void) G_GNUC_CONST; static GType test_coglbox_get_type (void) G_GNUC_CONST;
int
test_cogl_tex_polygon_main (int argc, char *argv[]);
const char *
test_cogl_tex_polygon_describe (void);
G_END_DECLS G_END_DECLS
/* Coglbox private declaration /* Coglbox private declaration

View File

@@ -57,12 +57,6 @@ struct _TestCoglboxClass
static GType test_coglbox_get_type (void) G_GNUC_CONST; static GType test_coglbox_get_type (void) G_GNUC_CONST;
int
test_cogl_tex_tile_main (int argc, char *argv[]);
const char *
test_cogl_tex_tile_describe (void);
G_END_DECLS G_END_DECLS
/* Coglbox private declaration /* Coglbox private declaration

View File

@@ -53,12 +53,6 @@ typedef struct _TestState
guint frame_id; guint frame_id;
} TestState; } TestState;
int
test_cogl_vertex_buffer_main (int argc, char *argv[]);
const char *
test_cogl_vertex_buffer_describe (void);
static void static void
frame_cb (ClutterTimeline *timeline, frame_cb (ClutterTimeline *timeline,
gint elapsed_msecs, gint elapsed_msecs,

View File

@@ -19,14 +19,6 @@ typedef struct _ColorContentClass {
static void clutter_content_iface_init (ClutterContentIface *iface); static void clutter_content_iface_init (ClutterContentIface *iface);
GType color_content_get_type (void);
int
test_content_main (int argc, char *argv[]);
const char *
test_content_describe (void);
G_DEFINE_TYPE_WITH_CODE (ColorContent, color_content, G_TYPE_OBJECT, G_DEFINE_TYPE_WITH_CODE (ColorContent, color_content, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT, G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT,
clutter_content_iface_init)) clutter_content_iface_init))

View File

@@ -12,9 +12,6 @@ typedef struct {
GHashTable *devices; GHashTable *devices;
} TestDevicesApp; } TestDevicesApp;
int
test_devices_main (int argc, char **argv);
static const gchar * static const gchar *
device_type_name (ClutterInputDevice *device) device_type_name (ClutterInputDevice *device)
{ {

View File

@@ -55,12 +55,6 @@ static ClutterActor *easing_mode_label = NULL;
static ClutterAnimation *last_animation = NULL; static ClutterAnimation *last_animation = NULL;
int
test_easing_main (int argc, char *argv[]);
const char *
test_easing_describe (void);
/* recenter_bouncer: /* recenter_bouncer:
* *
* repositions (through an animation) the bouncer at the center of the stage * repositions (through an animation) the bouncer at the center of the stage

View File

@@ -4,12 +4,6 @@
gboolean IsFullScreen = FALSE, IsMotion = TRUE; gboolean IsFullScreen = FALSE, IsMotion = TRUE;
int
test_events_main (int argc, char *argv[]);
const char *
test_events_describe (void);
static const gchar * static const gchar *
get_event_type_name (const ClutterEvent *event) get_event_type_name (const ClutterEvent *event)
{ {
@@ -59,7 +53,7 @@ get_event_type_name (const ClutterEvent *event)
static gchar * static gchar *
get_event_state_string (const ClutterEvent *event) get_event_state_string (const ClutterEvent *event)
{ {
const char *mods[18]; gchar *mods[18];
int i = 0; int i = 0;
ClutterModifierType state = clutter_event_get_state (event); ClutterModifierType state = clutter_event_get_state (event);
@@ -102,7 +96,7 @@ get_event_state_string (const ClutterEvent *event)
mods[i++] = "-"; mods[i++] = "-";
mods[i] = NULL; mods[i] = NULL;
return g_strjoinv (",", (char **) mods); return g_strjoinv (",", mods);
} }
static void static void
@@ -428,15 +422,15 @@ test_events_main (int argc, char *argv[])
clutter_stage_set_title (CLUTTER_STAGE (stage), "Events"); clutter_stage_set_title (CLUTTER_STAGE (stage), "Events");
clutter_actor_set_name (stage, "Stage"); clutter_actor_set_name (stage, "Stage");
g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
g_signal_connect (stage, "event", G_CALLBACK (input_cb), (char *) "stage"); g_signal_connect (stage, "event", G_CALLBACK (input_cb), "stage");
g_signal_connect (stage, "fullscreen", g_signal_connect (stage, "fullscreen",
G_CALLBACK (stage_state_cb), (char *) "fullscreen"); G_CALLBACK (stage_state_cb), "fullscreen");
g_signal_connect (stage, "unfullscreen", g_signal_connect (stage, "unfullscreen",
G_CALLBACK (stage_state_cb), (char *) "unfullscreen"); G_CALLBACK (stage_state_cb), "unfullscreen");
g_signal_connect (stage, "activate", g_signal_connect (stage, "activate",
G_CALLBACK (stage_state_cb), (char *) "activate"); G_CALLBACK (stage_state_cb), "activate");
g_signal_connect (stage, "deactivate", g_signal_connect (stage, "deactivate",
G_CALLBACK (stage_state_cb), (char *) "deactivate"); G_CALLBACK (stage_state_cb), "deactivate");
focus_box = clutter_rectangle_new_with_color (CLUTTER_COLOR_Black); focus_box = clutter_rectangle_new_with_color (CLUTTER_COLOR_Black);
clutter_actor_set_name (focus_box, "Focus Box"); clutter_actor_set_name (focus_box, "Focus Box");
@@ -448,7 +442,7 @@ test_events_main (int argc, char *argv[])
clutter_actor_set_position (actor, 100, 100); clutter_actor_set_position (actor, 100, 100);
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", G_CALLBACK (input_cb), (char *) "red box"); g_signal_connect (actor, "event", G_CALLBACK (input_cb), "red box");
g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb), g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb),
focus_box); focus_box);
/* Toggle motion - enter/leave capture */ /* Toggle motion - enter/leave capture */
@@ -463,7 +457,7 @@ test_events_main (int argc, char *argv[])
clutter_actor_set_position (actor, 250, 100); clutter_actor_set_position (actor, 250, 100);
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", G_CALLBACK (input_cb), (char *) "green box"); g_signal_connect (actor, "event", G_CALLBACK (input_cb), "green box");
g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb), g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb),
focus_box); focus_box);
g_signal_connect (actor, "captured-event", G_CALLBACK (capture_cb), NULL); g_signal_connect (actor, "captured-event", G_CALLBACK (capture_cb), NULL);
@@ -474,7 +468,7 @@ test_events_main (int argc, char *argv[])
clutter_actor_set_position (actor, 400, 100); clutter_actor_set_position (actor, 400, 100);
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER(stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER(stage), actor, NULL);
g_signal_connect (actor, "event", G_CALLBACK (input_cb), (char *) "blue box"); g_signal_connect (actor, "event", G_CALLBACK (input_cb), "blue box");
g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb), g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb),
focus_box); focus_box);
/* Fullscreen */ /* Fullscreen */
@@ -487,7 +481,7 @@ test_events_main (int argc, char *argv[])
clutter_actor_set_size (actor, 400, 50); clutter_actor_set_size (actor, 400, 50);
clutter_actor_set_position (actor, 100, 250); clutter_actor_set_position (actor, 100, 250);
clutter_container_add (CLUTTER_CONTAINER(stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER(stage), actor, NULL);
g_signal_connect (actor, "event", G_CALLBACK (input_cb), (char *) "blue box"); g_signal_connect (actor, "event", G_CALLBACK (input_cb), "blue box");
g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb), g_signal_connect (actor, "key-focus-in", G_CALLBACK (key_focus_in_cb),
focus_box); focus_box);
g_signal_connect (stage, "key-focus-in", G_CALLBACK (key_focus_in_cb), g_signal_connect (stage, "key-focus-in", G_CALLBACK (key_focus_in_cb),
@@ -499,7 +493,7 @@ test_events_main (int argc, char *argv[])
clutter_actor_set_size (actor, 100, 100); clutter_actor_set_size (actor, 100, 100);
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
g_signal_connect (actor, "event", G_CALLBACK (input_cb), (char *) "yellow box"); g_signal_connect (actor, "event", G_CALLBACK (input_cb), "yellow box");
/* note group not reactive */ /* note group not reactive */
group = clutter_group_new (); group = clutter_group_new ();

View File

@@ -8,13 +8,7 @@
#define STAGE_WIDTH 800 #define STAGE_WIDTH 800
#define STAGE_HEIGHT 600 #define STAGE_HEIGHT 600
int ClutterActor *
test_fbo_main (int argc, char *argv[]);
const char *
test_fbo_describe (void);
static ClutterActor *
make_source (void) make_source (void)
{ {
ClutterActor *source, *actor; ClutterActor *source, *actor;

View File

@@ -1,12 +1,6 @@
#include <gmodule.h> #include <gmodule.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
int
test_grab_main (int argc, char *argv[]);
const char *
test_grab_describe (void);
static void static void
stage_state_cb (ClutterStage *stage, stage_state_cb (ClutterStage *stage,
gpointer data) gpointer data)
@@ -217,22 +211,22 @@ test_grab_main (int argc, char *argv[])
clutter_stage_set_title (CLUTTER_STAGE (stage), "Grabs"); clutter_stage_set_title (CLUTTER_STAGE (stage), "Grabs");
g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
g_signal_connect (stage, "event", g_signal_connect (stage, "event",
G_CALLBACK (debug_event_cb), (char *) "stage"); G_CALLBACK (debug_event_cb), "stage");
g_signal_connect (stage, "fullscreen", g_signal_connect (stage, "fullscreen",
G_CALLBACK (stage_state_cb), (char *) "fullscreen"); G_CALLBACK (stage_state_cb), "fullscreen");
g_signal_connect (stage, "unfullscreen", g_signal_connect (stage, "unfullscreen",
G_CALLBACK (stage_state_cb), (char *) "unfullscreen"); G_CALLBACK (stage_state_cb), "unfullscreen");
g_signal_connect (stage, "activate", g_signal_connect (stage, "activate",
G_CALLBACK (stage_state_cb), (char *) "activate"); G_CALLBACK (stage_state_cb), "activate");
g_signal_connect (stage, "deactivate", g_signal_connect (stage, "deactivate",
G_CALLBACK (stage_state_cb), (char *) "deactivate"); G_CALLBACK (stage_state_cb), "deactivate");
actor = clutter_rectangle_new_with_color (&rcol); actor = clutter_rectangle_new_with_color (&rcol);
clutter_actor_set_size (actor, 100, 100); clutter_actor_set_size (actor, 100, 100);
clutter_actor_set_position (actor, 100, 100); clutter_actor_set_position (actor, 100, 100);
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", G_CALLBACK (debug_event_cb), (char *) "red box"); g_signal_connect (actor, "event", G_CALLBACK (debug_event_cb), "red box");
g_signal_connect (actor, "button-press-event", g_signal_connect (actor, "button-press-event",
G_CALLBACK (grab_pointer_cb), NULL); G_CALLBACK (grab_pointer_cb), NULL);
g_signal_connect (actor, "button-release-event", g_signal_connect (actor, "button-release-event",
@@ -243,7 +237,7 @@ test_grab_main (int argc, char *argv[])
clutter_actor_set_position (actor, 100, 300); clutter_actor_set_position (actor, 100, 300);
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", G_CALLBACK (debug_event_cb), (char *) "yellow box"); g_signal_connect (actor, "event", G_CALLBACK (debug_event_cb), "yellow box");
g_signal_connect (actor, "button-press-event", g_signal_connect (actor, "button-press-event",
G_CALLBACK (toggle_grab_pointer_cb), NULL); G_CALLBACK (toggle_grab_pointer_cb), NULL);
@@ -253,7 +247,7 @@ test_grab_main (int argc, char *argv[])
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", g_signal_connect (actor, "event",
G_CALLBACK (debug_event_cb), (char *) "blue box"); G_CALLBACK (debug_event_cb), "blue box");
g_signal_connect (actor, "button-press-event", g_signal_connect (actor, "button-press-event",
G_CALLBACK (grab_pointer_cb), NULL); G_CALLBACK (grab_pointer_cb), NULL);
g_signal_connect (actor, "button-release-event", g_signal_connect (actor, "button-release-event",
@@ -265,7 +259,7 @@ test_grab_main (int argc, char *argv[])
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", g_signal_connect (actor, "event",
G_CALLBACK (debug_event_cb), (char *) "green box"); G_CALLBACK (debug_event_cb), "green box");
g_signal_connect (actor, "button-press-event", g_signal_connect (actor, "button-press-event",
G_CALLBACK (green_press_cb), NULL); G_CALLBACK (green_press_cb), NULL);
@@ -276,7 +270,7 @@ test_grab_main (int argc, char *argv[])
clutter_actor_set_reactive (actor, TRUE); clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL); clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
g_signal_connect (actor, "event", g_signal_connect (actor, "event",
G_CALLBACK (debug_event_cb), (char *) "cyan box"); G_CALLBACK (debug_event_cb), "cyan box");
g_signal_connect (actor, "button-press-event", g_signal_connect (actor, "button-press-event",
G_CALLBACK (cyan_press_cb), NULL); G_CALLBACK (cyan_press_cb), NULL);

View File

@@ -20,14 +20,6 @@ typedef struct _SolidContentClass {
static void clutter_content_iface_init (ClutterContentIface *iface); static void clutter_content_iface_init (ClutterContentIface *iface);
GType solid_content_get_type (void);
const char *
test_image_describe (void);
int
test_image_main (int argc, char *argv[]);
G_DEFINE_TYPE_WITH_CODE (SolidContent, solid_content, G_TYPE_OBJECT, G_DEFINE_TYPE_WITH_CODE (SolidContent, solid_content, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT, G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT,
clutter_content_iface_init)) clutter_content_iface_init))

View File

@@ -11,12 +11,6 @@ static const ClutterColor colors[] = {
#define PADDING (64.0f) #define PADDING (64.0f)
#define SIZE (64.0f) #define SIZE (64.0f)
const char *
test_keyframe_transition_describe (void);
int
test_keyframe_transition_main (int argc, char *argv[]);
static void static void
on_transition_stopped (ClutterActor *actor, on_transition_stopped (ClutterActor *actor,
const gchar *transition_name, const gchar *transition_name,

View File

@@ -48,14 +48,6 @@ struct _MyThingPrivate
guint use_transformed_box : 1; guint use_transformed_box : 1;
}; };
GType my_thing_get_type (void);
int
test_layout_main (int argc, char *argv[]);
const char *
test_layout_describe (void);
G_DEFINE_TYPE_WITH_PRIVATE (MyThing, my_thing, CLUTTER_TYPE_ACTOR) G_DEFINE_TYPE_WITH_PRIVATE (MyThing, my_thing, CLUTTER_TYPE_ACTOR)
#define MY_THING_GET_PRIVATE(obj) \ #define MY_THING_GET_PRIVATE(obj) \
@@ -425,7 +417,7 @@ my_thing_init (MyThing *thing)
thing->priv = MY_THING_GET_PRIVATE (thing); thing->priv = MY_THING_GET_PRIVATE (thing);
} }
static ClutterActor * ClutterActor *
my_thing_new (gfloat padding, my_thing_new (gfloat padding,
gfloat spacing) gfloat spacing)
{ {

View File

@@ -4,9 +4,6 @@
static GList *stages = NULL; static GList *stages = NULL;
static gint n_stages = 1; static gint n_stages = 1;
int
test_multistage_main (int argc, char *argv[]);
static gboolean static gboolean
tex_button_cb (ClutterActor *actor, tex_button_cb (ClutterActor *actor,
ClutterEvent *event, ClutterEvent *event,

View File

@@ -56,12 +56,6 @@ static GOptionEntry super_oh_entries[] = {
{ NULL } { NULL }
}; };
int
test_paint_wrapper_main (int argc, char *argv[]);
const char *
test_paint_wrapper_describe (void);
static gboolean static gboolean
on_button_press_event (ClutterActor *actor, on_button_press_event (ClutterActor *actor,
ClutterEvent *event, ClutterEvent *event,

View File

@@ -11,10 +11,6 @@
static gboolean toggled = FALSE; static gboolean toggled = FALSE;
int
test_path_constraint_main (int argc,
char *argv[]);
static gboolean static gboolean
on_button_press (ClutterActor *actor, on_button_press (ClutterActor *actor,
const ClutterEvent *event, const ClutterEvent *event,

View File

@@ -23,12 +23,6 @@
static gboolean disable_x11 = FALSE; static gboolean disable_x11 = FALSE;
static gboolean disable_animation = FALSE; static gboolean disable_animation = FALSE;
int
test_pixmap_main (int argc, char **argv);
const char *
test_pixmap_describe (void);
static GOptionEntry g_options[] = static GOptionEntry g_options[] =
{ {
{ "disable-x11", { "disable-x11",
@@ -137,7 +131,7 @@ stage_button_press_cb (ClutterActor *actor,
return CLUTTER_EVENT_STOP; return CLUTTER_EVENT_STOP;
} }
static Pixmap Pixmap
create_pixmap (guint *width, guint *height, guint *depth) create_pixmap (guint *width, guint *height, guint *depth)
{ {
Display *dpy = clutter_x11_get_default_display (); Display *dpy = clutter_x11_get_default_display ();

View File

@@ -26,12 +26,6 @@
#define STAGE_WIDTH 800 #define STAGE_WIDTH 800
#define STAGE_HEIGHT 550 #define STAGE_HEIGHT 550
int
test_rotate_zoom_main (int argc, char *argv[]);
const char *
test_rotate_zoom_describe (void);
static ClutterActor * static ClutterActor *
create_hand (void) create_hand (void)
{ {

View File

@@ -18,12 +18,6 @@ static const ClutterGravity gravities[] = {
static gint gindex = 0; static gint gindex = 0;
static ClutterActor *label; static ClutterActor *label;
int
test_scale_main (int argc, char *argv[]);
const char *
test_scale_describe (void);
static void static void
set_next_gravity (ClutterActor *actor) set_next_gravity (ClutterActor *actor)
{ {

View File

@@ -10,9 +10,6 @@
static ClutterScript *script = NULL; static ClutterScript *script = NULL;
static guint merge_id = 0; static guint merge_id = 0;
int
test_script_main (int argc, char *argv[]);
static const gchar *test_unmerge = static const gchar *test_unmerge =
"[" "["
" {" " {"
@@ -78,6 +75,28 @@ static const gchar *test_behaviour =
" }" " }"
"]"; "]";
gdouble
sine_alpha (ClutterAlpha *alpha,
gpointer dummy G_GNUC_UNUSED)
{
ClutterTimeline *timeline = clutter_alpha_get_timeline (alpha);
return sin (clutter_timeline_get_progress (timeline) * G_PI);
}
gdouble
double_ramp_alpha (ClutterAlpha *alpha,
gpointer dummy G_GNUC_UNUSED)
{
ClutterTimeline *timeline = clutter_alpha_get_timeline (alpha);
gdouble progress = clutter_timeline_get_progress (timeline);
if (progress >= 0.5)
return 1.0 - progress;
return progress;
}
static gboolean static gboolean
blue_button_press (ClutterActor *actor, blue_button_press (ClutterActor *actor,
ClutterButtonEvent *event, ClutterButtonEvent *event,

View File

@@ -20,9 +20,6 @@ static const gchar *rect_color[N_RECTS] = {
static ClutterActor *rectangle[N_RECTS]; static ClutterActor *rectangle[N_RECTS];
static ClutterActor *viewport = NULL; static ClutterActor *viewport = NULL;
int
test_scrolling_main (int argc, char *argv[]);
static void static void
on_drag_end (ClutterDragAction *action, on_drag_end (ClutterDragAction *action,
ClutterActor *actor, ClutterActor *actor,

View File

@@ -7,9 +7,6 @@
#include <clutter/clutter.h> #include <clutter/clutter.h>
int
test_shader_effects_main (int argc, char *argv[]);
G_MODULE_EXPORT int G_MODULE_EXPORT int
test_shader_effects_main (int argc, char *argv[]) test_shader_effects_main (int argc, char *argv[])
{ {

View File

@@ -16,23 +16,17 @@ struct _CallbackData
guint idle_source; guint idle_source;
}; };
int
test_stage_read_pixels_main (int argc, char **argv);
const char *
test_stage_read_pixels_describe (void);
static ClutterActor * static ClutterActor *
make_label (void) make_label (void)
{ {
ClutterActor *label; ClutterActor *label;
gchar *text; gchar *text;
const char *argv[] = { "ls", "--help", NULL }; gchar *argv[] = { "ls", "--help", NULL };
label = clutter_text_new (); label = clutter_text_new ();
clutter_text_set_font_name (CLUTTER_TEXT (label), "Sans 10"); clutter_text_set_font_name (CLUTTER_TEXT (label), "Sans 10");
if (g_spawn_sync (NULL, (char **) argv, NULL, if (g_spawn_sync (NULL, argv, NULL,
G_SPAWN_STDERR_TO_DEV_NULL | G_SPAWN_SEARCH_PATH, G_SPAWN_STDERR_TO_DEV_NULL | G_SPAWN_SEARCH_PATH,
NULL, NULL, &text, NULL, NULL, NULL)) NULL, NULL, &text, NULL, NULL, NULL))
{ {

View File

@@ -2,12 +2,6 @@
#include <gmodule.h> #include <gmodule.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
int
test_stage_sizing_main (int argc, char *argv[]);
const char *
test_stage_sizing_describe (void);
static gboolean static gboolean
fullscreen_clicked_cb (ClutterStage *stage) fullscreen_clicked_cb (ClutterStage *stage)
{ {

View File

@@ -6,13 +6,6 @@
static ClutterState *state; static ClutterState *state;
static ClutterAnimator *animator; static ClutterAnimator *animator;
gint
test_state_animator_main (gint argc,
gchar **argv);
const char *
test_state_animator_describe (void);
static gboolean press_event (ClutterActor *actor, static gboolean press_event (ClutterActor *actor,
ClutterEvent *event, ClutterEvent *event,
gpointer user_data) gpointer user_data)

View File

@@ -6,8 +6,15 @@
#define TEST_STATE_SCRIPT_FILE "test-script-signals.json" #define TEST_STATE_SCRIPT_FILE "test-script-signals.json"
int gboolean
test_state_script_main (int argc, char *argv[]); on_button_press (ClutterActor *actor,
ClutterEvent *event,
gpointer dummy G_GNUC_UNUSED)
{
g_print ("Button pressed!\n");
return FALSE;
}
G_MODULE_EXPORT int G_MODULE_EXPORT int
test_state_script_main (int argc, char *argv[]) test_state_script_main (int argc, char *argv[])

View File

@@ -13,12 +13,6 @@
#define ROWS (STAGE_HEIGHT/ACTOR_HEIGHT) #define ROWS (STAGE_HEIGHT/ACTOR_HEIGHT)
#define TOTAL (ROWS*COLS) #define TOTAL (ROWS*COLS)
gint
test_state_main (gint argc,
gchar **argv);
const char *
test_state_describe (void);
static gboolean press_event (ClutterActor *actor, static gboolean press_event (ClutterActor *actor,
ClutterEvent *event, ClutterEvent *event,

View File

@@ -7,12 +7,6 @@ enum {
BOTH = 2 BOTH = 2
}; };
int
test_swipe_action_main (int argc, char *argv[]);
const char *
test_swipe_action_describe (void);
static void static void
swept_cb (ClutterSwipeAction *action, swept_cb (ClutterSwipeAction *action,
ClutterActor *actor, ClutterActor *actor,

View File

@@ -9,12 +9,6 @@
#define FONT "Sans 12" #define FONT "Sans 12"
int
test_table_layout_main (int argc, char *argv[]);
const char *
test_table_layout_describe (void);
static void static void
set_text (ClutterActor *actor, const gchar *text) set_text (ClutterActor *actor, const gchar *text)
{ {

View File

@@ -2,13 +2,6 @@
#include <gmodule.h> #include <gmodule.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
gint
test_text_field_main (gint argc,
gchar **argv);
const char *
test_text_field_describe (void);
static void static void
on_entry_activate (ClutterText *text, on_entry_activate (ClutterText *text,
gpointer data) gpointer data)

View File

@@ -10,13 +10,6 @@ static const gchar *runes =
"ᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ\n" "ᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ\n"
"ᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ᛬\n"; "ᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ᛬\n";
gint
test_text_main (gint argc,
gchar **argv);
const char *
test_text_describe (void);
G_MODULE_EXPORT gint G_MODULE_EXPORT gint
test_text_main (gint argc, test_text_main (gint argc,
gchar **argv) gchar **argv)

View File

@@ -11,12 +11,6 @@ enum
static ClutterActor *stage = NULL; static ClutterActor *stage = NULL;
const char *
test_texture_async_describe (void);
gint
test_texture_async_main (int argc, char *argv[]);
static void static void
on_load_finished (ClutterTexture *texture, on_load_finished (ClutterTexture *texture,
const GError *error, const GError *error,

View File

@@ -3,9 +3,6 @@
#include <gmodule.h> #include <gmodule.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
int
test_texture_material_main (int argc, char *argv[]);
G_MODULE_EXPORT int G_MODULE_EXPORT int
test_texture_material_main (int argc, char *argv[]) test_texture_material_main (int argc, char *argv[])
{ {

View File

@@ -2,12 +2,6 @@
#include <gmodule.h> #include <gmodule.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
gint
test_texture_quality_main (int argc, char *argv[]);
const char *
test_texture_quality_describe (void);
/* each time the timeline animating the label completes, swap the direction */ /* each time the timeline animating the label completes, swap the direction */
static void static void
timeline_completed (ClutterTimeline *timeline, timeline_completed (ClutterTimeline *timeline,

View File

@@ -3,13 +3,7 @@
#include <clutter/clutter.h> #include <clutter/clutter.h>
int guchar*
test_textures_main (int argc, char *argv[]);
const char *
test_texture_slicing_describe (void);
static guchar *
make_rgba_data (int width, int height, int bpp, int has_alpha, int *rowstride_p) make_rgba_data (int width, int height, int bpp, int has_alpha, int *rowstride_p)
{ {
#define CHECK_SIZE 20 #define CHECK_SIZE 20

View File

@@ -45,12 +45,6 @@ static const ClutterColor static_colors[] = {
}; };
static GHashTable *sequence_to_color = NULL; static GHashTable *sequence_to_color = NULL;
int
test_touch_events_main (int argc, char *argv[]);
const char *
test_touch_events_describe (void);
static void static void
canvas_paint (ClutterCairoTexture *canvas) canvas_paint (ClutterCairoTexture *canvas)
{ {

View File

@@ -7,8 +7,7 @@ static gint testframes = 0;
static float testmaxtime = 1.0; static float testmaxtime = 1.0;
/* initialize environment to be suitable for fps testing */ /* initialize environment to be suitable for fps testing */
static inline void void clutter_perf_fps_init (void)
clutter_perf_fps_init (void)
{ {
/* Force not syncing to vblank, we want free-running maximum FPS */ /* Force not syncing to vblank, we want free-running maximum FPS */
g_setenv ("vblank_mode", "0", FALSE); g_setenv ("vblank_mode", "0", FALSE);
@@ -28,20 +27,17 @@ clutter_perf_fps_init (void)
static void perf_stage_paint_cb (ClutterStage *stage, gpointer *data); static void perf_stage_paint_cb (ClutterStage *stage, gpointer *data);
static gboolean perf_fake_mouse_cb (gpointer stage); static gboolean perf_fake_mouse_cb (gpointer stage);
static inline void void clutter_perf_fps_start (ClutterStage *stage)
clutter_perf_fps_start (ClutterStage *stage)
{ {
g_signal_connect (stage, "paint", G_CALLBACK (perf_stage_paint_cb), NULL); g_signal_connect (stage, "paint", G_CALLBACK (perf_stage_paint_cb), NULL);
} }
static inline void void clutter_perf_fake_mouse (ClutterStage *stage)
clutter_perf_fake_mouse (ClutterStage *stage)
{ {
clutter_threads_add_timeout (1000/60, perf_fake_mouse_cb, stage); clutter_threads_add_timeout (1000/60, perf_fake_mouse_cb, stage);
} }
static inline void void clutter_perf_fps_report (const gchar *id)
clutter_perf_fps_report (const gchar *id)
{ {
g_print ("\n@ %s: %.2f fps \n", g_print ("\n@ %s: %.2f fps \n",
id, testframes / g_timer_elapsed (testtimer, NULL)); id, testframes / g_timer_elapsed (testtimer, NULL));

View File

@@ -1,4 +1,6 @@
{ {
global:
gl*;
local: local:
*; *;
}; }

View File

@@ -8,20 +8,16 @@ cogl_gles2_sources = [
'cogl-gles2-api.c', 'cogl-gles2-api.c',
] ]
libmutter_cogl_gles2_map = 'libmutter-cogl-gles2.map'
libmutter_cogl_gles2_link_args = [
'-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(),
libmutter_cogl_gles2_map),
]
libmutter_cogl_gles2 = shared_library('mutter-cogl-gles2-' + libmutter_api_version, libmutter_cogl_gles2 = shared_library('mutter-cogl-gles2-' + libmutter_api_version,
sources: [cogl_gles2_sources, cogl_gles2_public_headers], sources: [cogl_gles2_sources, cogl_gles2_public_headers],
version: '0.0.0', soversion: '0.0.0',
soversion: 0,
c_args: cogl_c_args, c_args: cogl_c_args,
include_directories: [cogl_includepath, cogl_path_includepath], include_directories: [cogl_includepath, cogl_path_includepath],
link_depends: libmutter_cogl_gles2_map, link_depends: 'libmutter-cogl-gles2.map',
link_args: libmutter_cogl_gles2_link_args, dependencies: [
dependencies: libmutter_cogl_dep, cogl_deps,
libmutter_cogl_dep
],
install_rpath: pkglibdir, install_rpath: pkglibdir,
install_dir: pkglibdir, install_dir: pkglibdir,
install: true, install: true,

View File

@@ -3,4 +3,4 @@ global:
cogl_pango_*; cogl_pango_*;
local: local:
*; *;
}; }

View File

@@ -15,24 +15,18 @@ cogl_pango_public_headers = [
] ]
cogl_pango_deps = [ cogl_pango_deps = [
cogl_deps,
pango_dep, pango_dep,
pangocairo_dep, pangocairo_dep,
libmutter_cogl_dep, libmutter_cogl_dep,
] ]
libmutter_cogl_pango_map = 'libmutter-cogl-pango.map'
libmutter_cogl_pango_link_args = [
'-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(),
libmutter_cogl_pango_map),
]
libmutter_cogl_pango = shared_library('mutter-cogl-pango-' + libmutter_api_version, libmutter_cogl_pango = shared_library('mutter-cogl-pango-' + libmutter_api_version,
sources: [cogl_pango_sources, cogl_pango_public_headers], sources: [cogl_pango_sources, cogl_pango_public_headers],
version: '0.0.0', soversion: '0.0.0',
soversion: 0,
c_args: cogl_c_args, c_args: cogl_c_args,
include_directories: [cogl_includepath, cogl_path_includepath], include_directories: [cogl_includepath, cogl_path_includepath],
link_depends: libmutter_cogl_pango_map, link_depends: 'libmutter-cogl-pango.map',
link_args: libmutter_cogl_pango_link_args,
dependencies: [cogl_pango_deps], dependencies: [cogl_pango_deps],
install_rpath: pkglibdir, install_rpath: pkglibdir,
install_dir: pkglibdir, install_dir: pkglibdir,

View File

@@ -1358,13 +1358,13 @@ _cogl_path_build_fill_attribute_buffer (CoglPath *path)
gluTessNormal (tess.glu_tess, 0.0, 0.0, 1.0); gluTessNormal (tess.glu_tess, 0.0, 0.0, 1.0);
gluTessCallback (tess.glu_tess, GLU_TESS_BEGIN_DATA, gluTessCallback (tess.glu_tess, GLU_TESS_BEGIN_DATA,
(GCallback) _cogl_path_tesselator_begin); _cogl_path_tesselator_begin);
gluTessCallback (tess.glu_tess, GLU_TESS_VERTEX_DATA, gluTessCallback (tess.glu_tess, GLU_TESS_VERTEX_DATA,
(GCallback) _cogl_path_tesselator_vertex); _cogl_path_tesselator_vertex);
gluTessCallback (tess.glu_tess, GLU_TESS_END_DATA, gluTessCallback (tess.glu_tess, GLU_TESS_END_DATA,
(GCallback) _cogl_path_tesselator_end); _cogl_path_tesselator_end);
gluTessCallback (tess.glu_tess, GLU_TESS_COMBINE_DATA, gluTessCallback (tess.glu_tess, GLU_TESS_COMBINE_DATA,
(GCallback) _cogl_path_tesselator_combine); _cogl_path_tesselator_combine);
gluTessBeginPolygon (tess.glu_tess, &tess); gluTessBeginPolygon (tess.glu_tess, &tess);

Some files were not shown because too many files have changed in this diff Show More