Files
gtk3/gdk/quartz/gdkgeometry-quartz.c
Benjamin Otte 65ac54bb23 gdk: Make window moves a custom vfunc
The window move code needs special attention for multiple reasons:
- invalid areas for expose events need to be modified
- self-copy is not supported by Cairo
- in X11, copying from an overlapped Window might cause unexposed areas
  to be copied in, spo expose events for those need to be generated.

This was all special cased in various parts of the code. By making it an
explicit vfunc, we can work around it.
2010-08-10 21:02:28 +02:00

59 lines
1.9 KiB
C

/* gdkgeometry-quartz.c
*
* Copyright (C) 2005 Imendio AB
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include "gdkprivate-quartz.h"
/* FIXME: Tis function has never been compiled.
* Please make it work. */
void
_gdk_quartz_window_translate (GdkWindow *window,
cairo_region_t *area,
gint dx,
gint dy)
{
GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *)private->impl;
GdkRectangle extents;
cairo_region_get_extents (area, &extents);
[window_impl->view scrollRect:NSMakeRect (extents.x, extents.y, extents.width, extents.height)
by:NSMakeSize (dx, dy)];
if (impl->needs_display_region)
{
intersection = cairo_region_copy (impl->needs_display_region);
cairo_region_intersect_rectangle (intersection, extents);
cairo_region_translate (intersection, dx, dy);
_gdk_quartz_window_set_needs_display_in_region (window, intersection);
cairo_region_destroy (intersection);
}
}
gboolean
_gdk_quartz_window_queue_antiexpose (GdkWindow *window,
cairo_region_t *area)
{
return FALSE;
}