1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
27 #include "gdkdrawable.h"
28 #include "gdkinternals.h"
29 #include "gdkwindow.h"
32 gdk_drawable_get_type (void)
34 static GType object_type = 0;
38 static const GTypeInfo object_info =
40 sizeof (GdkDrawableClass),
42 (GBaseFinalizeFunc) NULL,
43 (GClassInitFunc) NULL,
44 NULL, /* class_finalize */
45 NULL, /* class_data */
48 (GInstanceInitFunc) NULL,
51 object_type = g_type_register_static (G_TYPE_OBJECT,
59 /* Manipulation of drawables
63 gdk_drawable_set_data (GdkDrawable *drawable,
66 GDestroyNotify destroy_func)
68 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
70 g_object_set_qdata_full (G_OBJECT (drawable),
71 g_quark_from_string (key),
77 gdk_drawable_get_data (GdkDrawable *drawable,
80 g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
82 return g_object_get_qdata (G_OBJECT (drawable),
83 g_quark_try_string (key));
87 gdk_drawable_get_size (GdkDrawable *drawable,
91 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
93 GDK_DRAWABLE_GET_CLASS (drawable)->get_size (drawable, width, height);
97 gdk_drawable_get_visual (GdkDrawable *drawable)
99 g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
101 return GDK_DRAWABLE_GET_CLASS (drawable)->get_visual (drawable);
105 gdk_drawable_get_depth (GdkDrawable *drawable)
107 g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), 0);
109 return GDK_DRAWABLE_GET_CLASS (drawable)->get_depth (drawable);
113 gdk_drawable_set_colormap (GdkDrawable *drawable,
116 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
118 GDK_DRAWABLE_GET_CLASS (drawable)->set_colormap (drawable, cmap);
122 gdk_drawable_get_colormap (GdkDrawable *drawable)
124 g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
126 return GDK_DRAWABLE_GET_CLASS (drawable)->get_colormap (drawable);
130 gdk_drawable_ref (GdkDrawable *drawable)
132 return (GdkDrawable *) g_object_ref (G_OBJECT (drawable));
136 gdk_drawable_unref (GdkDrawable *drawable)
138 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
140 g_object_unref (G_OBJECT (drawable));
146 gdk_draw_point (GdkDrawable *drawable,
153 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
154 g_return_if_fail (GDK_IS_GC (gc));
159 GDK_DRAWABLE_GET_CLASS (drawable)->draw_points (drawable, gc, &point, 1);
163 gdk_draw_line (GdkDrawable *drawable,
172 g_return_if_fail (drawable != NULL);
173 g_return_if_fail (gc != NULL);
174 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
175 g_return_if_fail (GDK_IS_GC (gc));
181 GDK_DRAWABLE_GET_CLASS (drawable)->draw_segments (drawable, gc, &segment, 1);
185 gdk_draw_rectangle (GdkDrawable *drawable,
193 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
194 g_return_if_fail (GDK_IS_GC (gc));
196 if (width < 0 || height < 0)
201 gdk_drawable_get_size (drawable, &real_width, &real_height);
206 height = real_height;
209 GDK_DRAWABLE_GET_CLASS (drawable)->draw_rectangle (drawable, gc, filled, x, y,
214 gdk_draw_arc (GdkDrawable *drawable,
224 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
225 g_return_if_fail (GDK_IS_GC (gc));
227 if (width < 0 || height < 0)
232 gdk_drawable_get_size (drawable, &real_width, &real_height);
237 height = real_height;
240 GDK_DRAWABLE_GET_CLASS (drawable)->draw_arc (drawable, gc, filled,
241 x, y, width, height, angle1, angle2);
245 gdk_draw_polygon (GdkDrawable *drawable,
251 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
252 g_return_if_fail (GDK_IS_GC (gc));
254 GDK_DRAWABLE_GET_CLASS (drawable)->draw_polygon (drawable, gc, filled,
260 * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
262 * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
265 gdk_draw_string (GdkDrawable *drawable,
272 gdk_draw_text (drawable, font, gc, x, y, string, _gdk_font_strlen (font, string));
277 * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
279 * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
282 gdk_draw_text (GdkDrawable *drawable,
290 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
291 g_return_if_fail (font != NULL);
292 g_return_if_fail (GDK_IS_GC (gc));
293 g_return_if_fail (text != NULL);
295 GDK_DRAWABLE_GET_CLASS (drawable)->draw_text (drawable, font, gc, x, y, text, text_length);
299 gdk_draw_text_wc (GdkDrawable *drawable,
304 const GdkWChar *text,
307 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
308 g_return_if_fail (font != NULL);
309 g_return_if_fail (GDK_IS_GC (gc));
310 g_return_if_fail (text != NULL);
312 GDK_DRAWABLE_GET_CLASS (drawable)->draw_text_wc (drawable, font, gc, x, y, text, text_length);
316 gdk_draw_drawable (GdkDrawable *drawable,
326 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
327 g_return_if_fail (src != NULL);
328 g_return_if_fail (GDK_IS_GC (gc));
330 if (width < 0 || height < 0)
335 gdk_drawable_get_size (src, &real_width, &real_height);
340 height = real_height;
343 GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc, src,
344 xsrc, ysrc, xdest, ydest,
349 gdk_draw_image (GdkDrawable *drawable,
359 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
360 g_return_if_fail (image != NULL);
361 g_return_if_fail (GDK_IS_GC (gc));
364 width = image->width;
366 height = image->height;
368 GDK_DRAWABLE_GET_CLASS (drawable)->draw_image (drawable, gc, image, xsrc, ysrc,
369 xdest, ydest, width, height);
373 gdk_draw_points (GdkDrawable *drawable,
378 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
379 g_return_if_fail ((points != NULL) && (npoints > 0));
380 g_return_if_fail (GDK_IS_GC (gc));
381 g_return_if_fail (npoints >= 0);
386 GDK_DRAWABLE_GET_CLASS (drawable)->draw_points (drawable, gc, points, npoints);
390 gdk_draw_segments (GdkDrawable *drawable,
395 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
400 g_return_if_fail (segs != NULL);
401 g_return_if_fail (GDK_IS_GC (gc));
402 g_return_if_fail (nsegs >= 0);
404 GDK_DRAWABLE_GET_CLASS (drawable)->draw_segments (drawable, gc, segs, nsegs);
408 gdk_draw_lines (GdkDrawable *drawable,
414 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
415 g_return_if_fail (points != NULL);
416 g_return_if_fail (GDK_IS_GC (gc));
417 g_return_if_fail (npoints >= 0);
422 GDK_DRAWABLE_GET_CLASS (drawable)->draw_lines (drawable, gc, points, npoints);
426 gdk_draw_glyphs (GdkDrawable *drawable,
431 PangoGlyphString *glyphs)
434 g_return_if_fail (GDK_IS_DRAWABLE (drawable));
435 g_return_if_fail (GDK_IS_GC (gc));
438 GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs (drawable, gc, font, x, y, glyphs);