Commit Graph

5971 Commits

Author SHA1 Message Date
Emmanuele Bassi
0dc4986f66 text: Fix the implementation of delete_chars()
The internal delete_text() implementation takes a start and an end
position, whereas the public delete_chars() method takes a number of
characters to delete starting from the current cursor position.
2014-01-24 18:49:18 +00:00
Emmanuele Bassi
773e544c51 settings: Make unscaled-font-dpi override font-dpi
The :unscaled-font-dpi property is used to override the existing
:font-dpi value when running on high DPI density displays; since it's a
write-only property we don't need to have a separate storage, nor we
need to choose between :font-dpi and :unscaled-font-dpi depending on
whether or not either has been set. If we select which one to use
between :font-dpi and :unscaled-font-dpi when computing the font
resolution, we end up breaking the code that relies on changing
:font-dpi directly on a per-Settings basis.
2014-01-23 12:17:09 +00:00
Emmanuele Bassi
696a536b26 settings: Add CLUTTER_DPI_SCALE
Like we do for the windowing surfaces, we should have a run time knob
(in the form of an environment variable) to allow changing the scaling
factor of the font resolution.
2014-01-23 12:17:09 +00:00
Emmanuele Bassi
30d1e47c4e x11/stage: Store new size on unrealized resize()
If the StageX11 is asked to resize itself while not being realized, then
we just need to store the new size and return.
2014-01-23 12:17:09 +00:00
Emmanuele Bassi
857f53f42d canvas: Add scale-factor property
We need to provide an escape hatch to ClutterCanvas so that it's
possible to override the window-scaling-factor ClutterSetting. This is
going to be useful in the future in case the user has better knowledge
of the window scaling factor that is going to be used with a specific
set of ClutterCanvas contents (e.g. on different outputs or stages).

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
c1d6194d24 canvas: Use the window-scaling-factor setting
ClutterCanvas is a ClutterContent interface implementation; this means
that it can be created and modified regardless of whether it is
associated to a specific actor or a stage. For this reason, we cannot
walk the hierarchy and get the window scaling factor for high DPI
density displays out of the ClutterStage when we create the Cairo
surface that we will use to draw the canvas contents on.

We can use ClutterSettings:window-scaling-factor instead, since it's
what each ClutterStage will use anyway.

This will get slightly more complicated when we support per-output
window scaling factors (like on Wayland), but that will require changes
in the entire settings architecture anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
ed0633468f settings: Remove explicit stage scaling factor update
We can rely on the window-scaling-factor property notification instead.

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
c1c59bd898 x11/stage: Resize on window-scaling-factor changes
If we get a change in the window scaling factor we want to resize the
backing store of each stage, so we use the notification on the
ClutterSettings:window-scaling-factor property to do so.

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
2c8a19b8c1 x11/stage: Remove CLUTTER_SCALE handling
Use the ClutterSettings:window-scaling-factor property instead.

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
afd87abb70 settings: Handle window scaling factor internally
We want the settings object to handle setting and getting the
window scaling factor value, both through backend-specific settings and
through the CLUTTER_SCALE environment variable. This means turning the
ClutterSettings:window-scaling-factor property into a readwrite one,
instead of write-only, so that ClutterStage implementations will be able
to query the window scaling factor on construction.

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
69eb2e5f3b settings: Add window scaling related settings
We share two settings with GDK, so we can pick the window scaling factor
and the unscaled font resolution when we initialize Clutter.

https://bugzilla.gnome.org/show_bug.cgi?id=705915
2014-01-20 12:26:46 +00:00
Emmanuele Bassi
33316ce168 stage: Check coordinate validity in do_pick()
We do some argument validation inside _clutter_stage_do_pick(), which is
the internal version of clutter_stage_get_actor_at_pos(), but we don't
do coordinate space validation, and instead we rely on call sites doing
the right thing.

We should, instead, remove the argument validation from the internal
function, which is pointless and against the coding practices, but do
coordinate space validation internally.

