1 /* 2 * label-object.h 3 * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>. 4 * 5 * This file is part of gLabels. 6 * 7 * gLabels is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * gLabels is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with gLabels. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #ifndef __LABEL_OBJECT_H__ 22 #define __LABEL_OBJECT_H__ 23 24 #include <glib-object.h> 25 #include <gtk/gtk.h> 26 #include <pango/pango.h> 27 #include <cairo.h> 28 29 G_BEGIN_DECLS 30 31 32 typedef enum { 33 GL_VALIGN_TOP, 34 GL_VALIGN_VCENTER, 35 GL_VALIGN_BOTTOM 36 } glValignment; 37 38 39 typedef enum { 40 GL_LABEL_OBJECT_TEXT, 41 GL_LABEL_OBJECT_BOX, 42 GL_LABEL_OBJECT_LINE, 43 GL_LABEL_OBJECT_ELLIPSE, 44 GL_LABEL_OBJECT_IMAGE, 45 GL_LABEL_OBJECT_BARCODE, 46 GL_LABEL_OBJECT_N_TYPES 47 } glLabelObjectType; 48 49 50 typedef enum { 51 GL_LABEL_OBJECT_HANDLE_NONE = 0, 52 GL_LABEL_OBJECT_HANDLE_N, 53 GL_LABEL_OBJECT_HANDLE_E, 54 GL_LABEL_OBJECT_HANDLE_W, 55 GL_LABEL_OBJECT_HANDLE_S, 56 GL_LABEL_OBJECT_HANDLE_NW, 57 GL_LABEL_OBJECT_HANDLE_NE, 58 GL_LABEL_OBJECT_HANDLE_SE, 59 GL_LABEL_OBJECT_HANDLE_SW, 60 GL_LABEL_OBJECT_HANDLE_P1, 61 GL_LABEL_OBJECT_HANDLE_P2 62 } glLabelObjectHandle; 63 64 65 #define GL_TYPE_LABEL_OBJECT (gl_label_object_get_type ()) 66 #define GL_LABEL_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_OBJECT, glLabelObject)) 67 #define GL_LABEL_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_OBJECT, glLabelObjectClass)) 68 #define GL_IS_LABEL_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_OBJECT)) 69 #define GL_IS_LABEL_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_OBJECT)) 70 #define GL_LABEL_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_LABEL_OBJECT, glLabelObjectClass)) 71 72 73 typedef struct _glLabelObject glLabelObject; 74 typedef struct _glLabelObjectClass glLabelObjectClass; 75 76 typedef struct _glLabelObjectPrivate glLabelObjectPrivate; 77 78 #include "label.h" 79 #include "color.h" 80 81 struct _glLabelObject { 82 GObject object; 83 84 glLabelObjectPrivate *priv; 85 }; 86 87 struct _glLabelObjectClass { 88 GObjectClass parent_class; 89 90 /* 91 * Set/Get Methods 92 */ 93 94 void (*set_size) (glLabelObject *object, 95 gdouble w, 96 gdouble h, 97 gboolean checkpoint); 98 99 void (*set_font_family) (glLabelObject *object, 100 const gchar *font_family, 101 gboolean checkpoint); 102 103 void (*set_font_size) (glLabelObject *object, 104 gdouble font_size, 105 gboolean checkpoint); 106 107 void (*set_font_weight) (glLabelObject *object, 108 PangoWeight font_weight, 109 gboolean checkpoint); 110 111 void (*set_font_italic_flag) (glLabelObject *object, 112 gboolean font_italic_flag, 113 gboolean checkpoint); 114 115 void (*set_text_alignment) (glLabelObject *object, 116 PangoAlignment text_alignment, 117 gboolean checkpoint); 118 119 void (*set_text_valignment) (glLabelObject *object, 120 glValignment text_valignment, 121 gboolean checkpoint); 122 123 void (*set_text_line_spacing)(glLabelObject *object, 124 gdouble text_line_spacing, 125 gboolean checkpoint); 126 127 void (*set_text_color) (glLabelObject *object, 128 glColorNode *text_color_node, 129 gboolean checkpoint); 130 131 void (*set_fill_color) (glLabelObject *object, 132 glColorNode *fill_color_node, 133 gboolean checkpoint); 134 135 void (*set_line_color) (glLabelObject *object, 136 glColorNode *line_color_node, 137 gboolean checkpoint); 138 139 void (*set_line_width) (glLabelObject *object, 140 gdouble line_width, 141 gboolean checkpoint); 142 143 void (*get_size) (glLabelObject *object, 144 gdouble *w, 145 gdouble *h); 146 147 gchar * (*get_font_family) (glLabelObject *object); 148 149 gdouble (*get_font_size) (glLabelObject *object); 150 151 PangoWeight (*get_font_weight) (glLabelObject *object); 152 153 gboolean (*get_font_italic_flag) (glLabelObject *object); 154 155 PangoAlignment (*get_text_alignment) (glLabelObject *object); 156 157 glValignment (*get_text_valignment) (glLabelObject *object); 158 159 gdouble (*get_text_line_spacing) (glLabelObject *object); 160 161 glColorNode * (*get_text_color) (glLabelObject *object); 162 163 glColorNode * (*get_fill_color) (glLabelObject *object); 164 165 glColorNode * (*get_line_color) (glLabelObject *object); 166 167 gdouble (*get_line_width) (glLabelObject *object); 168 169 void (*copy) (glLabelObject *dst_object 170 , 171 glLabelObject *src_object); 172 173 /* 174 * Draw methods 175 */ 176 void (*draw_shadow) (glLabelObject *object, 177 cairo_t *cr, 178 gboolean screen_flag, 179 glMergeRecord *record); 180 181 void (*draw_object) (glLabelObject *object, 182 cairo_t *cr, 183 gboolean screen_flag, 184 glMergeRecord *record); 185 186 void (*draw_handles) (glLabelObject *object, 187 cairo_t *cr); 188 189 /* 190 * Cairo context query methods 191 */ 192 gboolean (*object_at) (glLabelObject *object, 193 cairo_t *cr, 194 gdouble x_pixels, 195 gdouble y_pixels); 196 197 glLabelObjectHandle (*handle_at) (glLabelObject *object, 198 cairo_t *cr, 199 gdouble x_pixels, 200 gdouble y_pixels); 201 202 203 /* 204 * Signals 205 */ 206 207 void (*changed) (glLabelObject *object, 208 gpointer user_data); 209 210 void (*moved) (glLabelObject *object, 211 gpointer user_data); 212 213 }; 214 215 216 217 GType gl_label_object_get_type (void) G_GNUC_CONST; 218 219 GObject *gl_label_object_new (glLabel *label); 220 221 222 glLabelObject *gl_label_object_dup (glLabelObject *src_object, 223 glLabel *label); 224 225 226 void gl_label_object_emit_changed (glLabelObject *object); 227 228 void gl_label_object_set_parent (glLabelObject *object, 229 glLabel *label); 230 231 glLabel *gl_label_object_get_parent (glLabelObject *object); 232 233 234 void gl_label_object_select (glLabelObject *object); 235 void gl_label_object_unselect (glLabelObject *object); 236 gboolean gl_label_object_is_selected (glLabelObject *object); 237 238 void gl_label_object_set_name (glLabelObject *object, 239 gchar *name); 240 241 gchar *gl_label_object_get_name (glLabelObject *object); 242 243 244 void gl_label_object_set_position (glLabelObject *object, 245 gdouble x, 246 gdouble y, 247 gboolean checkpoint); 248 249 void gl_label_object_set_position_relative (glLabelObject *object, 250 gdouble dx, 251 gdouble dy, 252 gboolean checkpoint); 253 254 void gl_label_object_set_size (glLabelObject *object, 255 gdouble w, 256 gdouble h, 257 gboolean checkpoint); 258 259 void gl_label_object_set_raw_size (glLabelObject *object, 260 gdouble w, 261 gdouble h, 262 gboolean checkpoint); 263 264 void gl_label_object_set_size_honor_aspect (glLabelObject *object, 265 gdouble w, 266 gdouble h, 267 gboolean checkpoint); 268 269 void gl_label_object_set_font_family (glLabelObject *object, 270 const gchar *font_family, 271 gboolean checkpoint); 272 273 void gl_label_object_set_font_size (glLabelObject *object, 274 gdouble font_size, 275 gboolean checkpoint); 276 277 void gl_label_object_set_font_weight (glLabelObject *object, 278 PangoWeight font_weight, 279 gboolean checkpoint); 280 281 void gl_label_object_set_font_italic_flag (glLabelObject *object, 282 gboolean font_italic_flag, 283 gboolean checkpoint); 284 285 void gl_label_object_set_text_alignment (glLabelObject *object, 286 PangoAlignment text_alignment, 287 gboolean checkpoint); 288 289 void gl_label_object_set_text_valignment (glLabelObject *object, 290 glValignment text_valignment, 291 gboolean checkpoint); 292 293 void gl_label_object_set_text_color (glLabelObject *object, 294 glColorNode *text_color_node, 295 gboolean checkpoint); 296 297 void gl_label_object_set_text_line_spacing (glLabelObject *object, 298 gdouble text_line_spacing, 299 gboolean checkpoint); 300 301 void gl_label_object_set_fill_color (glLabelObject *object, 302 glColorNode *fill_color_node, 303 gboolean checkpoint); 304 305 void gl_label_object_set_line_color (glLabelObject *object, 306 glColorNode *line_color_node, 307 gboolean checkpoint); 308 309 void gl_label_object_set_line_width (glLabelObject *object, 310 gdouble line_width, 311 gboolean checkpoint); 312 313 314 void gl_label_object_set_shadow_state (glLabelObject *object, 315 gboolean state, 316 gboolean checkpoint); 317 318 void gl_label_object_set_shadow_offset (glLabelObject *object, 319 gdouble x, 320 gdouble y, 321 gboolean checkpoint); 322 323 void gl_label_object_set_shadow_color (glLabelObject *object, 324 glColorNode *color_node, 325 gboolean checkpoint); 326 327 void gl_label_object_set_shadow_opacity (glLabelObject *object, 328 gdouble alpha, 329 gboolean checkpoint); 330 331 332 void gl_label_object_flip_horiz (glLabelObject *object); 333 334 void gl_label_object_flip_vert (glLabelObject *object); 335 336 void gl_label_object_rotate (glLabelObject *object, 337 gdouble theta_degs); 338 339 void gl_label_object_set_matrix (glLabelObject *object, 340 cairo_matrix_t *matrix); 341 342 343 void gl_label_object_get_position (glLabelObject *object, 344 gdouble *x, 345 gdouble *y); 346 347 void gl_label_object_get_size (glLabelObject *object, 348 gdouble *w, 349 gdouble *h); 350 351 void gl_label_object_get_raw_size (glLabelObject *object, 352 gdouble *w, 353 gdouble *h); 354 355 void gl_label_object_get_extent (glLabelObject *object, 356 glLabelRegion *region); 357 358 gboolean gl_label_object_can_text (glLabelObject *object); 359 360 361 gchar *gl_label_object_get_font_family (glLabelObject *object); 362 363 gdouble gl_label_object_get_font_size (glLabelObject *object); 364 365 PangoWeight gl_label_object_get_font_weight (glLabelObject *object); 366 367 gboolean gl_label_object_get_font_italic_flag (glLabelObject *object); 368 369 PangoAlignment gl_label_object_get_text_alignment (glLabelObject *object); 370 371 glValignment gl_label_object_get_text_valignment (glLabelObject *object); 372 373 gdouble gl_label_object_get_text_line_spacing (glLabelObject *object); 374 375 glColorNode *gl_label_object_get_text_color (glLabelObject *object); 376 377 378 gboolean gl_label_object_can_fill (glLabelObject *object); 379 380 glColorNode* gl_label_object_get_fill_color (glLabelObject *object); 381 382 383 gboolean gl_label_object_can_line_color (glLabelObject *object); 384 385 glColorNode *gl_label_object_get_line_color (glLabelObject *object); 386 387 gboolean gl_label_object_can_line_width (glLabelObject *object); 388 389 gdouble gl_label_object_get_line_width (glLabelObject *object); 390 391 392 void gl_label_object_get_matrix (glLabelObject *object, 393 cairo_matrix_t *matrix); 394 395 gboolean gl_label_object_get_shadow_state (glLabelObject *object); 396 397 void gl_label_object_get_shadow_offset (glLabelObject *object, 398 gdouble *x, 399 gdouble *y); 400 401 glColorNode* gl_label_object_get_shadow_color (glLabelObject *object); 402 403 gdouble gl_label_object_get_shadow_opacity (glLabelObject *object); 404 405 406 void gl_label_object_draw (glLabelObject *object, 407 cairo_t *cr, 408 gboolean screen_flag, 409 glMergeRecord *record); 410 411 gboolean gl_label_object_is_located_at (glLabelObject *object, 412 cairo_t *cr, 413 gdouble x_pixels, 414 gdouble y_pixels); 415 416 void gl_label_object_draw_handles (glLabelObject *object, 417 cairo_t *cr); 418 419 glLabelObjectHandle gl_label_object_handle_at (glLabelObject *object, 420 cairo_t *cr, 421 gdouble x_pixels, 422 gdouble y_pixels); 423 424 425 /* 426 * Specific handle drawing methods. 427 */ 428 void gl_label_object_draw_handles_box (glLabelObject *object, 429 cairo_t *cr); 430 431 void gl_label_object_draw_handles_line (glLabelObject *object, 432 cairo_t *cr); 433 434 435 /* 436 * Specific handle query methods. 437 */ 438 glLabelObjectHandle gl_label_object_box_handle_at (glLabelObject *object, 439 cairo_t *cr, 440 gdouble x, 441 gdouble y); 442 443 glLabelObjectHandle gl_label_object_line_handle_at (glLabelObject *object, 444 cairo_t *cr, 445 gdouble x, 446 gdouble y); 447 448 449 450 G_END_DECLS 451 452 #endif /* __LABEL_OBJECT_H__ */ 453 454 455 456 457 /* 458 * Local Variables: -- emacs 459 * mode: C -- emacs 460 * c-basic-offset: 8 -- emacs 461 * tab-width: 8 -- emacs 462 * indent-tabs-mode: nil -- emacs 463 * End: -- emacs 464 */ 465