1 /* GDK - The GIMP Drawing Kit 2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 3 * 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. 8 * 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. 13 * 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. 18 */ 19 20 /* 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/. 25 */ 26 27 #ifndef __GDK_DRAWABLE_H__ 28 #define __GDK_DRAWABLE_H__ 29 30 #if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION) 31 #error "Only <gdk/gdk.h> can be included directly." 32 #endif 33 34 #include <gdk/gdktypes.h> 35 #include <gdk/gdkgc.h> 36 #include <gdk/gdkrgb.h> 37 #include <gdk-pixbuf/gdk-pixbuf.h> 38 39 #include <cairo.h> 40 41 G_BEGIN_DECLS 42 43 typedef struct _GdkDrawableClass GdkDrawableClass; 44 typedef struct _GdkTrapezoid GdkTrapezoid; 45 46 #define GDK_TYPE_DRAWABLE (gdk_drawable_get_type ()) 47 #define GDK_DRAWABLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DRAWABLE, GdkDrawable)) 48 #define GDK_DRAWABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DRAWABLE, GdkDrawableClass)) 49 #define GDK_IS_DRAWABLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DRAWABLE)) 50 #define GDK_IS_DRAWABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DRAWABLE)) 51 #define GDK_DRAWABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DRAWABLE, GdkDrawableClass)) 52 53 struct _GdkDrawable 54 { 55 GObject parent_instance; 56 }; 57 58 struct _GdkDrawableClass 59 { 60 GObjectClass parent_class; 61 62 GdkGC *(*create_gc) (GdkDrawable *drawable, 63 GdkGCValues *values, 64 GdkGCValuesMask mask); 65 void (*draw_rectangle) (GdkDrawable *drawable, 66 GdkGC *gc, 67 gboolean filled, 68 gint x, 69 gint y, 70 gint width, 71 gint height); 72 void (*draw_arc) (GdkDrawable *drawable, 73 GdkGC *gc, 74 gboolean filled, 75 gint x, 76 gint y, 77 gint width, 78 gint height, 79 gint angle1, 80 gint angle2); 81 void (*draw_polygon) (GdkDrawable *drawable, 82 GdkGC *gc, 83 gboolean filled, 84 GdkPoint *points, 85 gint npoints); 86 void (*draw_text) (GdkDrawable *drawable, 87 GdkFont *font, 88 GdkGC *gc, 89 gint x, 90 gint y, 91 const gchar *text, 92 gint text_length); 93 void (*draw_text_wc) (GdkDrawable *drawable, 94 GdkFont *font, 95 GdkGC *gc, 96 gint x, 97 gint y, 98 const GdkWChar *text, 99 gint text_length); 100 void (*draw_drawable) (GdkDrawable *drawable, 101 GdkGC *gc, 102 GdkDrawable *src, 103 gint xsrc, 104 gint ysrc, 105 gint xdest, 106 gint ydest, 107 gint width, 108 gint height); 109 void (*draw_points) (GdkDrawable *drawable, 110 GdkGC *gc, 111 GdkPoint *points, 112 gint npoints); 113 void (*draw_segments) (GdkDrawable *drawable, 114 GdkGC *gc, 115 GdkSegment *segs, 116 gint nsegs); 117 void (*draw_lines) (GdkDrawable *drawable, 118 GdkGC *gc, 119 GdkPoint *points, 120 gint npoints); 121 122 void (*draw_glyphs) (GdkDrawable *drawable, 123 GdkGC *gc, 124 PangoFont *font, 125 gint x, 126 gint y, 127 PangoGlyphString *glyphs); 128 129 void (*draw_image) (GdkDrawable *drawable, 130 GdkGC *gc, 131 GdkImage *image, 132 gint xsrc, 133 gint ysrc, 134 gint xdest, 135 gint ydest, 136 gint width, 137 gint height); 138 139 gint (*get_depth) (GdkDrawable *drawable); 140 void (*get_size) (GdkDrawable *drawable, 141 gint *width, 142 gint *height); 143 144 void (*set_colormap) (GdkDrawable *drawable, 145 GdkColormap *cmap); 146 147 GdkColormap* (*get_colormap) (GdkDrawable *drawable); 148 GdkVisual* (*get_visual) (GdkDrawable *drawable); 149 GdkScreen* (*get_screen) (GdkDrawable *drawable); 150 151 GdkImage* (*get_image) (GdkDrawable *drawable, 152 gint x, 153 gint y, 154 gint width, 155 gint height); 156 157 GdkRegion* (*get_clip_region) (GdkDrawable *drawable); 158 GdkRegion* (*get_visible_region) (GdkDrawable *drawable); 159 160 GdkDrawable* (*get_composite_drawable) (GdkDrawable *drawable, 161 gint x, 162 gint y, 163 gint width, 164 gint height, 165 gint *composite_x_offset, 166 gint *composite_y_offset); 167 168 void (*draw_pixbuf) (GdkDrawable *drawable, 169 GdkGC *gc, 170 GdkPixbuf *pixbuf, 171 gint src_x, 172 gint src_y, 173 gint dest_x, 174 gint dest_y, 175 gint width, 176 gint height, 177 GdkRgbDither dither, 178 gint x_dither, 179 gint y_dither); 180 GdkImage* (*_copy_to_image) (GdkDrawable *drawable, 181 GdkImage *image, 182 gint src_x, 183 gint src_y, 184 gint dest_x, 185 gint dest_y, 186 gint width, 187 gint height); 188 189 void (*draw_glyphs_transformed) (GdkDrawable *drawable, 190 GdkGC *gc, 191 PangoMatrix *matrix, 192 PangoFont *font, 193 gint x, 194 gint y, 195 PangoGlyphString *glyphs); 196 void (*draw_trapezoids) (GdkDrawable *drawable, 197 GdkGC *gc, 198 GdkTrapezoid *trapezoids, 199 gint n_trapezoids); 200 201 cairo_surface_t *(*ref_cairo_surface) (GdkDrawable *drawable); 202 203 GdkDrawable *(*get_source_drawable) (GdkDrawable *drawable); 204 205 void (*set_cairo_clip) (GdkDrawable *drawable, 206 cairo_t *cr); 207 208 cairo_surface_t * (*create_cairo_surface) (GdkDrawable *drawable, 209 int width, 210 int height); 211 212 void (*draw_drawable_with_src) (GdkDrawable *drawable, 213 GdkGC *gc, 214 GdkDrawable *src, 215 gint xsrc, 216 gint ysrc, 217 gint xdest, 218 gint ydest, 219 gint width, 220 gint height, 221 GdkDrawable *original_src); 222 223 /* Padding for future expansion */ 224 void (*_gdk_reserved7) (void); 225 void (*_gdk_reserved9) (void); 226 void (*_gdk_reserved10) (void); 227 void (*_gdk_reserved11) (void); 228 void (*_gdk_reserved12) (void); 229 void (*_gdk_reserved13) (void); 230 void (*_gdk_reserved14) (void); 231 void (*_gdk_reserved15) (void); 232 }; 233 234 struct _GdkTrapezoid 235 { 236 double y1, x11, x21, y2, x12, x22; 237 }; 238 239 GType gdk_drawable_get_type (void) G_GNUC_CONST; 240 241 /* Manipulation of drawables 242 */ 243 244 #ifndef GDK_DISABLE_DEPRECATED 245 void gdk_drawable_set_data (GdkDrawable *drawable, 246 const gchar *key, 247 gpointer data, 248 GDestroyNotify destroy_func); 249 gpointer gdk_drawable_get_data (GdkDrawable *drawable, 250 const gchar *key); 251 #endif /* GDK_DISABLE_DEPRECATED */ 252 253 void gdk_drawable_set_colormap (GdkDrawable *drawable, 254 GdkColormap *colormap); 255 GdkColormap* gdk_drawable_get_colormap (GdkDrawable *drawable); 256 gint gdk_drawable_get_depth (GdkDrawable *drawable); 257 258 #if !defined (GDK_DISABLE_DEPRECATED) 259 void gdk_drawable_get_size (GdkDrawable *drawable, 260 gint *width, 261 gint *height); 262 GdkVisual* gdk_drawable_get_visual (GdkDrawable *drawable); 263 GdkScreen* gdk_drawable_get_screen (GdkDrawable *drawable); 264 GdkDisplay* gdk_drawable_get_display (GdkDrawable *drawable); 265 #endif /* GDK_DISABLE_DEPRECATED */ 266 267 #ifndef GDK_DISABLE_DEPRECATED 268 GdkDrawable* gdk_drawable_ref (GdkDrawable *drawable); 269 void gdk_drawable_unref (GdkDrawable *drawable); 270 #endif /* GDK_DISABLE_DEPRECATED */ 271 272 /* Drawing 273 */ 274 #ifndef GDK_DISABLE_DEPRECATED 275 void gdk_draw_point (GdkDrawable *drawable, 276 GdkGC *gc, 277 gint x, 278 gint y); 279 void gdk_draw_line (GdkDrawable *drawable, 280 GdkGC *gc, 281 gint x1_, 282 gint y1_, 283 gint x2_, 284 gint y2_); 285 void gdk_draw_rectangle (GdkDrawable *drawable, 286 GdkGC *gc, 287 gboolean filled, 288 gint x, 289 gint y, 290 gint width, 291 gint height); 292 void gdk_draw_arc (GdkDrawable *drawable, 293 GdkGC *gc, 294 gboolean filled, 295 gint x, 296 gint y, 297 gint width, 298 gint height, 299 gint angle1, 300 gint angle2); 301 void gdk_draw_polygon (GdkDrawable *drawable, 302 GdkGC *gc, 303 gboolean filled, 304 const GdkPoint *points, 305 gint n_points); 306 void gdk_draw_string (GdkDrawable *drawable, 307 GdkFont *font, 308 GdkGC *gc, 309 gint x, 310 gint y, 311 const gchar *string); 312 void gdk_draw_text (GdkDrawable *drawable, 313 GdkFont *font, 314 GdkGC *gc, 315 gint x, 316 gint y, 317 const gchar *text, 318 gint text_length); 319 void gdk_draw_text_wc (GdkDrawable *drawable, 320 GdkFont *font, 321 GdkGC *gc, 322 gint x, 323 gint y, 324 const GdkWChar *text, 325 gint text_length); 326 void gdk_draw_drawable (GdkDrawable *drawable, 327 GdkGC *gc, 328 GdkDrawable *src, 329 gint xsrc, 330 gint ysrc, 331 gint xdest, 332 gint ydest, 333 gint width, 334 gint height); 335 void gdk_draw_image (GdkDrawable *drawable, 336 GdkGC *gc, 337 GdkImage *image, 338 gint xsrc, 339 gint ysrc, 340 gint xdest, 341 gint ydest, 342 gint width, 343 gint height); 344 void gdk_draw_points (GdkDrawable *drawable, 345 GdkGC *gc, 346 const GdkPoint *points, 347 gint n_points); 348 void gdk_draw_segments (GdkDrawable *drawable, 349 GdkGC *gc, 350 const GdkSegment *segs, 351 gint n_segs); 352 void gdk_draw_lines (GdkDrawable *drawable, 353 GdkGC *gc, 354 const GdkPoint *points, 355 gint n_points); 356 void gdk_draw_pixbuf (GdkDrawable *drawable, 357 GdkGC *gc, 358 const GdkPixbuf *pixbuf, 359 gint src_x, 360 gint src_y, 361 gint dest_x, 362 gint dest_y, 363 gint width, 364 gint height, 365 GdkRgbDither dither, 366 gint x_dither, 367 gint y_dither); 368 369 void gdk_draw_glyphs (GdkDrawable *drawable, 370 GdkGC *gc, 371 PangoFont *font, 372 gint x, 373 gint y, 374 PangoGlyphString *glyphs); 375 void gdk_draw_layout_line (GdkDrawable *drawable, 376 GdkGC *gc, 377 gint x, 378 gint y, 379 PangoLayoutLine *line); 380 void gdk_draw_layout (GdkDrawable *drawable, 381 GdkGC *gc, 382 gint x, 383 gint y, 384 PangoLayout *layout); 385 386 void gdk_draw_layout_line_with_colors (GdkDrawable *drawable, 387 GdkGC *gc, 388 gint x, 389 gint y, 390 PangoLayoutLine *line, 391 const GdkColor *foreground, 392 const GdkColor *background); 393 void gdk_draw_layout_with_colors (GdkDrawable *drawable, 394 GdkGC *gc, 395 gint x, 396 gint y, 397 PangoLayout *layout, 398 const GdkColor *foreground, 399 const GdkColor *background); 400 401 void gdk_draw_glyphs_transformed (GdkDrawable *drawable, 402 GdkGC *gc, 403 const PangoMatrix *matrix, 404 PangoFont *font, 405 gint x, 406 gint y, 407 PangoGlyphString *glyphs); 408 void gdk_draw_trapezoids (GdkDrawable *drawable, 409 GdkGC *gc, 410 const GdkTrapezoid *trapezoids, 411 gint n_trapezoids); 412 413 #define gdk_draw_pixmap gdk_draw_drawable 414 #define gdk_draw_bitmap gdk_draw_drawable 415 416 GdkImage* gdk_drawable_get_image (GdkDrawable *drawable, 417 gint x, 418 gint y, 419 gint width, 420 gint height); 421 GdkImage *gdk_drawable_copy_to_image (GdkDrawable *drawable, 422 GdkImage *image, 423 gint src_x, 424 gint src_y, 425 gint dest_x, 426 gint dest_y, 427 gint width, 428 gint height); 429 #endif /* GDK_DISABLE_DEPRECATED */ 430 431 GdkRegion *gdk_drawable_get_clip_region (GdkDrawable *drawable); 432 GdkRegion *gdk_drawable_get_visible_region (GdkDrawable *drawable); 433 434 G_END_DECLS 435 436 #endif /* __GDK_DRAWABLE_H__ */ 437