https://bugzilla.gnome.org/show_bug.cgi?id=722322
2014-01-20 12:26:46 +00:00
Alejandro Piñeiro
cadbeceff0 clutter-text: emitting ClutterText::insert-text before actual changes on the text
https://bugzilla.gnome.org/show_bug.cgi?id=722220
2014-01-16 18:04:22 +01:00
Alejandro Piñeiro
bbc7d20f5e clutter-text: emitting ClutterText::delete-text before actual changes on the text
https://bugzilla.gnome.org/show_bug.cgi?id=722220
2014-01-16 17:39:48 +01:00
Alejandro Piñeiro
c681e901e4 a11y: compute properly if there is text selected
https://bugzilla.gnome.org/show_bug.cgi?id=722188
2014-01-14 18:43:48 +01:00
Emmanuele Bassi
ad39d3d1ae Make abicheck.sh output TAP
So that we can run it under the TAP harness like the rest of the
conformance test suite.
2013-12-12 18:51:11 +00:00
Emmanuele Bassi
b1eb412c23 tests: Use an internal setter for disabling vblank sync
Instead of using g_setenv().
2013-12-12 18:51:11 +00:00
Emmanuele Bassi
2a660fa298 Fully rework the conformance test suite
The current conformance test suite is suboptimal in many ways.

All tests are built into the same binary, which makes adding new tests,
builting tests, and running groups of tests much more awkward than it
needs to be. The first issue, especially, raises the bar of contribution
in a significant way, while the other two take their toll on the
maintainer. All of these changes were introduced back when we had both
Clutter and Cogl tests in tree, and because we were building the test
suite for every single change; since then, Cogl moved out of tree with
all its tests, and we build the conformance test suite only when running
the `check` make target.

This admittedly large-ish commit changes the way the conformance test
suite works, taking advantage of the changes in the GTest API and test
harness.

First of all, all tests are now built separately, using their own test
suite as defined by each separate file. All tests run under the TAP
harness provided by GTest and Automake, to gather a proper report using
the Test Anything Protocol without using the `gtester` harness and the
`gtester-report` script. We also use the Makefile rules provided by GLib
to vastly simplify the build environment for the conformance test suite.

On top of the changes for the build and harness, we also provide new API
for creating and running test suites for Clutter. The API is public,
because the test suite has to use it, but it's minimal and mostly
provides convenience wrappers around GTest that make writing test units
for Clutter easier.

This commit disables all tests in the conformance test suite, as well as
moving the data files outside of the tests/data directory; the next few
commits will re-establish the conformance test suite separately so we
can check that everything works in a reliable way.
2013-12-12 18:51:11 +00:00
Emmanuele Bassi
ed2fdf85f6 gesture: Make threshold-trigger-edge public
When the threshold-trigger-edge property was introduced in
GestureAction, it was late in the cycle and I elected to keep it
private, given the fact that nobody was subclassing GestureAction
outside of Clutter itself.

These days, people are experimenting more with the GestureAction API, so
they will need access to the various knobs that control the class
default behaviour.

https://bugzilla.gnome.org/show_bug.cgi?id=710227
2013-12-05 15:20:39 +00:00
Lionel Landwerlin
b0227644ff gesture-action: set default edge value to NONE to restore initial behavior
https://bugzilla.gnome.org/show_bug.cgi?id=710229

https://bugzilla.gnome.org/show_bug.cgi?id=710227
2013-12-05 15:20:39 +00:00
Emmanuele Bassi
8cb326dc54 Explicitly set the trigger edge in GestureAction subclasses
Each GestureAction subclass has its own trigger edge handling, so we
want to be resilient in case of changes in the super-class.

https://bugzilla.gnome.org/show_bug.cgi?id=710227
2013-12-05 15:20:39 +00:00
Emmanuele Bassi
154ca6ef99 gesture: Clean up trigger edge accessors
Use G_GNUC_INTERNAL instead of the leading underscore, as we may make
the accessor functions public at some point. Also, clean up the
documentation.

https://bugzilla.gnome.org/show_bug.cgi?id=710227
2013-12-05 15:20:39 +00:00
Lionel Landwerlin
97724939c8 gesture-action: fix memory corruption
abcf1d589f introduced a crasher because
the 'point' variable points to a piece of memory that is being
reallocated by the begin_gesture (by a g_array_set_size) call 5 lines
before.

https://bugzilla.gnome.org/show_bug.cgi?id=710227
2013-12-05 14:42:21 +00:00
Owen W. Taylor
cbb9d1e062 ClutterStageCogl: Ignore a clip the size of the stage
If the clip region includes the entire stage, ignore it - we aren't
actually clipped.

