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 Library 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 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the Free
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #include "gdkprivate.h"
25 gdk_draw_point (GdkDrawable *drawable,
30 GdkWindowPrivate *drawable_private;
31 GdkGCPrivate *gc_private;
33 g_return_if_fail (drawable != NULL);
34 g_return_if_fail (gc != NULL);
36 drawable_private = (GdkWindowPrivate*) drawable;
37 gc_private = (GdkGCPrivate*) gc;
39 XDrawPoint (drawable_private->xdisplay, drawable_private->xwindow,
40 gc_private->xgc, x, y);
44 gdk_draw_line (GdkDrawable *drawable,
51 GdkWindowPrivate *drawable_private;
52 GdkGCPrivate *gc_private;
54 g_return_if_fail (drawable != NULL);
55 g_return_if_fail (gc != NULL);
57 drawable_private = (GdkWindowPrivate*) drawable;
58 gc_private = (GdkGCPrivate*) gc;
60 XDrawLine (drawable_private->xdisplay, drawable_private->xwindow,
61 gc_private->xgc, x1, y1, x2, y2);
65 gdk_draw_rectangle (GdkDrawable *drawable,
73 GdkWindowPrivate *drawable_private;
74 GdkGCPrivate *gc_private;
76 g_return_if_fail (drawable != NULL);
77 g_return_if_fail (gc != NULL);
79 drawable_private = (GdkWindowPrivate*) drawable;
80 gc_private = (GdkGCPrivate*) gc;
83 width = drawable_private->width;
85 height = drawable_private->height;
88 XFillRectangle (drawable_private->xdisplay, drawable_private->xwindow,
89 gc_private->xgc, x, y, width, height);
91 XDrawRectangle (drawable_private->xdisplay, drawable_private->xwindow,
92 gc_private->xgc, x, y, width, height);
96 gdk_draw_arc (GdkDrawable *drawable,
106 GdkWindowPrivate *drawable_private;
107 GdkGCPrivate *gc_private;
109 g_return_if_fail (drawable != NULL);
110 g_return_if_fail (gc != NULL);
112 drawable_private = (GdkWindowPrivate*) drawable;
113 gc_private = (GdkGCPrivate*) gc;
116 width = drawable_private->width;
118 height = drawable_private->height;
121 XFillArc (drawable_private->xdisplay, drawable_private->xwindow,
122 gc_private->xgc, x, y, width, height, angle1, angle2);
124 XDrawArc (drawable_private->xdisplay, drawable_private->xwindow,
125 gc_private->xgc, x, y, width, height, angle1, angle2);
129 gdk_draw_polygon (GdkDrawable *drawable,
135 GdkWindowPrivate *drawable_private;
136 GdkGCPrivate *gc_private;
138 g_return_if_fail (drawable != NULL);
139 g_return_if_fail (gc != NULL);
141 drawable_private = (GdkWindowPrivate*) drawable;
142 gc_private = (GdkGCPrivate*) gc;
146 XFillPolygon (drawable_private->xdisplay, drawable_private->xwindow,
147 gc_private->xgc, (XPoint*) points, npoints, Complex, CoordModeOrigin);
151 XDrawLines (drawable_private->xdisplay, drawable_private->xwindow,
152 gc_private->xgc, (XPoint*) points, npoints, CoordModeOrigin);
154 if ((points[0].x != points[npoints-1].x) ||
155 (points[0].y != points[npoints-1].y))
156 XDrawLine (drawable_private->xdisplay, drawable_private->xwindow,
157 gc_private->xgc, points[npoints-1].x, points[npoints-1].y,
158 points[0].x, points[0].y);
164 * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
166 * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
169 gdk_draw_string (GdkDrawable *drawable,
176 GdkWindowPrivate *drawable_private;
177 GdkFontPrivate *font_private;
178 GdkGCPrivate *gc_private;
180 g_return_if_fail (drawable != NULL);
181 g_return_if_fail (font != NULL);
182 g_return_if_fail (gc != NULL);
183 g_return_if_fail (string != NULL);
185 drawable_private = (GdkWindowPrivate*) drawable;
186 gc_private = (GdkGCPrivate*) gc;
187 font_private = (GdkFontPrivate*) font;
189 if (font->type == GDK_FONT_FONT)
191 XFontStruct *xfont = (XFontStruct *) font_private->xfont;
192 XSetFont(drawable_private->xdisplay, gc_private->xgc, xfont->fid);
193 if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
195 XDrawString (drawable_private->xdisplay, drawable_private->xwindow,
196 gc_private->xgc, x, y, string, strlen (string));
200 XDrawString16 (drawable_private->xdisplay, drawable_private->xwindow,
201 gc_private->xgc, x, y, (XChar2b *) string,
202 strlen (string) / 2);
205 else if (font->type == GDK_FONT_FONTSET)
207 XFontSet fontset = (XFontSet) font_private->xfont;
208 XmbDrawString (drawable_private->xdisplay, drawable_private->xwindow,
209 fontset, gc_private->xgc, x, y, string, strlen (string));
212 g_error("undefined font type\n");
217 * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
219 * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
222 gdk_draw_text (GdkDrawable *drawable,
230 GdkWindowPrivate *drawable_private;
231 GdkFontPrivate *font_private;
232 GdkGCPrivate *gc_private;
234 g_return_if_fail (drawable != NULL);
235 g_return_if_fail (font != NULL);
236 g_return_if_fail (gc != NULL);
237 g_return_if_fail (text != NULL);
239 drawable_private = (GdkWindowPrivate*) drawable;
240 gc_private = (GdkGCPrivate*) gc;
241 font_private = (GdkFontPrivate*) font;
243 if (font->type == GDK_FONT_FONT)
245 XFontStruct *xfont = (XFontStruct *) font_private->xfont;
246 XSetFont(drawable_private->xdisplay, gc_private->xgc, xfont->fid);
247 if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
249 XDrawString (drawable_private->xdisplay, drawable_private->xwindow,
250 gc_private->xgc, x, y, text, text_length);
254 XDrawString16 (drawable_private->xdisplay, drawable_private->xwindow,
255 gc_private->xgc, x, y, (XChar2b *) text, text_length / 2);
258 else if (font->type == GDK_FONT_FONTSET)
260 XFontSet fontset = (XFontSet) font_private->xfont;
261 XmbDrawString (drawable_private->xdisplay, drawable_private->xwindow,
262 fontset, gc_private->xgc, x, y, text, text_length);
265 g_error("undefined font type\n");
269 gdk_draw_pixmap (GdkDrawable *drawable,
279 GdkWindowPrivate *drawable_private;
280 GdkWindowPrivate *src_private;
281 GdkGCPrivate *gc_private;
283 g_return_if_fail (drawable != NULL);
284 g_return_if_fail (src != NULL);
285 g_return_if_fail (gc != NULL);
287 drawable_private = (GdkWindowPrivate*) drawable;
288 src_private = (GdkWindowPrivate*) src;
289 gc_private = (GdkGCPrivate*) gc;
292 width = src_private->width;
294 height = src_private->height;
296 XCopyArea (drawable_private->xdisplay,
297 src_private->xwindow,
298 drawable_private->xwindow,
306 gdk_draw_image (GdkDrawable *drawable,
316 GdkImagePrivate *image_private;
318 g_return_if_fail (drawable != NULL);
319 g_return_if_fail (image != NULL);
320 g_return_if_fail (gc != NULL);
322 image_private = (GdkImagePrivate*) image;
324 g_return_if_fail (image_private->image_put != NULL);
327 width = image->width;
329 height = image->height;
331 (* image_private->image_put) (drawable, gc, image, xsrc, ysrc,
332 xdest, ydest, width, height);
336 gdk_draw_points (GdkDrawable *drawable,
341 GdkWindowPrivate *drawable_private;
342 GdkGCPrivate *gc_private;
344 g_return_if_fail (drawable != NULL);
345 g_return_if_fail ((points != NULL) && (npoints > 0));
346 g_return_if_fail (gc != NULL);
348 drawable_private = (GdkWindowPrivate*) drawable;
349 gc_private = (GdkGCPrivate*) gc;
351 XDrawPoints (drawable_private->xdisplay,
352 drawable_private->xwindow,
360 gdk_draw_segments (GdkDrawable *drawable,
365 GdkWindowPrivate *drawable_private;
366 GdkGCPrivate *gc_private;
371 g_return_if_fail (drawable != NULL);
372 g_return_if_fail (segs != NULL);
373 g_return_if_fail (gc != NULL);
375 drawable_private = (GdkWindowPrivate*) drawable;
376 gc_private = (GdkGCPrivate*) gc;
378 XDrawSegments (drawable_private->xdisplay,
379 drawable_private->xwindow,