Compare commits
1 Commits
gbsneto/cl
...
wip/carlos
Author | SHA1 | Date | |
---|---|---|---|
![]() |
162d6d45a0 |
@@ -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
|
|
||||||
|
@@ -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
25
NEWS
@@ -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]
|
||||||
|
@@ -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__ */
|
|
@@ -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,
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
|
@@ -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__ */
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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.
|
||||||
|
@@ -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
|
||||||
|
@@ -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__ */
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
@@ -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 */
|
|
@@ -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));
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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__ */
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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]);
|
||||||
|
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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"
|
||||||
|
@@ -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;
|
|
||||||
}
|
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
|
||||||
}
|
|
@@ -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);
|
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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));
|
||||||
|
@@ -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,
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
]
|
]
|
||||||
|
119
clutter/tests/conform/actor-offscreen-limit-max-size.c
Normal file
119
clutter/tests/conform/actor-offscreen-limit-max-size.c
Normal 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)
|
||||||
|
)
|
@@ -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);
|
||||||
|
@@ -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',
|
||||||
|
@@ -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',
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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",
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
*--------------------------------------------------*/
|
*--------------------------------------------------*/
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
@@ -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))
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
@@ -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 ();
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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))
|
||||||
|
@@ -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,
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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 ();
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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[])
|
||||||
{
|
{
|
||||||
|
@@ -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))
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
|
@@ -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[])
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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,
|
||||||
|
@@ -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[])
|
||||||
{
|
{
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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));
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
global:
|
||||||
|
gl*;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
}
|
||||||
|
@@ -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,
|
||||||
|
@@ -3,4 +3,4 @@ global:
|
|||||||
cogl_pango_*;
|
cogl_pango_*;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
}
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
Reference in New Issue
Block a user