https://bugzilla.gnome.org/show_bug.cgi?id=719901
2013-12-05 08:38:16 -05:00
Owen W. Taylor
97dcb108d0 ClutterStageCogl: Clip in the right coordinate system
Our clip coordinates are relative to the stage, not model-view
transformed. cogl_framebuffer_push_rectangle_clip() was accidentally
used instead of cogl_framebuffer_push_scissor_clip() when porting
to the framebuffer clip API.

https://bugzilla.gnome.org/show_bug.cgi?id=719900
2013-12-05 08:38:16 -05:00
Owen W. Taylor
a2551dfa60 ClutterStage: Don't add empty actors to the stage clip
Currently, if an actor with an empty paint volume is queued for redraw, it
will union in the box +0+0x1x1 to the stage clip bounds - avoid that
by special casing empty paint volumes.

https://bugzilla.gnome.org/show_bug.cgi?id=719747
2013-12-04 21:53:52 -05:00
Emmanuele Bassi
3fdee4efe9 docs: Fix syntax errors in annotations 2013-12-04 16:09:09 +00:00
Emmanuele Bassi
a64742f3e4 paint-node: Get the framebuffer from the root node
The PaintNode hierarchy should have the ability to retrieve the
current active framebuffer by itself, instead of asking Cogl using the
global state API.

In order to do this, we ask the root node of a PaintNode graph for the
active framebuffer. In the current, 1.x-compatibility mode we have two
potential root node types: ClutterRootNode, used by ClutterStage; and
ClutterDummyNode, used a local root for each actor. The former takes a
framebuffer as part of its construction; the latter takes the actor that
acts as the local top-level during the actor's paint sequence, which
means we can get the active framebuffer from the stage associated to the
actor.

By keeping track of the active framebuffer on the node themselves we can
drop the usage of cogl_get_draw_framebuffer() in their implementation.
2013-12-04 16:07:17 +00:00
Emmanuele Bassi
e619de20d8 text: Add a hacky fallback for the framebuffer
The text-cache conformance test breaks because ClutterText gets a paint
without an active framebuffer associated to the ClutterStage. Keep a
fallback while we investigate the issue.
2013-12-04 16:07:17 +00:00
Emmanuele Bassi
705640367a Use the non-deprecated Cogl clipping API
Cogl 1.18 deprecated the global clipping API in favour of the
per-framebuffer one, but since we're using the 2.0 API internally we
don't have access to the deprecated symbols any more.

This is pretty much a mechanical port for all the places where we're
still using the old 1.x API.
2013-12-04 16:07:17 +00:00
Emmanuele Bassi
1b45841414 actor: Add private getter for the active framebuffer
Instead of asking every internal user to get the stage and get the
active framebuffer from it, we can wrap it up ourselves, and do some
sanity checks as well.
2013-12-04 16:07:17 +00:00
Florian Müllner
992f2ca7b5 input-device: Guard against double free
Dispose() may be called more than once, so calling g_free directly
on the device name is unsafe. Instead, use g_clear_pointer() to
make sure we don't attempt to free the memory again.

https://bugzilla.gnome.org/show_bug.cgi?id=719563
2013-11-29 15:56:48 +00:00
Owen W. Taylor
2e85269368 Don't queue redraws when reallocating actor that haven't moved
When support for implicit animation of actor position was added,
the optimization for not queueing when allocating an actor back
to the same location was lost. This optimization is important
since when we are hierarchically allocating down from the top of
the stage we constantly reallocate the actors at the top of the
hierarchy back to the same place.

https://bugzilla.gnome.org/show_bug.cgi?id=719368
2013-11-26 12:30:00 -05:00
Owen W. Taylor
0b536c02f9 Bind constraints: Don't force redraws on source relayout
When the source actor potentially changes size, that shouldn't
necessarily result in the target actor being redrawn - it should
be like when a child of a container is reallocated due to changes
in its siblings or parent - it should redraw only to the extent
that it is moved and resized. Privately export an internal function
from clutter-actor.c to allow getting this right.

https://bugzilla.gnome.org/show_bug.cgi?id=719367
2013-11-26 11:12:12 -05:00
Rui Matos
3cd9a70fea device-manager-evdev: Stop using deprecated libevdev API
Fixes compiler warnings with libevdev >= 0.4 and makes use of a new
function to set the clock id instead of doing the ioctl directly.

