Blame gdk/gdkdraw.c

Packit Service fb6fa5
/* GDK - The GIMP Drawing Kit
Packit Service fb6fa5
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
Packit Service fb6fa5
 * file for a list of people on the GTK+ Team.  See the ChangeLog
Packit Service fb6fa5
 * files for a list of changes.  These files are distributed with
Packit Service fb6fa5
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include <math.h>
Packit Service fb6fa5
#include <pango/pangocairo.h>
Packit Service fb6fa5
#include <gdk-pixbuf/gdk-pixbuf.h>
Packit Service fb6fa5
#include "gdkcairo.h"
Packit Service fb6fa5
#include "gdkdrawable.h"
Packit Service fb6fa5
#include "gdkinternals.h"
Packit Service fb6fa5
#include "gdkwindow.h"
Packit Service fb6fa5
#include "gdkscreen.h"
Packit Service fb6fa5
#include "gdkpixbuf.h"
Packit Service fb6fa5
#include "gdkalias.h"
Packit Service fb6fa5
Packit Service fb6fa5
static GdkImage*    gdk_drawable_real_get_image (GdkDrawable     *drawable,
Packit Service fb6fa5
						 gint             x,
Packit Service fb6fa5
						 gint             y,
Packit Service fb6fa5
						 gint             width,
Packit Service fb6fa5
						 gint             height);
Packit Service fb6fa5
static GdkDrawable* gdk_drawable_real_get_composite_drawable (GdkDrawable  *drawable,
Packit Service fb6fa5
							      gint          x,
Packit Service fb6fa5
							      gint          y,
Packit Service fb6fa5
							      gint          width,
Packit Service fb6fa5
							      gint          height,
Packit Service fb6fa5
							      gint         *composite_x_offset,
Packit Service fb6fa5
							      gint         *composite_y_offset);
Packit Service fb6fa5
static GdkRegion *  gdk_drawable_real_get_visible_region     (GdkDrawable  *drawable);
Packit Service fb6fa5
static void         gdk_drawable_real_draw_pixbuf            (GdkDrawable  *drawable,
Packit Service fb6fa5
							      GdkGC        *gc,
Packit Service fb6fa5
							      GdkPixbuf    *pixbuf,
Packit Service fb6fa5
							      gint          src_x,
Packit Service fb6fa5
							      gint          src_y,
Packit Service fb6fa5
							      gint          dest_x,
Packit Service fb6fa5
							      gint          dest_y,
Packit Service fb6fa5
							      gint          width,
Packit Service fb6fa5
							      gint          height,
Packit Service fb6fa5
							      GdkRgbDither  dither,
Packit Service fb6fa5
							      gint          x_dither,
Packit Service fb6fa5
							      gint          y_dither);
Packit Service fb6fa5
static void         gdk_drawable_real_draw_drawable          (GdkDrawable  *drawable,
Packit Service fb6fa5
							      GdkGC	   *gc,
Packit Service fb6fa5
							      GdkDrawable  *src,
Packit Service fb6fa5
							      gint          xsrc,
Packit Service fb6fa5
							      gint	    ysrc,
Packit Service fb6fa5
							      gint	    xdest,
Packit Service fb6fa5
							      gint	    ydest,
Packit Service fb6fa5
							      gint	    width,
Packit Service fb6fa5
							      gint	    height);
Packit Service fb6fa5
     
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_ABSTRACT_TYPE (GdkDrawable, gdk_drawable, G_TYPE_OBJECT)
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_drawable_class_init (GdkDrawableClass *klass)
Packit Service fb6fa5
{
Packit Service fb6fa5
  klass->get_image = gdk_drawable_real_get_image;
Packit Service fb6fa5
  klass->get_composite_drawable = gdk_drawable_real_get_composite_drawable;
Packit Service fb6fa5
  /* Default implementation for clip and visible region is the same */
Packit Service fb6fa5
  klass->get_clip_region = gdk_drawable_real_get_visible_region;
Packit Service fb6fa5
  klass->get_visible_region = gdk_drawable_real_get_visible_region;
Packit Service fb6fa5
  klass->draw_pixbuf = gdk_drawable_real_draw_pixbuf;
