summaryrefslogtreecommitdiff
path: root/gdk/gdksurfaceimpl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdksurfaceimpl.c')
-rw-r--r--gdk/gdksurfaceimpl.c312
1 files changed, 0 insertions, 312 deletions
diff --git a/gdk/gdksurfaceimpl.c b/gdk/gdksurfaceimpl.c
deleted file mode 100644
index c038e61e11..0000000000
--- a/gdk/gdksurfaceimpl.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * 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, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
- * file for a list of people on the GTK+ Team. See the ChangeLog
- * files for a list of changes. These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-
-#include "config.h"
-
-#include "gdksurfaceimpl.h"
-
-#include "gdkinternals.h"
-
-
-G_DEFINE_TYPE (GdkSurfaceImpl, gdk_surface_impl, G_TYPE_OBJECT);
-
-static gboolean
-gdk_surface_impl_beep (GdkSurface *surface)
-{
- /* FALSE means surfaces can't beep, so the display will be
- * made to beep instead. */
- return FALSE;
-}
-
-static GdkDisplay *
-get_display_for_surface (GdkSurface *primary,
- GdkSurface *secondary)
-{
- GdkDisplay *display = gdk_surface_get_display (primary);
-
- if (display)
- return display;
-
- display = gdk_surface_get_display (secondary);
-
- if (display)
- return display;
-
- g_warning ("no display for surface, using default");
- return gdk_display_get_default ();
-}
-
-static GdkMonitor *
-get_monitor_for_rect (GdkDisplay *display,
- const GdkRectangle *rect)
-{
- gint biggest_area = G_MININT;
- GdkMonitor *best_monitor = NULL;
- GdkMonitor *monitor;
- GdkRectangle workarea;
- GdkRectangle intersection;
- gint x;
- gint y;
- gint i;
-
- for (i = 0; i < gdk_display_get_n_monitors (display); i++)
- {
- monitor = gdk_display_get_monitor (display, i);
- gdk_monitor_get_workarea (monitor, &workarea);
-
- if (gdk_rectangle_intersect (&workarea, rect, &intersection))
- {
- if (intersection.width * intersection.height > biggest_area)
- {
- biggest_area = intersection.width * intersection.height;
- best_monitor = monitor;
- }
- }
- }
-
- if (best_monitor)
- return best_monitor;
-
- x = rect->x + rect->width / 2;
- y = rect->y + rect->height / 2;
-
- return gdk_display_get_monitor_at_point (display, x, y);
-}
-
-static gint
-get_anchor_x_sign (GdkGravity anchor)
-{
- switch (anchor)
- {
- case GDK_GRAVITY_STATIC:
- case GDK_GRAVITY_NORTH_WEST:
- case GDK_GRAVITY_WEST:
- case GDK_GRAVITY_SOUTH_WEST:
- return -1;
-
- default:
- case GDK_GRAVITY_NORTH:
- case GDK_GRAVITY_CENTER:
- case GDK_GRAVITY_SOUTH:
- return 0;
-
- case GDK_GRAVITY_NORTH_EAST:
- case GDK_GRAVITY_EAST:
- case GDK_GRAVITY_SOUTH_EAST:
- return 1;
- }
-}
-
-static gint
-get_anchor_y_sign (GdkGravity anchor)
-{
- switch (anchor)
- {
- case GDK_GRAVITY_STATIC:
- case GDK_GRAVITY_NORTH_WEST:
- case GDK_GRAVITY_NORTH:
- case GDK_GRAVITY_NORTH_EAST:
- return -1;
-
- default:
- case GDK_GRAVITY_WEST:
- case GDK_GRAVITY_CENTER:
- case GDK_GRAVITY_EAST:
- return 0;
-
- case GDK_GRAVITY_SOUTH_WEST:
- case GDK_GRAVITY_SOUTH:
- case GDK_GRAVITY_SOUTH_EAST:
- return 1;
- }
-}
-
-static gint
-maybe_flip_position (gint bounds_pos,
- gint bounds_size,
- gint rect_pos,
- gint rect_size,
- gint surface_size,
- gint rect_sign,
- gint surface_sign,
- gint offset,
- gboolean flip,
- gboolean *flipped)
-{
- gint primary;
- gint secondary;
-
- *flipped = FALSE;
- primary = rect_pos + (1 + rect_sign) * rect_size / 2 + offset - (1 + surface_sign) * surface_size / 2;
-
- if (!flip || (primary >= bounds_pos && primary + surface_size <= bounds_pos + bounds_size))
- return primary;
-
- *flipped = TRUE;
- secondary = rect_pos + (1 - rect_sign) * rect_size / 2 - offset - (1 - surface_sign) * surface_size / 2;
-
- if (secondary >= bounds_pos && secondary + surface_size <= bounds_pos + bounds_size)
- return secondary;
-
- *flipped = FALSE;
- return primary;
-}
-
-static void
-gdk_surface_impl_move_to_rect (GdkSurface *surface,
- const GdkRectangle *rect,
- GdkGravity rect_anchor,
- GdkGravity surface_anchor,
- GdkAnchorHints anchor_hints,
- gint rect_anchor_dx,
- gint rect_anchor_dy)
-{
- GdkSurface *transient_for_toplevel;
- GdkDisplay *display;
- GdkMonitor *monitor;
- GdkRectangle bounds;
- GdkRectangle root_rect = *rect;
- GdkRectangle flipped_rect;
- GdkRectangle final_rect;
- gboolean flipped_x;
- gboolean flipped_y;
-
- /*
- * First translate the anchor rect to toplevel coordinates. This is needed
- * because not all backends will be able to get root coordinates for
- * non-toplevel surfaces.
- */
- transient_for_toplevel = surface->transient_for;
-
- gdk_surface_get_root_coords (transient_for_toplevel,
- root_rect.x,
- root_rect.y,
- &root_rect.x,
- &root_rect.y);
-
- display = get_display_for_surface (surface, surface->transient_for);
- monitor = get_monitor_for_rect (display, &root_rect);
- gdk_monitor_get_workarea (monitor, &bounds);
-
- flipped_rect.width = surface->width - surface->shadow_left - surface->shadow_right;
- flipped_rect.height = surface->height - surface->shadow_top - surface->shadow_bottom;
- flipped_rect.x = maybe_flip_position (bounds.x,
- bounds.width,
- root_rect.x,
- root_rect.width,
- flipped_rect.width,
- get_anchor_x_sign (rect_anchor),
- get_anchor_x_sign (surface_anchor),
- rect_anchor_dx,
- anchor_hints & GDK_ANCHOR_FLIP_X,
- &flipped_x);
- flipped_rect.y = maybe_flip_position (bounds.y,
- bounds.height,
- root_rect.y,
- root_rect.height,
- flipped_rect.height,
- get_anchor_y_sign (rect_anchor),
- get_anchor_y_sign (surface_anchor),
- rect_anchor_dy,
- anchor_hints & GDK_ANCHOR_FLIP_Y,
- &flipped_y);
-
- final_rect = flipped_rect;
-
- if (anchor_hints & GDK_ANCHOR_SLIDE_X)
- {
- if (final_rect.x + final_rect.width > bounds.x + bounds.width)
- final_rect.x = bounds.x + bounds.width - final_rect.width;
-
- if (final_rect.x < bounds.x)
- final_rect.x = bounds.x;
- }
-
- if (anchor_hints & GDK_ANCHOR_SLIDE_Y)
- {
- if (final_rect.y + final_rect.height > bounds.y + bounds.height)
- final_rect.y = bounds.y + bounds.height - final_rect.height;
-
- if (final_rect.y < bounds.y)
- final_rect.y = bounds.y;
- }
-
- if (anchor_hints & GDK_ANCHOR_RESIZE_X)
- {
- if (final_rect.x < bounds.x)
- {
- final_rect.width -= bounds.x - final_rect.x;
- final_rect.x = bounds.x;
- }
-
- if (final_rect.x + final_rect.width > bounds.x + bounds.width)
- final_rect.width = bounds.x + bounds.width - final_rect.x;
- }
-
- if (anchor_hints & GDK_ANCHOR_RESIZE_Y)
- {
- if (final_rect.y < bounds.y)
- {
- final_rect.height -= bounds.y - final_rect.y;
- final_rect.y = bounds.y;
- }
-
- if (final_rect.y + final_rect.height > bounds.y + bounds.height)
- final_rect.height = bounds.y + bounds.height - final_rect.y;
- }
-
- flipped_rect.x -= surface->shadow_left;
- flipped_rect.y -= surface->shadow_top;
- flipped_rect.width += surface->shadow_left + surface->shadow_right;
- flipped_rect.height += surface->shadow_top + surface->shadow_bottom;
-
- final_rect.x -= surface->shadow_left;
- final_rect.y -= surface->shadow_top;
- final_rect.width += surface->shadow_left + surface->shadow_right;
- final_rect.height += surface->shadow_top + surface->shadow_bottom;
-
- if (final_rect.width != surface->width || final_rect.height != surface->height)
- gdk_surface_move_resize (surface, final_rect.x, final_rect.y, final_rect.width, final_rect.height);
- else
- gdk_surface_move (surface, final_rect.x, final_rect.y);
-
- g_signal_emit_by_name (surface,
- "moved-to-rect",
- &flipped_rect,
- &final_rect,
- flipped_x,
- flipped_y);
-}
-
-static void
-gdk_surface_impl_class_init (GdkSurfaceImplClass *impl_class)
-{
- impl_class->beep = gdk_surface_impl_beep;
- impl_class->move_to_rect = gdk_surface_impl_move_to_rect;
-}
-
-static void
-gdk_surface_impl_init (GdkSurfaceImpl *impl)
-{
-}