https://bugzilla.gnome.org/show_bug.cgi?id=712816
2013-11-21 19:34:15 +01:00
Rui Matos
05e6bcc666 device-manager-evdev: Fix a segfault on device removal
Master devices have a NULL sysfs path so use g_strcmp0 to handle them
without crashing.

https://bugzilla.gnome.org/show_bug.cgi?id=712812
2013-11-21 19:34:14 +01:00
Rui Matos
7d8f72a60e device-manager-evdev: Unref devices on removal
https://bugzilla.gnome.org/show_bug.cgi?id=712812
2013-11-21 19:34:14 +01:00
Rui Matos
ce1f8f1dd0 device-manager-xi2: Fix device instances leaking on removal
Don't add an extra reference when adding to the devices hash table. We
already own the initial reference.

https://bugzilla.gnome.org/show_bug.cgi?id=712812
2013-11-21 19:34:14 +01:00
Rui Matos
18b9384e66 input-device: Fix a GArray leak
https://bugzilla.gnome.org/show_bug.cgi?id=712812
2013-11-21 19:34:14 +01:00
Rui Matos
507d8b1cef input-device: Use g_clear_pointer
https://bugzilla.gnome.org/show_bug.cgi?id=712812
2013-11-21 19:34:14 +01:00
Rui Matos
1d11cc324e device-manager: Don't emit device-removed with a finalized instance
https://bugzilla.gnome.org/show_bug.cgi?id=712812
2013-11-21 19:34:14 +01:00
Jasper St. Pierre
a427c120c2 stage: Remove the pick buffer caching
Since the journal is flushed on context switches, trying to use a cached
buffer means that we will use glReadPixels when picking, which isn't what
we want. Instead, always use a clipped draw, and remove the logic for
caching the pick buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=712563
2013-11-19 11:21:14 -05:00
Jasper St. Pierre
9082ccc30b stage: Fix indentation in pick methods
https://bugzilla.gnome.org/show_bug.cgi?id=712563
2013-11-19 11:21:14 -05:00
Emmanuele Bassi
7af55d23e4 Deprecate ClutterTableLayout
The table layout manager has various issues:

  • no support for RTL flipping
  • most of the layout API is legacy, and has been replaced by the
    alignment and expansion flags on ClutterActor
  • the animation API is legacy, and has been replaced by the
    implicitly animatable allocation
  • the spanning cells handling is a bit awkward, as is its API

On top of that, we imported the grid layout management policy from GTK+
into ClutterGridLayout, which provides all the required features in a
more well-designed API.

Instead of wasting time and resources updating TableLayout, we should
deprecate it and point developers of the GridLayout.
2013-11-19 00:31:53 +00:00
Emmanuele Bassi
56b579248e Update symbols file 2013-11-19 00:31:53 +00:00
Neil Roberts
70292672c4 Add API to install an event filter
This adds clutter_event_add/remove_filter which adds a callback
function which will receive all Clutter events just before the event
signal is emitted for them. The event filter will be invoked
regardless of any grabs or captures. This will be used by Mutter which
wants to access the events at a lower level then the event bubbling
mechanism. It needs to see all mouse motion events even if there is a
grab in place.

https://bugzilla.gnome.org/show_bug.cgi?id=707560
2013-11-14 14:32:17 -05:00
Jasper St. Pierre
c2b0b9aace input-device-xi2: Calculate the correct state for button events
The state that the X server sends for button events, by specification,
contains the button state before the event. We need to synthesize in
the result of the event in order to determine what the current button
state is.

https://bugzilla.gnome.org/show_bug.cgi?id=712322
2013-11-14 14:30:30 -05:00
Jasper St. Pierre
0fda81feab Remove use of XFixes for showing/hiding the cursor
XFixesShowCursor / XFixesHideCursor does not actually take the suppled
window argument into account -- the effect is actually global. Use
XDefineCursor instead.

https://bugzilla.gnome.org/show_bug.cgi?id=707071
2013-11-14 18:34:40 +00:00
Jasper St. Pierre
98e03fc03f device-manager-xi2: Clamp coordinates of events to the stage coordinates
The X server can sometimes send us coordinates in the negatives or above
our window in extreme cases. Ensure that the user never sees this.
2013-11-14 18:34:40 +00:00
Jasper St. Pierre
1de024b5fa device-manager-xi2: Don't divide by the scale factor twice
The coordinates we pass into translate_axes are already scaled.
2013-11-14 18:34:40 +00:00