Packit Service fb6fa5
  klass->draw_drawable = gdk_drawable_real_draw_drawable;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_drawable_init (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* Manipulation of drawables
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_set_data:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @key: name to store the data under
Packit Service fb6fa5
 * @data: arbitrary data
Packit Service fb6fa5
 * @destroy_func: (allow-none): function to free @data, or %NULL
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This function is equivalent to g_object_set_data(),
Packit Service fb6fa5
 * the #GObject variant should be used instead.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void          
Packit Service fb6fa5
gdk_drawable_set_data (GdkDrawable   *drawable,
Packit Service fb6fa5
		       const gchar   *key,
Packit Service fb6fa5
		       gpointer	      data,
Packit Service fb6fa5
		       GDestroyNotify destroy_func)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_object_set_qdata_full (G_OBJECT (drawable),
Packit Service fb6fa5
                           g_quark_from_string (key),
Packit Service fb6fa5
                           data,
Packit Service fb6fa5
                           destroy_func);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_data:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @key: name the data was stored under
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Equivalent to g_object_get_data(); the #GObject variant should be
Packit Service fb6fa5
 * used instead.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: the data stored at @key
Packit Service fb6fa5
 **/
Packit Service fb6fa5
gpointer
Packit Service fb6fa5
gdk_drawable_get_data (GdkDrawable   *drawable,
Packit Service fb6fa5
		       const gchar   *key)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  return g_object_get_qdata (G_OBJECT (drawable),
Packit Service fb6fa5
                             g_quark_try_string (key));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_size:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @width: (out) (allow-none): location to store drawable's width, or %NULL
Packit Service fb6fa5
 * @height: (out) (allow-none): location to store drawable's height, or %NULL
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Fills *@width and *@height with the size of @drawable.
Packit Service fb6fa5
 * @width or @height can be %NULL if you only want the other one.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * On the X11 platform, if @drawable is a #GdkWindow, the returned
Packit Service fb6fa5
 * size is the size reported in the most-recently-processed configure
Packit Service fb6fa5
 * event, rather than the current size on the X server.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.24: Use gdk_window_get_width() and gdk_window_get_height() for
Packit Service fb6fa5
 *             #GdkWindows. Use gdk_pixmap_get_size() for #GdkPixmaps.
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_drawable_get_size (GdkDrawable *drawable,
Packit Service fb6fa5
		       gint        *width,
Packit Service fb6fa5
		       gint        *height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->get_size (drawable, width, height);  
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_visual:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Gets the #GdkVisual describing the pixel format of @drawable.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: a #GdkVisual
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.24: Use gdk_window_get_visual()
Packit Service fb6fa5
 */
Packit Service fb6fa5
GdkVisual*
Packit Service fb6fa5
gdk_drawable_get_visual (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->get_visual (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_depth:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Obtains the bit depth of the drawable, that is, the number of bits
Packit Service fb6fa5
 * that make up a pixel in the drawable's visual. Examples are 8 bits
Packit Service fb6fa5
 * per pixel, 24 bits per pixel, etc.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: number of bits per pixel
Packit Service fb6fa5
 **/
Packit Service fb6fa5
gint
Packit Service fb6fa5
gdk_drawable_get_depth (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), 0);
Packit Service fb6fa5
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->get_depth (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_screen:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Gets the #GdkScreen associated with a #GdkDrawable.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: the #GdkScreen associated with @drawable
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.2
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.24: Use gdk_window_get_screen() instead
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkScreen*
Packit Service fb6fa5
gdk_drawable_get_screen (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->get_screen (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_display:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Gets the #GdkDisplay associated with a #GdkDrawable.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: the #GdkDisplay associated with @drawable
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.2
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.24: Use gdk_window_get_display() instead
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkDisplay*
Packit Service fb6fa5
gdk_drawable_get_display (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return gdk_screen_get_display (gdk_drawable_get_screen (drawable));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_set_colormap:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @colormap: a #GdkColormap
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets the colormap associated with @drawable. Normally this will
Packit Service fb6fa5
 * happen automatically when the drawable is created; you only need to
Packit Service fb6fa5
 * use this function if the drawable-creating function did not have a
Packit Service fb6fa5
 * way to determine the colormap, and you then use drawable operations
Packit Service fb6fa5
 * that require a colormap. The colormap for all drawables and
Packit Service fb6fa5
 * graphics contexts you intend to use together should match. i.e.
Packit Service fb6fa5
 * when using a #GdkGC to draw to a drawable, or copying one drawable
Packit Service fb6fa5
 * to another, the colormaps should match.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_drawable_set_colormap (GdkDrawable *drawable,
Packit Service fb6fa5
                           GdkColormap *cmap)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (cmap == NULL || gdk_drawable_get_depth (drawable)
Packit Service fb6fa5
                    == cmap->visual->depth);
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->set_colormap (drawable, cmap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_colormap:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Gets the colormap for @drawable, if one is set; returns
Packit Service fb6fa5
 * %NULL otherwise.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: the colormap, or %NULL
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkColormap*
Packit Service fb6fa5
gdk_drawable_get_colormap (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->get_colormap (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_ref:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Deprecated equivalent of calling g_object_ref() on @drawable.
Packit Service fb6fa5
 * (Drawables were not objects in previous versions of GDK.)
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: the same @drawable passed in
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.0: Use g_object_ref() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkDrawable*
Packit Service fb6fa5
gdk_drawable_ref (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return (GdkDrawable *) g_object_ref (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_unref:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated equivalent of calling g_object_unref() on @drawable.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Deprecated: 2.0: Use g_object_unref() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_drawable_unref (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* Drawing
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_point:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @x: the x coordinate of the point.
Packit Service fb6fa5
 * @y: the y coordinate of the point.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a point, using the foreground color and other attributes of 
Packit Service fb6fa5
 * the #GdkGC.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_rectangle() and cairo_fill() or 
Packit Service fb6fa5
 * cairo_move_to() and cairo_stroke() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_point (GdkDrawable *drawable,
Packit Service fb6fa5
                GdkGC       *gc,
Packit Service fb6fa5
                gint         x,
Packit Service fb6fa5
                gint         y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkPoint point;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  point.x = x;
Packit Service fb6fa5
  point.y = y;
Packit Service fb6fa5
  
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_points (drawable, gc, &point, 1);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_line:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap). 
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @x1_: the x coordinate of the start point.
Packit Service fb6fa5
 * @y1_: the y coordinate of the start point.
Packit Service fb6fa5
 * @x2_: the x coordinate of the end point.
Packit Service fb6fa5
 * @y2_: the y coordinate of the end point.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a line, using the foreground color and other attributes of 
Packit Service fb6fa5
 * the #GdkGC.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_line_to() and cairo_stroke() instead.
Packit Service fb6fa5
 * Be aware that the default line width in Cairo is 2 pixels and that your
Packit Service fb6fa5
 * coordinates need to describe the center of the line. To draw a single
Packit Service fb6fa5
 * pixel wide pixel-aligned line, you would use:
Packit Service fb6fa5
 * |[cairo_set_line_width (cr, 1.0);
Packit Service fb6fa5
 * cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
Packit Service fb6fa5
 * cairo_move_to (cr, 0.5, 0.5);
Packit Service fb6fa5
 * cairo_line_to (cr, 9.5, 0.5);
Packit Service fb6fa5
 * cairo_stroke (cr);]|
Packit Service fb6fa5
 * See also <ulink url="http://cairographics.org/FAQ/#sharp_lines">the Cairo
Packit Service fb6fa5
 * FAQ</ulink> on this topic.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_line (GdkDrawable *drawable,
Packit Service fb6fa5
	       GdkGC       *gc,
Packit Service fb6fa5
	       gint         x1,
Packit Service fb6fa5
	       gint         y1,
Packit Service fb6fa5
	       gint         x2,
Packit Service fb6fa5
	       gint         y2)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkSegment segment;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  segment.x1 = x1;
Packit Service fb6fa5
  segment.y1 = y1;
Packit Service fb6fa5
  segment.x2 = x2;
Packit Service fb6fa5
  segment.y2 = y2;
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_segments (drawable, gc, &segment, 1);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_rectangle:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @filled: %TRUE if the rectangle should be filled.
Packit Service fb6fa5
 * @x: the x coordinate of the left edge of the rectangle.
Packit Service fb6fa5
 * @y: the y coordinate of the top edge of the rectangle.
Packit Service fb6fa5
 * @width: the width of the rectangle.
Packit Service fb6fa5
 * @height: the height of the rectangle.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a rectangular outline or filled rectangle, using the foreground color
Packit Service fb6fa5
 * and other attributes of the #GdkGC.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * A rectangle drawn filled is 1 pixel smaller in both dimensions than a 
Packit Service fb6fa5
 * rectangle outlined. Calling 
Packit Service fb6fa5
 * <literal>gdk_draw_rectangle (window, gc, TRUE, 0, 0, 20, 20)</literal> 
Packit Service fb6fa5
 * results in a filled rectangle 20 pixels wide and 20 pixels high. Calling
Packit Service fb6fa5
 * <literal>gdk_draw_rectangle (window, gc, FALSE, 0, 0, 20, 20)</literal> 
Packit Service fb6fa5
 * results in an outlined rectangle with corners at (0, 0), (0, 20), (20, 20),
Packit Service fb6fa5
 * and (20, 0), which makes it 21 pixels wide and 21 pixels high.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_rectangle() and cairo_fill() or cairo_stroke()
Packit Service fb6fa5
 * instead. For stroking, the same caveats for converting code apply as for
Packit Service fb6fa5
 * gdk_draw_line().
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_rectangle (GdkDrawable *drawable,
Packit Service fb6fa5
		    GdkGC       *gc,
Packit Service fb6fa5
		    gboolean     filled,
Packit Service fb6fa5
		    gint         x,
Packit Service fb6fa5
		    gint         y,
Packit Service fb6fa5
		    gint         width,
Packit Service fb6fa5
		    gint         height)
Packit Service fb6fa5
{  
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  if (width < 0 || height < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gint real_width;
Packit Service fb6fa5
      gint real_height;
Packit Service fb6fa5
      
Packit Service fb6fa5
      gdk_drawable_get_size (drawable, &real_width, &real_height);
Packit Service fb6fa5
Packit Service fb6fa5
      if (width < 0)
Packit Service fb6fa5
        width = real_width;
Packit Service fb6fa5
      if (height < 0)
Packit Service fb6fa5
        height = real_height;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_rectangle (drawable, gc, filled, x, y,
Packit Service fb6fa5
                                                     width, height);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_arc:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @filled: %TRUE if the arc should be filled, producing a 'pie slice'.
Packit Service fb6fa5
 * @x: the x coordinate of the left edge of the bounding rectangle.
Packit Service fb6fa5
 * @y: the y coordinate of the top edge of the bounding rectangle.
Packit Service fb6fa5
 * @width: the width of the bounding rectangle.
Packit Service fb6fa5
 * @height: the height of the bounding rectangle.
Packit Service fb6fa5
 * @angle1: the start angle of the arc, relative to the 3 o'clock position,
Packit Service fb6fa5
 *     counter-clockwise, in 1/64ths of a degree.
Packit Service fb6fa5
 * @angle2: the end angle of the arc, relative to @angle1, in 1/64ths 
Packit Service fb6fa5
 *     of a degree.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws an arc or a filled 'pie slice'. The arc is defined by the bounding
Packit Service fb6fa5
 * rectangle of the entire ellipse, and the start and end angles of the part 
Packit Service fb6fa5
 * of the ellipse to be drawn.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_arc() and cairo_fill() or cairo_stroke()
Packit Service fb6fa5
 * instead. Note that arcs just like any drawing operation in Cairo are
Packit Service fb6fa5
 * antialiased unless you call cairo_set_antialias().
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_arc (GdkDrawable *drawable,
Packit Service fb6fa5
	      GdkGC       *gc,
Packit Service fb6fa5
	      gboolean     filled,
Packit Service fb6fa5
	      gint         x,
Packit Service fb6fa5
	      gint         y,
Packit Service fb6fa5
	      gint         width,
Packit Service fb6fa5
	      gint         height,
Packit Service fb6fa5
	      gint         angle1,
Packit Service fb6fa5
	      gint         angle2)
Packit Service fb6fa5
{  
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  if (width < 0 || height < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gint real_width;
Packit Service fb6fa5
      gint real_height;
Packit Service fb6fa5
      
Packit Service fb6fa5
      gdk_drawable_get_size (drawable, &real_width, &real_height);
Packit Service fb6fa5
Packit Service fb6fa5
      if (width < 0)
Packit Service fb6fa5
        width = real_width;
Packit Service fb6fa5
      if (height < 0)
Packit Service fb6fa5
        height = real_height;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_arc (drawable, gc, filled,
Packit Service fb6fa5
                                               x, y, width, height, angle1, angle2);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_polygon:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @filled: %TRUE if the polygon should be filled. The polygon is closed
Packit Service fb6fa5
 *     automatically, connecting the last point to the first point if 
Packit Service fb6fa5
 *     necessary.
Packit Service fb6fa5
 * @points: an array of #GdkPoint structures specifying the points making 
Packit Service fb6fa5
 *     up the polygon.
Packit Service fb6fa5
 * @n_points: the number of points.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws an outlined or filled polygon.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_line_to() or cairo_append_path() and
Packit Service fb6fa5
 * cairo_fill() or cairo_stroke() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_polygon (GdkDrawable    *drawable,
Packit Service fb6fa5
		  GdkGC          *gc,
Packit Service fb6fa5
		  gboolean        filled,
Packit Service fb6fa5
		  const GdkPoint *points,
Packit Service fb6fa5
		  gint            n_points)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_polygon (drawable, gc, filled,
Packit Service fb6fa5
                                                   (GdkPoint *) points,
Packit Service fb6fa5
                                                   n_points);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* gdk_draw_string
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
Packit Service fb6fa5
 */
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_string:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @font: a #GdkFont.
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @x: the x coordinate of the left edge of the text.
Packit Service fb6fa5
 * @y: the y coordinate of the baseline of the text.
Packit Service fb6fa5
 * @string:  the string of characters to draw.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a string of characters in the given font or fontset.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Deprecated: 2.4: Use gdk_draw_layout() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_string (GdkDrawable *drawable,
Packit Service fb6fa5
		 GdkFont     *font,
Packit Service fb6fa5
		 GdkGC       *gc,
Packit Service fb6fa5
		 gint         x,
Packit Service fb6fa5
		 gint         y,
Packit Service fb6fa5
		 const gchar *string)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gdk_draw_text (drawable, font, gc, x, y, string, _gdk_font_strlen (font, string));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* gdk_draw_text
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
Packit Service fb6fa5
 */
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_text:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @font: a #GdkFont.
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @x: the x coordinate of the left edge of the text.
Packit Service fb6fa5
 * @y: the y coordinate of the baseline of the text.
Packit Service fb6fa5
 * @text:  the characters to draw.
Packit Service fb6fa5
 * @text_length: the number of characters of @text to draw.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a number of characters in the given font or fontset.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.4: Use gdk_draw_layout() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_text (GdkDrawable *drawable,
Packit Service fb6fa5
	       GdkFont     *font,
Packit Service fb6fa5
	       GdkGC       *gc,
Packit Service fb6fa5
	       gint         x,
Packit Service fb6fa5
	       gint         y,
Packit Service fb6fa5
	       const gchar *text,
Packit Service fb6fa5
	       gint         text_length)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (font != NULL);
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (text != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_text (drawable, font, gc, x, y, text, text_length);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_text_wc:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @font: a #GdkFont.
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @x: the x coordinate of the left edge of the text.
Packit Service fb6fa5
 * @y: the y coordinate of the baseline of the text.
Packit Service fb6fa5
 * @text: the wide characters to draw.
Packit Service fb6fa5
 * @text_length: the number of characters to draw.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a number of wide characters using the given font of fontset.
Packit Service fb6fa5
 * If the font is a 1-byte font, the string is converted into 1-byte 
Packit Service fb6fa5
 * characters (discarding the high bytes) before output.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Deprecated: 2.4: Use gdk_draw_layout() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_text_wc (GdkDrawable	 *drawable,
Packit Service fb6fa5
		  GdkFont	 *font,
Packit Service fb6fa5
		  GdkGC		 *gc,
Packit Service fb6fa5
		  gint		  x,
Packit Service fb6fa5
		  gint		  y,
Packit Service fb6fa5
		  const GdkWChar *text,
Packit Service fb6fa5
		  gint		  text_length)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (font != NULL);
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (text != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_text_wc (drawable, font, gc, x, y, text, text_length);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_drawable:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @gc: a #GdkGC sharing the drawable's visual and colormap
Packit Service fb6fa5
 * @src: the source #GdkDrawable, which may be the same as @drawable
Packit Service fb6fa5
 * @xsrc: X position in @src of rectangle to draw
Packit Service fb6fa5
 * @ysrc: Y position in @src of rectangle to draw
Packit Service fb6fa5
 * @xdest: X position in @drawable where the rectangle should be drawn
Packit Service fb6fa5
 * @ydest: Y position in @drawable where the rectangle should be drawn
Packit Service fb6fa5
 * @width: width of rectangle to draw, or -1 for entire @src width
Packit Service fb6fa5
 * @height: height of rectangle to draw, or -1 for entire @src height
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Copies the @width x @height region of @src at coordinates (@xsrc,
Packit Service fb6fa5
 * @ysrc) to coordinates (@xdest, @ydest) in @drawable.
Packit Service fb6fa5
 * @width and/or @height may be given as -1, in which case the entire
Packit Service fb6fa5
 * @src drawable will be copied.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Most fields in @gc are not used for this operation, but notably the
Packit Service fb6fa5
 * clip mask or clip region will be honored.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The source and destination drawables must have the same visual and
Packit Service fb6fa5
 * colormap, or errors will result. (On X11, failure to match
Packit Service fb6fa5
 * visual/colormap results in a BadMatch error from the X server.)
Packit Service fb6fa5
 * A common cause of this problem is an attempt to draw a bitmap to
Packit Service fb6fa5
 * a color drawable. The way to draw a bitmap is to set the bitmap as 
Packit Service fb6fa5
 * the stipple on the #GdkGC, set the fill mode to %GDK_STIPPLED, and 
Packit Service fb6fa5
 * then draw the rectangle.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use gdk_cairo_set_source_pixmap(), cairo_rectangle()
Packit Service fb6fa5
 * and cairo_fill() to draw pixmap on top of other drawables. Also keep
Packit Service fb6fa5
 * in mind that the limitations on allowed sources do not apply to Cairo.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_drawable (GdkDrawable *drawable,
Packit Service fb6fa5
		   GdkGC       *gc,
Packit Service fb6fa5
		   GdkDrawable *src,
Packit Service fb6fa5
		   gint         xsrc,
Packit Service fb6fa5
		   gint         ysrc,
Packit Service fb6fa5
		   gint         xdest,
Packit Service fb6fa5
		   gint         ydest,
Packit Service fb6fa5
		   gint         width,
Packit Service fb6fa5
		   gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDrawable *composite;
Packit Service fb6fa5
  gint composite_x_offset = 0;
Packit Service fb6fa5
  gint composite_y_offset = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (src));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  if (width < 0 || height < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gint real_width;
Packit Service fb6fa5
      gint real_height;
Packit Service fb6fa5
      
Packit Service fb6fa5
      gdk_drawable_get_size (src, &real_width, &real_height);
Packit Service fb6fa5
Packit Service fb6fa5
      if (width < 0)
Packit Service fb6fa5
        width = real_width;
Packit Service fb6fa5
      if (height < 0)
Packit Service fb6fa5
        height = real_height;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
  composite =
Packit Service fb6fa5
    GDK_DRAWABLE_GET_CLASS (src)->get_composite_drawable (src,
Packit Service fb6fa5
                                                          xsrc, ysrc,
Packit Service fb6fa5
                                                          width, height,
Packit Service fb6fa5
                                                          &composite_x_offset,
Packit Service fb6fa5
                                                          &composite_y_offset);
Packit Service fb6fa5
Packit Service fb6fa5
  /* TODO: For non-native windows this may copy stuff from other overlapping
Packit Service fb6fa5
     windows. We should clip that and (for windows with bg != None) clear that
Packit Service fb6fa5
     area in the destination instead. */
Packit Service fb6fa5
Packit Service fb6fa5
  if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src)
Packit Service fb6fa5
    GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src (drawable, gc,
Packit Service fb6fa5
							       composite,
Packit Service fb6fa5
							       xsrc - composite_x_offset,
Packit Service fb6fa5
							       ysrc - composite_y_offset,
Packit Service fb6fa5
							       xdest, ydest,
Packit Service fb6fa5
							       width, height,
Packit Service fb6fa5
							       src);
Packit Service fb6fa5
  else /* backwards compat for old out-of-tree implementations of GdkDrawable (are there any?) */
Packit Service fb6fa5
    GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc,
Packit Service fb6fa5
						      composite,
Packit Service fb6fa5
						      xsrc - composite_x_offset,
Packit Service fb6fa5
						      ysrc - composite_y_offset,
Packit Service fb6fa5
						      xdest, ydest,
Packit Service fb6fa5
						      width, height);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (composite);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_image:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @image: the #GdkImage to draw.
Packit Service fb6fa5
 * @xsrc: the left edge of the source rectangle within @image.
Packit Service fb6fa5
 * @ysrc: the top of the source rectangle within @image.
Packit Service fb6fa5
 * @xdest: the x coordinate of the destination within @drawable.
Packit Service fb6fa5
 * @ydest: the y coordinate of the destination within @drawable.
Packit Service fb6fa5
 * @width: the width of the area to be copied, or -1 to make the area 
Packit Service fb6fa5
 *     extend to the right edge of @image.
Packit Service fb6fa5
 * @height: the height of the area to be copied, or -1 to make the area 
Packit Service fb6fa5
 *     extend to the bottom edge of @image.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a #GdkImage onto a drawable.
Packit Service fb6fa5
 * The depth of the #GdkImage must match the depth of the #GdkDrawable.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Do not use #GdkImage anymore, instead use Cairo image
Packit Service fb6fa5
 * surfaces.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_image (GdkDrawable *drawable,
Packit Service fb6fa5
		GdkGC       *gc,
Packit Service fb6fa5
		GdkImage    *image,
Packit Service fb6fa5
		gint         xsrc,
Packit Service fb6fa5
		gint         ysrc,
Packit Service fb6fa5
		gint         xdest,
Packit Service fb6fa5
		gint         ydest,
Packit Service fb6fa5
		gint         width,
Packit Service fb6fa5
		gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_IMAGE (image));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  if (width == -1)
Packit Service fb6fa5
    width = image->width;
Packit Service fb6fa5
  if (height == -1)
Packit Service fb6fa5
    height = image->height;
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_image (drawable, gc, image, xsrc, ysrc,
Packit Service fb6fa5
                                                 xdest, ydest, width, height);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_pixbuf:
Packit Service fb6fa5
 * @drawable: Destination drawable.
Packit Service fb6fa5
 * @gc: (allow-none): a #GdkGC, used for clipping, or %NULL
Packit Service fb6fa5
 * @pixbuf: a #GdkPixbuf
Packit Service fb6fa5
 * @src_x: Source X coordinate within pixbuf.
Packit Service fb6fa5
 * @src_y: Source Y coordinates within pixbuf.
Packit Service fb6fa5
 * @dest_x: Destination X coordinate within drawable.
Packit Service fb6fa5
 * @dest_y: Destination Y coordinate within drawable.
Packit Service fb6fa5
 * @width: Width of region to render, in pixels, or -1 to use pixbuf width.
Packit Service fb6fa5
 * @height: Height of region to render, in pixels, or -1 to use pixbuf height.
Packit Service fb6fa5
 * @dither: Dithering mode for #GdkRGB.
Packit Service fb6fa5
 * @x_dither: X offset for dither.
Packit Service fb6fa5
 * @y_dither: Y offset for dither.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Renders a rectangular portion of a pixbuf to a drawable.  The destination
Packit Service fb6fa5
 * drawable must have a colormap. All windows have a colormap, however, pixmaps
Packit Service fb6fa5
 * only have colormap by default if they were created with a non-%NULL window 
Packit Service fb6fa5
 * argument. Otherwise a colormap must be set on them with 
Packit Service fb6fa5
 * gdk_drawable_set_colormap().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * On older X servers, rendering pixbufs with an alpha channel involves round 
Packit Service fb6fa5
 * trips to the X server, and may be somewhat slow.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * If GDK is built with the Sun mediaLib library, the gdk_draw_pixbuf
Packit Service fb6fa5
 * function is accelerated using mediaLib, which provides hardware
Packit Service fb6fa5
 * acceleration on Intel, AMD, and Sparc chipsets.  If desired, mediaLib
Packit Service fb6fa5
 * support can be turned off by setting the GDK_DISABLE_MEDIALIB environment
Packit Service fb6fa5
 * variable.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.2
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use gdk_cairo_set_source_pixbuf() and cairo_paint() or
Packit Service fb6fa5
 * cairo_rectangle() and cairo_fill() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_pixbuf (GdkDrawable     *drawable,
Packit Service fb6fa5
                 GdkGC           *gc,
Packit Service fb6fa5
                 const GdkPixbuf *pixbuf,
Packit Service fb6fa5
                 gint             src_x,
Packit Service fb6fa5
                 gint             src_y,
Packit Service fb6fa5
                 gint             dest_x,
Packit Service fb6fa5
                 gint             dest_y,
Packit Service fb6fa5
                 gint             width,
Packit Service fb6fa5
                 gint             height,
Packit Service fb6fa5
                 GdkRgbDither     dither,
Packit Service fb6fa5
                 gint             x_dither,
Packit Service fb6fa5
                 gint             y_dither)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (gc == NULL || GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
Packit Service fb6fa5
Packit Service fb6fa5
  if (width == 0 || height == 0)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  if (width == -1)
Packit Service fb6fa5
    width = gdk_pixbuf_get_width (pixbuf);
Packit Service fb6fa5
  if (height == -1)
Packit Service fb6fa5
    height = gdk_pixbuf_get_height (pixbuf);
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_pixbuf (drawable, gc,
Packit Service fb6fa5
                                                  (GdkPixbuf *) pixbuf,
Packit Service fb6fa5
						  src_x, src_y, dest_x, dest_y,
Packit Service fb6fa5
                                                  width, height,
Packit Service fb6fa5
						  dither, x_dither, y_dither);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_points:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @points: an array of #GdkPoint structures.
Packit Service fb6fa5
 * @n_points: the number of points to be drawn.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a number of points, using the foreground color and other 
Packit Service fb6fa5
 * attributes of the #GdkGC.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use @n_points calls to cairo_rectangle() and
Packit Service fb6fa5
 * cairo_fill() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_points (GdkDrawable    *drawable,
Packit Service fb6fa5
		 GdkGC          *gc,
Packit Service fb6fa5
		 const GdkPoint *points,
Packit Service fb6fa5
		 gint            n_points)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail ((points != NULL) && (n_points > 0));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (n_points >= 0);
Packit Service fb6fa5
Packit Service fb6fa5
  if (n_points == 0)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_points (drawable, gc,
Packit Service fb6fa5
                                                  (GdkPoint *) points, n_points);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_segments:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @segs: an array of #GdkSegment structures specifying the start and 
Packit Service fb6fa5
 *   end points of the lines to be drawn.
Packit Service fb6fa5
 * @n_segs: the number of line segments to draw, i.e. the size of the 
Packit Service fb6fa5
 *   @segs array.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a number of unconnected lines.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_move_to(), cairo_line_to() and cairo_stroke()
Packit Service fb6fa5
 * instead. See the documentation of gdk_draw_line() for notes on line drawing
Packit Service fb6fa5
 * with Cairo.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_segments (GdkDrawable      *drawable,
Packit Service fb6fa5
		   GdkGC            *gc,
Packit Service fb6fa5
		   const GdkSegment *segs,
Packit Service fb6fa5
		   gint              n_segs)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
Packit Service fb6fa5
  if (n_segs == 0)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (segs != NULL);
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (n_segs >= 0);
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_segments (drawable, gc,
Packit Service fb6fa5
                                                    (GdkSegment *) segs, n_segs);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_lines:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable (a #GdkWindow or a #GdkPixmap).
Packit Service fb6fa5
 * @gc: a #GdkGC.
Packit Service fb6fa5
 * @points: an array of #GdkPoint structures specifying the endpoints of the
Packit Service fb6fa5
 * @n_points: the size of the @points array.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a series of lines connecting the given points.
Packit Service fb6fa5
 * The way in which joins between lines are draw is determined by the
Packit Service fb6fa5
 * #GdkCapStyle value in the #GdkGC. This can be set with
Packit Service fb6fa5
 * gdk_gc_set_line_attributes().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use cairo_line_to() and cairo_stroke() instead. See the
Packit Service fb6fa5
 * documentation of gdk_draw_line() for notes on line drawing with Cairo.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_lines (GdkDrawable    *drawable,
Packit Service fb6fa5
		GdkGC          *gc,
Packit Service fb6fa5
		const GdkPoint *points,
Packit Service fb6fa5
		gint            n_points)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (points != NULL);
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (n_points >= 0);
Packit Service fb6fa5
Packit Service fb6fa5
  if (n_points == 0)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_lines (drawable, gc,
Packit Service fb6fa5
                                                 (GdkPoint *) points, n_points);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
real_draw_glyphs (GdkDrawable       *drawable,
Packit Service fb6fa5
		  GdkGC	            *gc,
Packit Service fb6fa5
		  const PangoMatrix *matrix,
Packit Service fb6fa5
		  PangoFont         *font,
Packit Service fb6fa5
		  gdouble            x,
Packit Service fb6fa5
		  gdouble            y,
Packit Service fb6fa5
		  PangoGlyphString  *glyphs)
Packit Service fb6fa5
{
Packit Service fb6fa5
  cairo_t *cr;
Packit Service fb6fa5
Packit Service fb6fa5
  cr = gdk_cairo_create (drawable);
Packit Service fb6fa5
  _gdk_gc_update_context (gc, cr, NULL, NULL, TRUE, drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  if (matrix)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      cairo_matrix_t cairo_matrix;
Packit Service fb6fa5
Packit Service fb6fa5
      cairo_matrix.xx = matrix->xx;
Packit Service fb6fa5
      cairo_matrix.yx = matrix->yx;
Packit Service fb6fa5
      cairo_matrix.xy = matrix->xy;
Packit Service fb6fa5
      cairo_matrix.yy = matrix->yy;
Packit Service fb6fa5
      cairo_matrix.x0 = matrix->x0;
Packit Service fb6fa5
      cairo_matrix.y0 = matrix->y0;
Packit Service fb6fa5
      
Packit Service fb6fa5
      cairo_set_matrix (cr, &cairo_matrix);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  cairo_move_to (cr, x, y);
Packit Service fb6fa5
  pango_cairo_show_glyph_string (cr, font, glyphs);
Packit Service fb6fa5
Packit Service fb6fa5
  cairo_destroy (cr);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_glyphs:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @gc: a #GdkGC
Packit Service fb6fa5
 * @font: font to be used
Packit Service fb6fa5
 * @x: X coordinate of baseline origin
Packit Service fb6fa5
 * @y: Y coordinate of baseline origin
Packit Service fb6fa5
 * @glyphs: the glyph string to draw
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This is a low-level function; 99% of text rendering should be done
Packit Service fb6fa5
 * using gdk_draw_layout() instead.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * A glyph is a single image in a font. This function draws a sequence of
Packit Service fb6fa5
 * glyphs.  To obtain a sequence of glyphs you have to understand a
Packit Service fb6fa5
 * lot about internationalized text handling, which you don't want to
Packit Service fb6fa5
 * understand; thus, use gdk_draw_layout() instead of this function,
Packit Service fb6fa5
 * gdk_draw_layout() handles the details.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Deprecated: 2.22: Use pango_cairo_show_glyphs() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_glyphs (GdkDrawable      *drawable,
Packit Service fb6fa5
		 GdkGC            *gc,
Packit Service fb6fa5
		 PangoFont        *font,
Packit Service fb6fa5
		 gint              x,
Packit Service fb6fa5
		 gint              y,
Packit Service fb6fa5
		 PangoGlyphString *glyphs)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  
Packit Service fb6fa5
  real_draw_glyphs (drawable, gc, NULL, font,
Packit Service fb6fa5
		    x, y, glyphs);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_glyphs_transformed:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @gc: a #GdkGC
Packit Service fb6fa5
 * @matrix: (allow-none): a #PangoMatrix, or %NULL to use an identity transformation
Packit Service fb6fa5
 * @font: the font in which to draw the string
Packit Service fb6fa5
 * @x:       the x position of the start of the string (in Pango
Packit Service fb6fa5
 *           units in user space coordinates)
Packit Service fb6fa5
 * @y:       the y position of the baseline (in Pango units
Packit Service fb6fa5
 *           in user space coordinates)
Packit Service fb6fa5
 * @glyphs:  the glyph string to draw
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Renders a #PangoGlyphString onto a drawable, possibly
Packit Service fb6fa5
 * transforming the layed-out coordinates through a transformation
Packit Service fb6fa5
 * matrix. Note that the transformation matrix for @font is not
Packit Service fb6fa5
 * changed, so to produce correct rendering results, the @font
Packit Service fb6fa5
 * must have been loaded using a #PangoContext with an identical
Packit Service fb6fa5
 * transformation matrix to that passed in to this function.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * See also gdk_draw_glyphs(), gdk_draw_layout().
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.6
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Deprecated: 2.22: Use pango_cairo_show_glyphs() instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_glyphs_transformed (GdkDrawable       *drawable,
Packit Service fb6fa5
			     GdkGC	       *gc,
Packit Service fb6fa5
			     const PangoMatrix *matrix,
Packit Service fb6fa5
			     PangoFont         *font,
Packit Service fb6fa5
			     gint               x,
Packit Service fb6fa5
			     gint               y,
Packit Service fb6fa5
			     PangoGlyphString  *glyphs)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
Packit Service fb6fa5
  real_draw_glyphs (drawable, gc, matrix, font,
Packit Service fb6fa5
		    x / PANGO_SCALE, y / PANGO_SCALE, glyphs);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_draw_trapezoids:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @gc: a #GdkGC
Packit Service fb6fa5
 * @trapezoids: an array of #GdkTrapezoid structures
Packit Service fb6fa5
 * @n_trapezoids: the number of trapezoids to draw
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Draws a set of anti-aliased trapezoids. The trapezoids are
Packit Service fb6fa5
 * combined using saturation addition, then drawn over the background
Packit Service fb6fa5
 * as a set. This is low level functionality used internally to implement
Packit Service fb6fa5
 * rotated underlines and backgrouds when rendering a PangoLayout and is
Packit Service fb6fa5
 * likely not useful for applications.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.6
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use Cairo path contruction functions and cairo_fill()
Packit Service fb6fa5
 * instead.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_draw_trapezoids (GdkDrawable        *drawable,
Packit Service fb6fa5
		     GdkGC	        *gc,
Packit Service fb6fa5
		     const GdkTrapezoid *trapezoids,
Packit Service fb6fa5
		     gint                n_trapezoids)
Packit Service fb6fa5
{
Packit Service fb6fa5
  cairo_t *cr;
Packit Service fb6fa5
  int i;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_GC (gc));
Packit Service fb6fa5
  g_return_if_fail (n_trapezoids == 0 || trapezoids != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  cr = gdk_cairo_create (drawable);
Packit Service fb6fa5
  _gdk_gc_update_context (gc, cr, NULL, NULL, TRUE, drawable);
Packit Service fb6fa5
  
Packit Service fb6fa5
  for (i = 0; i < n_trapezoids; i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      cairo_move_to (cr, trapezoids[i].x11, trapezoids[i].y1);
Packit Service fb6fa5
      cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y1);
Packit Service fb6fa5
      cairo_line_to (cr, trapezoids[i].x22, trapezoids[i].y2);
Packit Service fb6fa5
      cairo_line_to (cr, trapezoids[i].x12, trapezoids[i].y2);
Packit Service fb6fa5
      cairo_close_path (cr);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  cairo_fill (cr);
Packit Service fb6fa5
Packit Service fb6fa5
  cairo_destroy (cr);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_copy_to_image:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @image: (allow-none): a #GdkDrawable, or %NULL if a new @image should be created.
Packit Service fb6fa5
 * @src_x: x coordinate on @drawable
Packit Service fb6fa5
 * @src_y: y coordinate on @drawable
Packit Service fb6fa5
 * @dest_x: x coordinate within @image. Must be 0 if @image is %NULL
Packit Service fb6fa5
 * @dest_y: y coordinate within @image. Must be 0 if @image is %NULL
Packit Service fb6fa5
 * @width: width of region to get
Packit Service fb6fa5
 * @height: height or region to get
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Copies a portion of @drawable into the client side image structure
Packit Service fb6fa5
 * @image. If @image is %NULL, creates a new image of size @width x @height
Packit Service fb6fa5
 * and copies into that. See gdk_drawable_get_image() for further details.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: @image, or a new a #GdkImage containing the contents
Packit Service fb6fa5
 *               of @drawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use @drawable as the source and draw to a Cairo image
Packit Service fb6fa5
 * surface if you want to download contents to the client.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkImage*
Packit Service fb6fa5
gdk_drawable_copy_to_image (GdkDrawable *drawable,
Packit Service fb6fa5
			    GdkImage    *image,
Packit Service fb6fa5
			    gint         src_x,
Packit Service fb6fa5
			    gint         src_y,
Packit Service fb6fa5
			    gint         dest_x,
Packit Service fb6fa5
			    gint         dest_y,
Packit Service fb6fa5
			    gint         width,
Packit Service fb6fa5
			    gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDrawable *composite;
Packit Service fb6fa5
  gint composite_x_offset = 0;
Packit Service fb6fa5
  gint composite_y_offset = 0;
Packit Service fb6fa5
  GdkImage *retval;
Packit Service fb6fa5
  GdkColormap *cmap;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
  g_return_val_if_fail (src_x >= 0, NULL);
Packit Service fb6fa5
  g_return_val_if_fail (src_y >= 0, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  /* FIXME? Note race condition since we get the size then
Packit Service fb6fa5
   * get the image, and the size may have changed.
Packit Service fb6fa5
   */
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (width < 0 || height < 0)
Packit Service fb6fa5
    gdk_drawable_get_size (drawable,
Packit Service fb6fa5
                           width < 0 ? &width : NULL,
Packit Service fb6fa5
                           height < 0 ? &height : NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  composite =
Packit Service fb6fa5
    GDK_DRAWABLE_GET_CLASS (drawable)->get_composite_drawable (drawable,
Packit Service fb6fa5
                                                               src_x, src_y,
Packit Service fb6fa5
                                                               width, height,
Packit Service fb6fa5
                                                               &composite_x_offset,
Packit Service fb6fa5
                                                               &composite_y_offset); 
Packit Service fb6fa5
  
Packit Service fb6fa5
  retval = GDK_DRAWABLE_GET_CLASS (composite)->_copy_to_image (composite,
Packit Service fb6fa5
							       image,
Packit Service fb6fa5
							       src_x - composite_x_offset,
Packit Service fb6fa5
							       src_y - composite_y_offset,
Packit Service fb6fa5
							       dest_x, dest_y,
Packit Service fb6fa5
							       width, height);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (composite);
Packit Service fb6fa5
Packit Service fb6fa5
  if (!image && retval)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      cmap = gdk_drawable_get_colormap (drawable);
Packit Service fb6fa5
      
Packit Service fb6fa5
      if (cmap)
Packit Service fb6fa5
	gdk_image_set_colormap (retval, cmap);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  return retval;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_image:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * @x: x coordinate on @drawable
Packit Service fb6fa5
 * @y: y coordinate on @drawable
Packit Service fb6fa5
 * @width: width of region to get
Packit Service fb6fa5
 * @height: height or region to get
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * A #GdkImage stores client-side image data (pixels). In contrast,
Packit Service fb6fa5
 * #GdkPixmap and #GdkWindow are server-side
Packit Service fb6fa5
 * objects. gdk_drawable_get_image() obtains the pixels from a
Packit Service fb6fa5
 * server-side drawable as a client-side #GdkImage.  The format of a
Packit Service fb6fa5
 * #GdkImage depends on the #GdkVisual of the current display, which
Packit Service fb6fa5
 * makes manipulating #GdkImage extremely difficult; therefore, in
Packit Service fb6fa5
 * most cases you should use gdk_pixbuf_get_from_drawable() instead of
Packit Service fb6fa5
 * this lower-level function. A #GdkPixbuf contains image data in a
Packit Service fb6fa5
 * canonicalized RGB format, rather than a display-dependent format.
Packit Service fb6fa5
 * Of course, there's a convenience vs. speed tradeoff here, so you'll
Packit Service fb6fa5
 * want to think about what makes sense for your application.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * @x, @y, @width, and @height define the region of @drawable to
Packit Service fb6fa5
 * obtain as an image.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You would usually copy image data to the client side if you intend
Packit Service fb6fa5
 * to examine the values of individual pixels, for example to darken
Packit Service fb6fa5
 * an image or add a red tint. It would be prohibitively slow to
Packit Service fb6fa5
 * make a round-trip request to the windowing system for each pixel,
Packit Service fb6fa5
 * so instead you get all of them at once, modify them, then copy
Packit Service fb6fa5
 * them all back at once.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * If the X server or other windowing system backend is on the local
Packit Service fb6fa5
 * machine, this function may use shared memory to avoid copying
Packit Service fb6fa5
 * the image data.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * If the source drawable is a #GdkWindow and partially offscreen
Packit Service fb6fa5
 * or obscured, then the obscured portions of the returned image
Packit Service fb6fa5
 * will contain undefined data.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: a #GdkImage containing the contents of @drawable
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Deprecated: 2.22: Use @drawable as the source and draw to a Cairo image
Packit Service fb6fa5
 * surface if you want to download contents to the client.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkImage*
Packit Service fb6fa5
gdk_drawable_get_image (GdkDrawable *drawable,
Packit Service fb6fa5
                        gint         x,
Packit Service fb6fa5
                        gint         y,
Packit Service fb6fa5
                        gint         width,
Packit Service fb6fa5
                        gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDrawable *composite;
Packit Service fb6fa5
  gint composite_x_offset = 0;
Packit Service fb6fa5
  gint composite_y_offset = 0;
Packit Service fb6fa5
  GdkImage *retval;
Packit Service fb6fa5
  GdkColormap *cmap;
Packit Service fb6fa5
  
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
  g_return_val_if_fail (x >= 0, NULL);
Packit Service fb6fa5
  g_return_val_if_fail (y >= 0, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  /* FIXME? Note race condition since we get the size then
Packit Service fb6fa5
   * get the image, and the size may have changed.
Packit Service fb6fa5
   */
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (width < 0 || height < 0)
Packit Service fb6fa5
    gdk_drawable_get_size (drawable,
Packit Service fb6fa5
                           width < 0 ? &width : NULL,
Packit Service fb6fa5
                           height < 0 ? &height : NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  composite =
Packit Service fb6fa5
    GDK_DRAWABLE_GET_CLASS (drawable)->get_composite_drawable (drawable,
Packit Service fb6fa5
                                                               x, y,
Packit Service fb6fa5
                                                               width, height,
Packit Service fb6fa5
                                                               &composite_x_offset,
Packit Service fb6fa5
                                                               &composite_y_offset); 
Packit Service fb6fa5
  
Packit Service fb6fa5
  retval = GDK_DRAWABLE_GET_CLASS (composite)->get_image (composite,
Packit Service fb6fa5
                                                          x - composite_x_offset,
Packit Service fb6fa5
                                                          y - composite_y_offset,
Packit Service fb6fa5
                                                          width, height);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (composite);
Packit Service fb6fa5
Packit Service fb6fa5
  cmap = gdk_drawable_get_colormap (drawable);
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (retval && cmap)
Packit Service fb6fa5
    gdk_image_set_colormap (retval, cmap);
Packit Service fb6fa5
  
Packit Service fb6fa5
  return retval;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkImage*
Packit Service fb6fa5
gdk_drawable_real_get_image (GdkDrawable     *drawable,
Packit Service fb6fa5
			     gint             x,
Packit Service fb6fa5
			     gint             y,
Packit Service fb6fa5
			     gint             width,
Packit Service fb6fa5
			     gint             height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return gdk_drawable_copy_to_image (drawable, NULL, x, y, 0, 0, width, height);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkDrawable *
Packit Service fb6fa5
gdk_drawable_real_get_composite_drawable (GdkDrawable *drawable,
Packit Service fb6fa5
                                          gint         x,
Packit Service fb6fa5
                                          gint         y,
Packit Service fb6fa5
                                          gint         width,
Packit Service fb6fa5
                                          gint         height,
Packit Service fb6fa5
                                          gint        *composite_x_offset,
Packit Service fb6fa5
                                          gint        *composite_y_offset)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  *composite_x_offset = 0;
Packit Service fb6fa5
  *composite_y_offset = 0;
Packit Service fb6fa5
  
Packit Service fb6fa5
  return g_object_ref (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_clip_region:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Computes the region of a drawable that potentially can be written
Packit Service fb6fa5
 * to by drawing primitives. This region will not take into account
Packit Service fb6fa5
 * the clip region for the GC, and may also not take into account
Packit Service fb6fa5
 * other factors such as if the window is obscured by other windows,
Packit Service fb6fa5
 * but no area outside of this region will be affected by drawing
Packit Service fb6fa5
 * primitives.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Returns: a #GdkRegion. This must be freed with gdk_region_destroy()
Packit Service fb6fa5
 *          when you are done.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkRegion *
Packit Service fb6fa5
gdk_drawable_get_clip_region (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->get_clip_region (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_drawable_get_visible_region:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Computes the region of a drawable that is potentially visible.
Packit Service fb6fa5
 * This does not necessarily take into account if the window is
Packit Service fb6fa5
 * obscured by other windows, but no area outside of this region
Packit Service fb6fa5
 * is visible.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Returns: a #GdkRegion. This must be freed with gdk_region_destroy()
Packit Service fb6fa5
 *          when you are done.
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkRegion *
Packit Service fb6fa5
gdk_drawable_get_visible_region (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->get_visible_region (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkRegion *
Packit Service fb6fa5
gdk_drawable_real_get_visible_region (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkRectangle rect;
Packit Service fb6fa5
Packit Service fb6fa5
  rect.x = 0;
Packit Service fb6fa5
  rect.y = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_drawable_get_size (drawable, &rect.width, &rect.height);
Packit Service fb6fa5
Packit Service fb6fa5
  return gdk_region_rectangle (&rect);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * _gdk_drawable_ref_cairo_surface:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Obtains a #cairo_surface_t for the given drawable. If a
Packit Service fb6fa5
 * #cairo_surface_t for the drawable already exists, it will be
Packit Service fb6fa5
 * referenced, otherwise a new surface will be created.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: a newly referenced #cairo_surface_t that points
Packit Service fb6fa5
 *  to @drawable. Unref with cairo_surface_destroy()
Packit Service fb6fa5
 **/
Packit Service fb6fa5
cairo_surface_t *
Packit Service fb6fa5
_gdk_drawable_ref_cairo_surface (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->ref_cairo_surface (drawable);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
composite (guchar *src_buf,
Packit Service fb6fa5
	   gint    src_rowstride,
Packit Service fb6fa5
	   guchar *dest_buf,
Packit Service fb6fa5
	   gint    dest_rowstride,
Packit Service fb6fa5
	   gint    width,
Packit Service fb6fa5
	   gint    height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  guchar *src = src_buf;
Packit Service fb6fa5
  guchar *dest = dest_buf;
Packit Service fb6fa5
Packit Service fb6fa5
  while (height--)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gint twidth = width;
Packit Service fb6fa5
      guchar *p = src;
Packit Service fb6fa5
      guchar *q = dest;
Packit Service fb6fa5
Packit Service fb6fa5
      while (twidth--)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  guchar a = p[3];
Packit Service fb6fa5
	  guint t;
Packit Service fb6fa5
Packit Service fb6fa5
	  t = a * p[0] + (255 - a) * q[0] + 0x80;
Packit Service fb6fa5
	  q[0] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	  t = a * p[1] + (255 - a) * q[1] + 0x80;
Packit Service fb6fa5
	  q[1] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	  t = a * p[2] + (255 - a) * q[2] + 0x80;
Packit Service fb6fa5
	  q[2] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
Packit Service fb6fa5
	  p += 4;
Packit Service fb6fa5
	  q += 3;
Packit Service fb6fa5
	}
Packit Service fb6fa5
      
Packit Service fb6fa5
      src += src_rowstride;
Packit Service fb6fa5
      dest += dest_rowstride;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
composite_0888 (guchar      *src_buf,
Packit Service fb6fa5
		gint         src_rowstride,
Packit Service fb6fa5
		guchar      *dest_buf,
Packit Service fb6fa5
		gint         dest_rowstride,
Packit Service fb6fa5
		GdkByteOrder dest_byte_order,
Packit Service fb6fa5
		gint         width,
Packit Service fb6fa5
		gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  guchar *src = src_buf;
Packit Service fb6fa5
  guchar *dest = dest_buf;
Packit Service fb6fa5
Packit Service fb6fa5
  while (height--)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gint twidth = width;
Packit Service fb6fa5
      guchar *p = src;
Packit Service fb6fa5
      guchar *q = dest;
Packit Service fb6fa5
Packit Service fb6fa5
      if (dest_byte_order == GDK_LSB_FIRST)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  while (twidth--)
Packit Service fb6fa5
	    {
Packit Service fb6fa5
	      guint t;
Packit Service fb6fa5
	      
Packit Service fb6fa5
	      t = p[3] * p[2] + (255 - p[3]) * q[0] + 0x80;
Packit Service fb6fa5
	      q[0] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	      t = p[3] * p[1] + (255 - p[3]) * q[1] + 0x80;
Packit Service fb6fa5
	      q[1] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	      t = p[3] * p[0] + (255 - p[3]) * q[2] + 0x80;
Packit Service fb6fa5
	      q[2] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	      p += 4;
Packit Service fb6fa5
	      q += 4;
Packit Service fb6fa5
	    }
Packit Service fb6fa5
	}
Packit Service fb6fa5
      else
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  while (twidth--)
Packit Service fb6fa5
	    {
Packit Service fb6fa5
	      guint t;
Packit Service fb6fa5
	      
Packit Service fb6fa5
	      t = p[3] * p[0] + (255 - p[3]) * q[1] + 0x80;
Packit Service fb6fa5
	      q[1] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	      t = p[3] * p[1] + (255 - p[3]) * q[2] + 0x80;
Packit Service fb6fa5
	      q[2] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	      t = p[3] * p[2] + (255 - p[3]) * q[3] + 0x80;
Packit Service fb6fa5
	      q[3] = (t + (t >> 8)) >> 8;
Packit Service fb6fa5
	      p += 4;
Packit Service fb6fa5
	      q += 4;
Packit Service fb6fa5
	    }
Packit Service fb6fa5
	}
Packit Service fb6fa5
      
Packit Service fb6fa5
      src += src_rowstride;
Packit Service fb6fa5
      dest += dest_rowstride;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
#ifdef USE_MEDIALIB
Packit Service fb6fa5
static void
Packit Service fb6fa5
composite_0888_medialib (guchar      *src_buf,
Packit Service fb6fa5
			 gint         src_rowstride,
Packit Service fb6fa5
			 guchar      *dest_buf,
Packit Service fb6fa5
			 gint         dest_rowstride,
Packit Service fb6fa5
			 GdkByteOrder dest_byte_order,
Packit Service fb6fa5
			 gint         width,
Packit Service fb6fa5
			 gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  guchar *src  = src_buf;
Packit Service fb6fa5
  guchar *dest = dest_buf;
Packit Service fb6fa5
Packit Service fb6fa5
  mlib_image img_src, img_dst;
Packit Service fb6fa5
Packit Service fb6fa5
  mlib_ImageSetStruct (&img_dst,
Packit Service fb6fa5
                       MLIB_BYTE,
Packit Service fb6fa5
                       4,
Packit Service fb6fa5
                       width,
Packit Service fb6fa5
                       height,
Packit Service fb6fa5
                       dest_rowstride,
Packit Service fb6fa5
                       dest_buf);
Packit Service fb6fa5
Packit Service fb6fa5
  mlib_ImageSetStruct (&img_src,
Packit Service fb6fa5
                       MLIB_BYTE,
Packit Service fb6fa5
                       4,
Packit Service fb6fa5
                       width,
Packit Service fb6fa5
                       height,
Packit Service fb6fa5
                       src_rowstride,
Packit Service fb6fa5
                       src_buf);
Packit Service fb6fa5
Packit Service fb6fa5
  if (dest_byte_order == GDK_LSB_FIRST)
Packit Service fb6fa5
      mlib_ImageBlendRGBA2BGRA (&img_dst, &img_src);
Packit Service fb6fa5
  else
Packit Service fb6fa5
      mlib_ImageBlendRGBA2ARGB (&img_dst, &img_src);
Packit Service fb6fa5
}
Packit Service fb6fa5
#endif
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
composite_565 (guchar      *src_buf,
Packit Service fb6fa5
	       gint         src_rowstride,
Packit Service fb6fa5
	       guchar      *dest_buf,
Packit Service fb6fa5
	       gint         dest_rowstride,
Packit Service fb6fa5
	       GdkByteOrder dest_byte_order,
Packit Service fb6fa5
	       gint         width,
Packit Service fb6fa5
	       gint         height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  guchar *src = src_buf;
Packit Service fb6fa5
  guchar *dest = dest_buf;
Packit Service fb6fa5
Packit Service fb6fa5
  while (height--)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gint twidth = width;
Packit Service fb6fa5
      guchar *p = src;
Packit Service fb6fa5
      gushort *q = (gushort *)dest;
Packit Service fb6fa5
Packit Service fb6fa5
      while (twidth--)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  guchar a = p[3];
Packit Service fb6fa5
	  guint tr, tg, tb;
Packit Service fb6fa5
	  guint tr1, tg1, tb1;
Packit Service fb6fa5
	  guint tmp = *q;
Packit Service fb6fa5
Packit Service fb6fa5
#if 1
Packit Service fb6fa5
	  /* This is fast, and corresponds to what composite() above does
Packit Service fb6fa5
	   * if we converted to 8-bit first.
Packit Service fb6fa5
	   */
Packit Service fb6fa5
	  tr = (tmp & 0xf800);
Packit Service fb6fa5
	  tr1 = a * p[0] + (255 - a) * ((tr >> 8) + (tr >> 13)) + 0x80;
Packit Service fb6fa5
	  tg = (tmp & 0x07e0);
Packit Service fb6fa5
	  tg1 = a * p[1] + (255 - a) * ((tg >> 3) + (tg >> 9)) + 0x80;
Packit Service fb6fa5
	  tb = (tmp & 0x001f);
Packit Service fb6fa5
	  tb1 = a * p[2] + (255 - a) * ((tb << 3) + (tb >> 2)) + 0x80;
Packit Service fb6fa5
Packit Service fb6fa5
	  *q = (((tr1 + (tr1 >> 8)) & 0xf800) |
Packit Service fb6fa5
		(((tg1 + (tg1 >> 8)) & 0xfc00) >> 5)  |
Packit Service fb6fa5
		((tb1 + (tb1 >> 8)) >> 11));
Packit Service fb6fa5
#else
Packit Service fb6fa5
	  /* This version correspond to the result we get with XRENDER -
Packit Service fb6fa5
	   * a bit of precision is lost since we convert to 8 bit after premultiplying
Packit Service fb6fa5
	   * instead of at the end
Packit Service fb6fa5
	   */
Packit Service fb6fa5
	  guint tr2, tg2, tb2;
Packit Service fb6fa5
	  guint tr3, tg3, tb3;
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  tr = (tmp & 0xf800);
Packit Service fb6fa5
	  tr1 = (255 - a) * ((tr >> 8) + (tr >> 13)) + 0x80;
Packit Service fb6fa5
	  tr2 = a * p[0] + 0x80;
Packit Service fb6fa5
	  tr3 = ((tr1 + (tr1 >> 8)) >> 8) + ((tr2 + (tr2 >> 8)) >> 8);
Packit Service fb6fa5
Packit Service fb6fa5
	  tg = (tmp & 0x07e0);
Packit Service fb6fa5
	  tg1 = (255 - a) * ((tg >> 3) + (tg >> 9)) + 0x80;
Packit Service fb6fa5
	  tg2 = a * p[0] + 0x80;
Packit Service fb6fa5
	  tg3 = ((tg1 + (tg1 >> 8)) >> 8) + ((tg2 + (tg2 >> 8)) >> 8);
Packit Service fb6fa5
Packit Service fb6fa5
	  tb = (tmp & 0x001f);
Packit Service fb6fa5
	  tb1 = (255 - a) * ((tb << 3) + (tb >> 2)) + 0x80;
Packit Service fb6fa5
	  tb2 = a * p[0] + 0x80;
Packit Service fb6fa5
	  tb3 = ((tb1 + (tb1 >> 8)) >> 8) + ((tb2 + (tb2 >> 8)) >> 8);
Packit Service fb6fa5
Packit Service fb6fa5
	  *q = (((tr3 & 0xf8) << 8) |
Packit Service fb6fa5
		((tg3 & 0xfc) << 3) |
Packit Service fb6fa5
		((tb3 >> 3)));
Packit Service fb6fa5
#endif
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  p += 4;
Packit Service fb6fa5
	  q++;
Packit Service fb6fa5
	}
Packit Service fb6fa5
      
Packit Service fb6fa5
      src += src_rowstride;
Packit Service fb6fa5
      dest += dest_rowstride;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* Implementation of the old vfunc in terms of the new one
Packit Service fb6fa5
   in case someone calls it directly (which they shouldn't!) */
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_drawable_real_draw_drawable (GdkDrawable  *drawable,
Packit Service fb6fa5
				 GdkGC	       *gc,
Packit Service fb6fa5
				 GdkDrawable  *src,
Packit Service fb6fa5
				 gint		xsrc,
Packit Service fb6fa5
				 gint		ysrc,
Packit Service fb6fa5
				 gint		xdest,
Packit Service fb6fa5
				 gint		ydest,
Packit Service fb6fa5
				 gint		width,
Packit Service fb6fa5
				 gint		height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src (drawable,
Packit Service fb6fa5
							     gc,
Packit Service fb6fa5
							     src,
Packit Service fb6fa5
							     xsrc,
Packit Service fb6fa5
							     ysrc,
Packit Service fb6fa5
							     xdest,
Packit Service fb6fa5
							     ydest,
Packit Service fb6fa5
							     width,
Packit Service fb6fa5
							     height,
Packit Service fb6fa5
							     src);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_drawable_real_draw_pixbuf (GdkDrawable  *drawable,
Packit Service fb6fa5
			       GdkGC        *gc,
Packit Service fb6fa5
			       GdkPixbuf    *pixbuf,
Packit Service fb6fa5
			       gint          src_x,
Packit Service fb6fa5
			       gint          src_y,
Packit Service fb6fa5
			       gint          dest_x,
Packit Service fb6fa5
			       gint          dest_y,
Packit Service fb6fa5
			       gint          width,
Packit Service fb6fa5
			       gint          height,
Packit Service fb6fa5
			       GdkRgbDither  dither,
Packit Service fb6fa5
			       gint          x_dither,
Packit Service fb6fa5
			       gint          y_dither)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkPixbuf *composited = NULL;
Packit Service fb6fa5
  gint dwidth, dheight;
Packit Service fb6fa5
  GdkRegion *clip;
Packit Service fb6fa5
  GdkRegion *drect;
Packit Service fb6fa5
  GdkRectangle tmp_rect;
Packit Service fb6fa5
  GdkDrawable  *real_drawable;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
Packit Service fb6fa5
  g_return_if_fail (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
Packit Service fb6fa5
  g_return_if_fail (gdk_pixbuf_get_n_channels (pixbuf) == 3 ||
Packit Service fb6fa5
                    gdk_pixbuf_get_n_channels (pixbuf) == 4);
Packit Service fb6fa5
  g_return_if_fail (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (drawable != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  if (width == -1) 
Packit Service fb6fa5
    width = gdk_pixbuf_get_width (pixbuf);
Packit Service fb6fa5
  if (height == -1)
Packit Service fb6fa5
    height = gdk_pixbuf_get_height (pixbuf);
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (width >= 0 && height >= 0);
Packit Service fb6fa5
  g_return_if_fail (src_x >= 0 && src_x + width <= gdk_pixbuf_get_width (pixbuf));
Packit Service fb6fa5
  g_return_if_fail (src_y >= 0 && src_y + height <= gdk_pixbuf_get_height (pixbuf));
Packit Service fb6fa5
Packit Service fb6fa5
  /* Clip to the drawable; this is required for get_from_drawable() so
Packit Service fb6fa5
   * can't be done implicitly
Packit Service fb6fa5
   */
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (dest_x < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      src_x -= dest_x;
Packit Service fb6fa5
      width += dest_x;
Packit Service fb6fa5
      dest_x = 0;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (dest_y < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      src_y -= dest_y;
Packit Service fb6fa5
      height += dest_y;
Packit Service fb6fa5
      dest_y = 0;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_drawable_get_size (drawable, &dwidth, &dheight);
Packit Service fb6fa5
Packit Service fb6fa5
  if ((dest_x + width) > dwidth)
Packit Service fb6fa5
    width = dwidth - dest_x;
Packit Service fb6fa5
Packit Service fb6fa5
  if ((dest_y + height) > dheight)
Packit Service fb6fa5
    height = dheight - dest_y;
Packit Service fb6fa5
Packit Service fb6fa5
  if (width <= 0 || height <= 0)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  /* Clip to the clip region; this avoids getting more
Packit Service fb6fa5
   * image data from the server than we need to.
Packit Service fb6fa5
   */
Packit Service fb6fa5
  
Packit Service fb6fa5
  tmp_rect.x = dest_x;
Packit Service fb6fa5
  tmp_rect.y = dest_y;
Packit Service fb6fa5
  tmp_rect.width = width;
Packit Service fb6fa5
  tmp_rect.height = height;
Packit Service fb6fa5
Packit Service fb6fa5
  drect = gdk_region_rectangle (&tmp_rect);
Packit Service fb6fa5
  clip = gdk_drawable_get_clip_region (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_region_intersect (drect, clip);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_region_get_clipbox (drect, &tmp_rect);
Packit Service fb6fa5
  
Packit Service fb6fa5
  gdk_region_destroy (drect);
Packit Service fb6fa5
  gdk_region_destroy (clip);
Packit Service fb6fa5
Packit Service fb6fa5
  if (tmp_rect.width == 0 ||
Packit Service fb6fa5
      tmp_rect.height == 0)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
  
Packit Service fb6fa5
  /* Actually draw */
Packit Service fb6fa5
  if (!gc)
Packit Service fb6fa5
    gc = _gdk_drawable_get_scratch_gc (drawable, FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Drawable is a wrapper here, but at this time we
Packit Service fb6fa5
     have already retargeted the destination to any
Packit Service fb6fa5
     impl window and set the clip, so what we really
Packit Service fb6fa5
     want to do is draw directly on the impl, ignoring
Packit Service fb6fa5
     client side subwindows. We also use the impl
Packit Service fb6fa5
     in the pixmap target case to avoid resetting the
Packit Service fb6fa5
     already set clip on the GC. */
Packit Service fb6fa5
  if (GDK_IS_WINDOW (drawable))
Packit Service fb6fa5
    real_drawable = GDK_WINDOW_OBJECT (drawable)->impl;
Packit Service fb6fa5
  else
Packit Service fb6fa5
    real_drawable = GDK_PIXMAP_OBJECT (drawable)->impl;
Packit Service fb6fa5
Packit Service fb6fa5
  if (gdk_pixbuf_get_has_alpha (pixbuf))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GdkVisual *visual = gdk_drawable_get_visual (drawable);
Packit Service fb6fa5
      void (*composite_func) (guchar       *src_buf,
Packit Service fb6fa5
			      gint          src_rowstride,
Packit Service fb6fa5
			      guchar       *dest_buf,
Packit Service fb6fa5
			      gint          dest_rowstride,
Packit Service fb6fa5
			      GdkByteOrder  dest_byte_order,
Packit Service fb6fa5
			      gint          width,
Packit Service fb6fa5
			      gint          height) = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
      /* First we see if we have a visual-specific composition function that can composite
Packit Service fb6fa5
       * the pixbuf data directly onto the image
Packit Service fb6fa5
       */
Packit Service fb6fa5
      if (visual)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  gint bits_per_pixel = _gdk_windowing_get_bits_for_depth (gdk_drawable_get_display (drawable),
Packit Service fb6fa5
								   visual->depth);
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  if (visual->byte_order == (G_BYTE_ORDER == G_BIG_ENDIAN ? GDK_MSB_FIRST : GDK_LSB_FIRST) &&
Packit Service fb6fa5
	      visual->depth == 16 &&
Packit Service fb6fa5
	      visual->red_mask   == 0xf800 &&
Packit Service fb6fa5
	      visual->green_mask == 0x07e0 &&
Packit Service fb6fa5
	      visual->blue_mask  == 0x001f)
Packit Service fb6fa5
	    composite_func = composite_565;
Packit Service fb6fa5
	  else if (visual->depth == 24 && bits_per_pixel == 32 &&
Packit Service fb6fa5
		   visual->red_mask   == 0xff0000 &&
Packit Service fb6fa5
		   visual->green_mask == 0x00ff00 &&
Packit Service fb6fa5
		   visual->blue_mask  == 0x0000ff)
Packit Service fb6fa5
	    {
Packit Service fb6fa5
#ifdef USE_MEDIALIB
Packit Service fb6fa5
	      if (_gdk_use_medialib ())
Packit Service fb6fa5
	        composite_func = composite_0888_medialib;
Packit Service fb6fa5
	      else
Packit Service fb6fa5
	        composite_func = composite_0888;
Packit Service fb6fa5
#else
Packit Service fb6fa5
	      composite_func = composite_0888;
Packit Service fb6fa5
#endif
Packit Service fb6fa5
	    }
Packit Service fb6fa5
	}
Packit Service fb6fa5
Packit Service fb6fa5
      /* We can't use our composite func if we are required to dither
Packit Service fb6fa5
       */
Packit Service fb6fa5
      if (composite_func && !(dither == GDK_RGB_DITHER_MAX && visual->depth != 24))
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  gint x0, y0;
Packit Service fb6fa5
	  for (y0 = 0; y0 < height; y0 += GDK_SCRATCH_IMAGE_HEIGHT)
Packit Service fb6fa5
	    {
Packit Service fb6fa5
	      gint height1 = MIN (height - y0, GDK_SCRATCH_IMAGE_HEIGHT);
Packit Service fb6fa5
	      for (x0 = 0; x0 < width; x0 += GDK_SCRATCH_IMAGE_WIDTH)
Packit Service fb6fa5
		{
Packit Service fb6fa5
		  gint xs0, ys0;
Packit Service fb6fa5
		  
Packit Service fb6fa5
		  gint width1 = MIN (width - x0, GDK_SCRATCH_IMAGE_WIDTH);
Packit Service fb6fa5
		  
Packit Service fb6fa5
		  GdkImage *image = _gdk_image_get_scratch (gdk_drawable_get_screen (drawable),
Packit Service fb6fa5
							    width1, height1,
Packit Service fb6fa5
							    gdk_drawable_get_depth (drawable), &xs0, &ys0;;
Packit Service fb6fa5
		  
Packit Service fb6fa5
		  gdk_drawable_copy_to_image (drawable, image,
Packit Service fb6fa5
					      dest_x + x0, dest_y + y0,
Packit Service fb6fa5
					      xs0, ys0,
Packit Service fb6fa5
					      width1, height1);
Packit Service fb6fa5
		  (*composite_func) (gdk_pixbuf_get_pixels (pixbuf) + (src_y + y0) * gdk_pixbuf_get_rowstride (pixbuf) + (src_x + x0) * 4,
Packit Service fb6fa5
				     gdk_pixbuf_get_rowstride (pixbuf),
Packit Service fb6fa5
				     (guchar*)image->mem + ys0 * image->bpl + xs0 * image->bpp,
Packit Service fb6fa5
				     image->bpl,
Packit Service fb6fa5
				     visual->byte_order,
Packit Service fb6fa5
				     width1, height1);
Packit Service fb6fa5
		  gdk_draw_image (real_drawable, gc, image,
Packit Service fb6fa5
				  xs0, ys0,
Packit Service fb6fa5
				  dest_x + x0, dest_y + y0,
Packit Service fb6fa5
				  width1, height1);
Packit Service fb6fa5
		}
Packit Service fb6fa5
	    }
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  goto out;
Packit Service fb6fa5
	}
Packit Service fb6fa5
      else
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  /* No special composition func, convert dest to 24 bit RGB data, composite against
Packit Service fb6fa5
	   * that, and convert back.
Packit Service fb6fa5
	   */
Packit Service fb6fa5
	  composited = gdk_pixbuf_get_from_drawable (NULL,
Packit Service fb6fa5
						     drawable,
Packit Service fb6fa5
						     NULL,
Packit Service fb6fa5
						     dest_x, dest_y,
Packit Service fb6fa5
						     0, 0,
Packit Service fb6fa5
						     width, height);
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  if (composited)
Packit Service fb6fa5
	    composite (gdk_pixbuf_get_pixels (pixbuf) + src_y * gdk_pixbuf_get_rowstride (pixbuf) + src_x * 4,
Packit Service fb6fa5
		       gdk_pixbuf_get_rowstride (pixbuf),
Packit Service fb6fa5
		       gdk_pixbuf_get_pixels (composited),
Packit Service fb6fa5
		       gdk_pixbuf_get_rowstride (composited),
Packit Service fb6fa5
		       width, height);
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (composited)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      src_x = 0;
Packit Service fb6fa5
      src_y = 0;
Packit Service fb6fa5
      pixbuf = composited;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (gdk_pixbuf_get_n_channels (pixbuf) == 4)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      guchar *buf = gdk_pixbuf_get_pixels (pixbuf) + src_y * gdk_pixbuf_get_rowstride (pixbuf) + src_x * 4;
Packit Service fb6fa5
Packit Service fb6fa5
      gdk_draw_rgb_32_image_dithalign (real_drawable, gc,
Packit Service fb6fa5
				       dest_x, dest_y,
Packit Service fb6fa5
				       width, height,
Packit Service fb6fa5
				       dither,
Packit Service fb6fa5
				       buf, gdk_pixbuf_get_rowstride (pixbuf),
Packit Service fb6fa5
				       x_dither, y_dither);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else				/* n_channels == 3 */
Packit Service fb6fa5
    {
Packit Service fb6fa5
      guchar *buf = gdk_pixbuf_get_pixels (pixbuf) + src_y * gdk_pixbuf_get_rowstride (pixbuf) + src_x * 3;
Packit Service fb6fa5
Packit Service fb6fa5
      gdk_draw_rgb_image_dithalign (real_drawable, gc,
Packit Service fb6fa5
				    dest_x, dest_y,
Packit Service fb6fa5
				    width, height,
Packit Service fb6fa5
				    dither,
Packit Service fb6fa5
				    buf, gdk_pixbuf_get_rowstride (pixbuf),
Packit Service fb6fa5
				    x_dither, y_dither);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
 out:
Packit Service fb6fa5
  if (composited)
Packit Service fb6fa5
    g_object_unref (composited);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/************************************************************************/
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * _gdk_drawable_get_scratch_gc:
Packit Service fb6fa5
 * @drawable: A #GdkDrawable
Packit Service fb6fa5
 * @graphics_exposures: Whether the returned #GdkGC should generate graphics exposures 
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Returns a #GdkGC suitable for drawing on @drawable. The #GdkGC has
Packit Service fb6fa5
 * the standard values for @drawable, except for the graphics_exposures
Packit Service fb6fa5
 * field which is determined by the @graphics_exposures parameter.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The foreground color of the returned #GdkGC is undefined. The #GdkGC
Packit Service fb6fa5
 * must not be altered in any way, except to change its foreground color.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: A #GdkGC suitable for drawing on @drawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Since: 2.4
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkGC *
Packit Service fb6fa5
_gdk_drawable_get_scratch_gc (GdkDrawable *drawable,
Packit Service fb6fa5
			      gboolean     graphics_exposures)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkScreen *screen;
Packit Service fb6fa5
  gint depth;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  screen = gdk_drawable_get_screen (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (!screen->closed, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  depth = gdk_drawable_get_depth (drawable) - 1;
Packit Service fb6fa5
Packit Service fb6fa5
  if (graphics_exposures)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (!screen->exposure_gcs[depth])
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  GdkGCValues values;
Packit Service fb6fa5
	  GdkGCValuesMask mask;
Packit Service fb6fa5
Packit Service fb6fa5
	  values.graphics_exposures = TRUE;
Packit Service fb6fa5
	  mask = GDK_GC_EXPOSURES;  
Packit Service fb6fa5
Packit Service fb6fa5
	  screen->exposure_gcs[depth] =
Packit Service fb6fa5
	    gdk_gc_new_with_values (drawable, &values, mask);
Packit Service fb6fa5
	}
Packit Service fb6fa5
Packit Service fb6fa5
      return screen->exposure_gcs[depth];
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (!screen->normal_gcs[depth])
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  screen->normal_gcs[depth] =
Packit Service fb6fa5
	    gdk_gc_new (drawable);
Packit Service fb6fa5
	}
Packit Service fb6fa5
Packit Service fb6fa5
      return screen->normal_gcs[depth];
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * _gdk_drawable_get_subwindow_scratch_gc:
Packit Service fb6fa5
 * @drawable: A #GdkDrawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Returns a #GdkGC suitable for drawing on @drawable. The #GdkGC has
Packit Service fb6fa5
 * the standard values for @drawable, except for the graphics_exposures
Packit Service fb6fa5
 * field which is %TRUE and the subwindow mode which is %GDK_INCLUDE_INFERIORS.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The foreground color of the returned #GdkGC is undefined. The #GdkGC
Packit Service fb6fa5
 * must not be altered in any way, except to change its foreground color.
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Return value: A #GdkGC suitable for drawing on @drawable
Packit Service fb6fa5
 * 
Packit Service fb6fa5
 * Since: 2.18
Packit Service fb6fa5
 **/
Packit Service fb6fa5
GdkGC *
Packit Service fb6fa5
_gdk_drawable_get_subwindow_scratch_gc (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkScreen *screen;
Packit Service fb6fa5
  gint depth;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  screen = gdk_drawable_get_screen (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (!screen->closed, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  depth = gdk_drawable_get_depth (drawable) - 1;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!screen->subwindow_gcs[depth])
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GdkGCValues values;
Packit Service fb6fa5
      GdkGCValuesMask mask;
Packit Service fb6fa5
      
Packit Service fb6fa5
      values.graphics_exposures = TRUE;
Packit Service fb6fa5
      values.subwindow_mode = GDK_INCLUDE_INFERIORS;
Packit Service fb6fa5
      mask = GDK_GC_EXPOSURES | GDK_GC_SUBWINDOW;  
Packit Service fb6fa5
      
Packit Service fb6fa5
      screen->subwindow_gcs[depth] =
Packit Service fb6fa5
	gdk_gc_new_with_values (drawable, &values, mask);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  return screen->subwindow_gcs[depth];
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * _gdk_drawable_get_source_drawable:
Packit Service fb6fa5
 * @drawable: a #GdkDrawable
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Returns a drawable for the passed @drawable that is guaranteed to be
Packit Service fb6fa5
 * usable to create a pixmap (e.g.: not an offscreen window).
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.16
Packit Service fb6fa5
 */
Packit Service fb6fa5
GdkDrawable *
Packit Service fb6fa5
_gdk_drawable_get_source_drawable (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  if (GDK_DRAWABLE_GET_CLASS (drawable)->get_source_drawable)
Packit Service fb6fa5
    return GDK_DRAWABLE_GET_CLASS (drawable)->get_source_drawable (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return drawable;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
cairo_surface_t *
Packit Service fb6fa5
_gdk_drawable_create_cairo_surface (GdkDrawable *drawable,
Packit Service fb6fa5
				    int width,
Packit Service fb6fa5
				    int height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return GDK_DRAWABLE_GET_CLASS (drawable)->create_cairo_surface (drawable,
Packit Service fb6fa5
								  width, height);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
#define __GDK_DRAW_C__
Packit Service fb6fa5
#include "gdkaliasdef.c"