2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * label_object.c: GLabels label object base class
6 * Copyright (C) 2001-2002 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <libart_lgpl/libart.h>
27 #include "label-object.h"
32 /*========================================================*/
34 /*========================================================*/
36 struct _glLabelObjectPrivate {
52 /*========================================================*/
53 /* Private globals. */
54 /*========================================================*/
56 static GObjectClass *parent_class = NULL;
58 static guint signals[LAST_SIGNAL] = {0};
60 static guint instance = 0;
62 /*========================================================*/
63 /* Private function prototypes. */
64 /*========================================================*/
66 static void gl_label_object_class_init (glLabelObjectClass *klass);
67 static void gl_label_object_instance_init (glLabelObject *object);
68 static void gl_label_object_finalize (GObject *object);
70 static void merge_changed_cb (glLabel *label,
71 glLabelObject *object);
73 static void set_size (glLabelObject *object,
77 static void get_size (glLabelObject *object,
82 /*****************************************************************************/
83 /* Boilerplate object stuff. */
84 /*****************************************************************************/
86 gl_label_object_get_type (void)
88 static GType type = 0;
92 sizeof (glLabelObjectClass),
95 (GClassInitFunc) gl_label_object_class_init,
98 sizeof (glLabelObject),
100 (GInstanceInitFunc) gl_label_object_instance_init,
103 type = g_type_register_static (G_TYPE_OBJECT,
104 "glLabelObject", &info, 0);
111 gl_label_object_class_init (glLabelObjectClass *klass)
113 GObjectClass *gobject_class = (GObjectClass *) klass;
114 glLabelObjectClass *object_class = (glLabelObjectClass *) klass;
116 gl_debug (DEBUG_LABEL, "START");
118 parent_class = g_type_class_peek_parent (klass);
120 gobject_class->finalize = gl_label_object_finalize;
122 object_class->set_size = set_size;
123 object_class->get_size = get_size;
126 g_signal_new ("changed",
127 G_OBJECT_CLASS_TYPE (gobject_class),
129 G_STRUCT_OFFSET (glLabelObjectClass, changed),
131 gl_marshal_VOID__VOID,
136 g_signal_new ("moved",
137 G_OBJECT_CLASS_TYPE (gobject_class),
139 G_STRUCT_OFFSET (glLabelObjectClass, moved),
141 gl_marshal_VOID__DOUBLE_DOUBLE,
143 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
144 signals[FLIP_ROTATE] =
145 g_signal_new ("flip_rotate",
146 G_OBJECT_CLASS_TYPE (gobject_class),
148 G_STRUCT_OFFSET (glLabelObjectClass, flip_rotate),
150 gl_marshal_VOID__VOID,
155 G_OBJECT_CLASS_TYPE (gobject_class),
157 G_STRUCT_OFFSET (glLabelObjectClass, top),
159 gl_marshal_VOID__VOID,
164 g_signal_new ("bottom",
165 G_OBJECT_CLASS_TYPE (gobject_class),
167 G_STRUCT_OFFSET (glLabelObjectClass, bottom),
169 gl_marshal_VOID__VOID,
173 gl_debug (DEBUG_LABEL, "END");
177 gl_label_object_instance_init (glLabelObject *object)
179 gl_debug (DEBUG_LABEL, "START");
181 object->private = g_new0 (glLabelObjectPrivate, 1);
183 object->private->name = g_strdup_printf ("object%d", instance++);
185 art_affine_identity (object->private->affine);
187 gl_debug (DEBUG_LABEL, "END");
191 gl_label_object_finalize (GObject *object)
195 gl_debug (DEBUG_LABEL, "START");
197 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
199 parent = GL_LABEL_OBJECT(object)->parent;
200 gl_label_remove_object (parent, GL_LABEL_OBJECT(object));
202 g_free (GL_LABEL_OBJECT(object)->private->name);
203 g_free (GL_LABEL_OBJECT(object)->private);
205 G_OBJECT_CLASS (parent_class)->finalize (object);
207 gl_debug (DEBUG_LABEL, "END");
210 /*****************************************************************************/
211 /* New label object. */
212 /*****************************************************************************/
214 gl_label_object_new (glLabel *label)
216 glLabelObject *object;
218 gl_debug (DEBUG_LABEL, "START");
220 object = g_object_new (gl_label_object_get_type(), NULL);
222 gl_label_object_set_parent (object, label);
224 gl_debug (DEBUG_LABEL, "END");
226 return G_OBJECT (object);
229 /*****************************************************************************/
230 /* Duplicate object. */
231 /*****************************************************************************/
233 gl_label_object_dup (glLabelObject *src_object,
236 glLabelObject *dst_object;
240 gl_debug (DEBUG_LABEL, "START");
242 g_return_if_fail (src_object && GL_IS_LABEL_OBJECT (src_object));
244 dst_object = g_object_new (G_OBJECT_TYPE(src_object), NULL);
246 gl_label_object_set_parent (dst_object, label);
248 gl_label_object_get_position (src_object, &x, &y);
249 gl_label_object_get_size (src_object, &w, &h);
250 gl_label_object_get_affine (src_object, affine);
252 gl_label_object_set_position (dst_object, x, y);
253 gl_label_object_set_size (dst_object, w, h);
254 gl_label_object_set_affine (dst_object, affine);
256 if ( GL_LABEL_OBJECT_GET_CLASS(src_object)->copy != NULL ) {
258 /* We have an object specific method, use it */
259 GL_LABEL_OBJECT_GET_CLASS(src_object)->copy (dst_object, src_object);
263 gl_debug (DEBUG_LABEL, "END");
268 /*****************************************************************************/
269 /* Emit "changed" signal (for derived objects). */
270 /*****************************************************************************/
272 gl_label_object_emit_changed (glLabelObject *object)
274 gl_debug (DEBUG_LABEL, "START");
276 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
278 g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
280 gl_debug (DEBUG_LABEL, "END");
283 /*****************************************************************************/
284 /* Set parent label of object. */
285 /*****************************************************************************/
287 gl_label_object_set_parent (glLabelObject *object,
292 gl_debug (DEBUG_LABEL, "START");
294 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
295 g_return_if_fail (label && GL_IS_LABEL (label));
297 old_parent = object->parent;
298 if ( old_parent != NULL ) {
299 g_signal_handlers_disconnect_by_func (old_parent,
300 G_CALLBACK(merge_changed_cb),
302 gl_label_remove_object( old_parent, object );
304 gl_label_add_object( label, object );
306 g_signal_connect (G_OBJECT(label), "merge_changed",
307 G_CALLBACK(merge_changed_cb), object);
309 g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
311 gl_debug (DEBUG_LABEL, "END");
314 /*****************************************************************************/
315 /* Get parent label of object. */
316 /*****************************************************************************/
318 gl_label_object_get_parent (glLabelObject *object)
320 gl_debug (DEBUG_LABEL, "START");
322 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
324 gl_debug (DEBUG_LABEL, "END");
326 return object->parent;
329 /*****************************************************************************/
330 /* Set name of object. */
331 /*****************************************************************************/
333 gl_label_object_set_name (glLabelObject *object,
336 gl_debug (DEBUG_LABEL, "START");
338 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
340 g_free(object->private->name);
341 object->private->name = name;
343 g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
345 gl_debug (DEBUG_LABEL, "END");
348 /*****************************************************************************/
349 /* Get name of object. */
350 /*****************************************************************************/
352 gl_label_object_get_name (glLabelObject *object)
354 gl_debug (DEBUG_LABEL, "START");
356 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
358 gl_debug (DEBUG_LABEL, "END");
360 return g_strdup(object->private->name);
363 /*****************************************************************************/
364 /* Set position of object. */
365 /*****************************************************************************/
367 gl_label_object_set_position (glLabelObject *object,
373 gl_debug (DEBUG_LABEL, "START");
375 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
377 dx = x - object->private->x;
378 dy = y - object->private->y;
380 object->private->x = x;
381 object->private->y = y;
383 g_signal_emit (G_OBJECT(object), signals[MOVED], 0, dx, dy);
385 gl_debug (DEBUG_LABEL, "END");
388 /*****************************************************************************/
389 /* Set position of object relative to old position. */
390 /*****************************************************************************/
392 gl_label_object_set_position_relative (glLabelObject *object,
396 gl_debug (DEBUG_LABEL, "START");
398 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
400 object->private->x += dx;
401 object->private->y += dy;
403 gl_debug (DEBUG_LABEL, " x = %f, y= %f",
407 g_signal_emit (G_OBJECT(object), signals[MOVED], 0, dx, dy);
409 gl_debug (DEBUG_LABEL, "END");
412 /*****************************************************************************/
413 /* Get position of object. */
414 /*****************************************************************************/
416 gl_label_object_get_position (glLabelObject *object,
420 gl_debug (DEBUG_LABEL, "START");
422 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
424 *x = object->private->x;
425 *y = object->private->y;
427 gl_debug (DEBUG_LABEL, "END");
430 /*---------------------------------------------------------------------------*/
431 /* PRIVATE. Default set size method. */
432 /*---------------------------------------------------------------------------*/
434 set_size (glLabelObject *object,
438 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
440 object->private->w = w;
441 object->private->h = h;
444 /*****************************************************************************/
445 /* Set size of object. */
446 /*****************************************************************************/
448 gl_label_object_set_size (glLabelObject *object,
452 gl_debug (DEBUG_LABEL, "START");
454 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
456 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_size != NULL ) {
458 /* We have an object specific method, use it */
459 GL_LABEL_OBJECT_GET_CLASS(object)->set_size (object, w, h);
463 set_size (object, w, h);
467 g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
469 gl_debug (DEBUG_LABEL, "END");
472 /*---------------------------------------------------------------------------*/
473 /* PRIVATE. Default get size method. */
474 /*---------------------------------------------------------------------------*/
476 get_size (glLabelObject *object,
480 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
482 *w = object->private->w;
483 *h = object->private->h;
486 /*****************************************************************************/
487 /* Get size of object. */
488 /*****************************************************************************/
490 gl_label_object_get_size (glLabelObject *object,
494 gl_debug (DEBUG_LABEL, "START");
496 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
498 if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_size != NULL ) {
500 /* We have an object specific method, use it */
501 GL_LABEL_OBJECT_GET_CLASS(object)->get_size (object, w, h);
505 get_size (object, w, h);
509 gl_debug (DEBUG_LABEL, "END");
512 /*****************************************************************************/
513 /* Get extent of object. */
514 /*****************************************************************************/
516 gl_label_object_get_extent (glLabelObject *object,
523 ArtPoint a1, a2, a3, a4, b1, b2, b3, b4;
526 gl_debug (DEBUG_LABEL, "START");
528 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
530 gl_label_object_get_size (object, &w, &h);
532 /* setup untransformed corners of bounding box */
542 /* transform these points */
543 gl_label_object_get_affine (object, affine);
544 art_affine_point (&b1, &a1, affine);
545 art_affine_point (&b2, &a2, affine);
546 art_affine_point (&b3, &a3, affine);
547 art_affine_point (&b4, &a4, affine);
549 /* now find the maximum extent of these points in x and y */
550 *x1 = MIN (b1.x, MIN (b2.x, MIN (b3.x, b4.x))) + object->private->x;
551 *y1 = MIN (b1.y, MIN (b2.y, MIN (b3.y, b4.y))) + object->private->y;
552 *x2 = MAX (b1.x, MAX (b2.x, MAX (b3.x, b4.x))) + object->private->x;
553 *y2 = MAX (b1.y, MAX (b2.y, MAX (b3.y, b4.y))) + object->private->y;
555 gl_debug (DEBUG_LABEL, "END");
558 /*****************************************************************************/
559 /* Can text properties be set for this object? */
560 /*****************************************************************************/
562 gl_label_object_can_text (glLabelObject *object)
564 gl_debug (DEBUG_LABEL, "");
566 g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
568 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_family != NULL ) {
580 /*****************************************************************************/
581 /* Set font family for all text contained in object. */
582 /*****************************************************************************/
584 gl_label_object_set_font_family (glLabelObject *object,
585 const gchar *font_family)
587 gl_debug (DEBUG_LABEL, "START");
589 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
591 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_family != NULL ) {
593 /* We have an object specific method, use it */
594 GL_LABEL_OBJECT_GET_CLASS(object)->set_font_family (object, font_family);
598 gl_debug (DEBUG_LABEL, "END");
601 /****************************************************************************/
602 /* Set font size for all text contained in object. */
603 /****************************************************************************/
605 gl_label_object_set_font_size (glLabelObject *object,
608 gl_debug (DEBUG_LABEL, "START");
610 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
612 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_size != NULL ) {
614 /* We have an object specific method, use it */
615 GL_LABEL_OBJECT_GET_CLASS(object)->set_font_size (object, font_size);
619 gl_debug (DEBUG_LABEL, "END");
622 /****************************************************************************/
623 /* Set font weight for all text contained in object. */
624 /****************************************************************************/
626 gl_label_object_set_font_weight (glLabelObject *object,
627 GnomeFontWeight font_weight)
629 gl_debug (DEBUG_LABEL, "START");
631 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
633 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_weight != NULL ) {
635 /* We have an object specific method, use it */
636 GL_LABEL_OBJECT_GET_CLASS(object)->set_font_weight (object, font_weight);
640 gl_debug (DEBUG_LABEL, "END");
643 /****************************************************************************/
644 /* Set font italic flag for all text contained in object. */
645 /****************************************************************************/
647 gl_label_object_set_font_italic_flag (glLabelObject *object,
648 GnomeFontWeight font_italic_flag)
650 gl_debug (DEBUG_LABEL, "START");
652 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
654 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_italic_flag != NULL ) {
656 /* We have an object specific method, use it */
657 GL_LABEL_OBJECT_GET_CLASS(object)->set_font_italic_flag (object,
662 gl_debug (DEBUG_LABEL, "END");
665 /****************************************************************************/
666 /* Set text alignment for all text contained in object. */
667 /****************************************************************************/
669 gl_label_object_set_text_alignment (glLabelObject *object,
670 GtkJustification text_alignment)
672 gl_debug (DEBUG_LABEL, "START");
674 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
676 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_text_alignment != NULL ) {
678 /* We have an object specific method, use it */
679 GL_LABEL_OBJECT_GET_CLASS(object)->set_text_alignment (object,
684 gl_debug (DEBUG_LABEL, "END");
687 /****************************************************************************/
688 /* Set text color for all text contained in object. */
689 /****************************************************************************/
691 gl_label_object_set_text_color (glLabelObject *object,
694 gl_debug (DEBUG_LABEL, "START");
696 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
698 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_text_color != NULL ) {
700 /* We have an object specific method, use it */
701 GL_LABEL_OBJECT_GET_CLASS(object)->set_text_color (object, text_color);
705 gl_debug (DEBUG_LABEL, "END");
708 /*****************************************************************************/
709 /* Can fill properties be set for this object? */
710 /*****************************************************************************/
712 gl_label_object_can_fill (glLabelObject *object)
714 gl_debug (DEBUG_LABEL, "");
716 g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
718 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_fill_color != NULL ) {
730 /****************************************************************************/
731 /* Set fill color for object. */
732 /****************************************************************************/
734 gl_label_object_set_fill_color (glLabelObject *object,
737 gl_debug (DEBUG_LABEL, "START");
739 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
741 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_fill_color != NULL ) {
743 /* We have an object specific method, use it */
744 GL_LABEL_OBJECT_GET_CLASS(object)->set_fill_color (object, fill_color);
748 gl_debug (DEBUG_LABEL, "END");
751 /*****************************************************************************/
752 /* Can line color property be set for this object? */
753 /*****************************************************************************/
755 gl_label_object_can_line_color (glLabelObject *object)
757 gl_debug (DEBUG_LABEL, "");
759 g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
761 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_color != NULL ) {
773 /****************************************************************************/
774 /* Set line color for object. */
775 /****************************************************************************/
777 gl_label_object_set_line_color (glLabelObject *object,
780 gl_debug (DEBUG_LABEL, "START");
782 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
784 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_color != NULL ) {
786 /* We have an object specific method, use it */
787 GL_LABEL_OBJECT_GET_CLASS(object)->set_line_color (object, line_color);
791 gl_debug (DEBUG_LABEL, "END");
794 /*****************************************************************************/
795 /* Can line width property be set for this object? */
796 /*****************************************************************************/
798 gl_label_object_can_line_width (glLabelObject *object)
800 gl_debug (DEBUG_LABEL, "");
802 g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
804 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_width != NULL ) {
816 /****************************************************************************/
817 /* Set line width for object. */
818 /****************************************************************************/
820 gl_label_object_set_line_width (glLabelObject *object,
823 gl_debug (DEBUG_LABEL, "START");
825 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
827 if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_width != NULL ) {
829 /* We have an object specific method, use it */
830 GL_LABEL_OBJECT_GET_CLASS(object)->set_line_width (object, line_width);
834 gl_debug (DEBUG_LABEL, "END");
837 /****************************************************************************/
838 /* Flip object horizontally. */
839 /****************************************************************************/
841 gl_label_object_flip_horiz (glLabelObject *object)
843 gdouble flip_affine[6];
845 gl_debug (DEBUG_LABEL, "START");
847 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
849 art_affine_scale (flip_affine, -1.0, 1.0);
850 art_affine_multiply (object->private->affine, object->private->affine, flip_affine);
852 g_signal_emit (G_OBJECT(object), signals[FLIP_ROTATE], 0);
854 gl_debug (DEBUG_LABEL, "END");
857 /****************************************************************************/
858 /* Flip object vertically. */
859 /****************************************************************************/
861 gl_label_object_flip_vert (glLabelObject *object)
863 gdouble flip_affine[6];
865 gl_debug (DEBUG_LABEL, "START");
867 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
869 art_affine_scale (flip_affine, 1.0, -1.0);
870 art_affine_multiply (object->private->affine, object->private->affine, flip_affine);
872 g_signal_emit (G_OBJECT(object), signals[FLIP_ROTATE], 0);
874 gl_debug (DEBUG_LABEL, "END");
877 /****************************************************************************/
879 /****************************************************************************/
881 gl_label_object_rotate (glLabelObject *object,
884 gdouble rotate_affine[6];
886 gl_debug (DEBUG_LABEL, "START");
888 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
890 art_affine_rotate (rotate_affine, theta_degs);
891 art_affine_multiply (object->private->affine, object->private->affine, rotate_affine);
893 g_signal_emit (G_OBJECT(object), signals[FLIP_ROTATE], 0);
895 gl_debug (DEBUG_LABEL, "END");
898 /****************************************************************************/
900 /****************************************************************************/
902 gl_label_object_set_affine (glLabelObject *object,
905 gl_debug (DEBUG_LABEL, "");
907 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
909 object->private->affine[0] = affine[0];
910 object->private->affine[1] = affine[1];
911 object->private->affine[2] = affine[2];
912 object->private->affine[3] = affine[3];
913 object->private->affine[4] = affine[4];
914 object->private->affine[5] = affine[5];
917 /****************************************************************************/
919 /****************************************************************************/
921 gl_label_object_get_affine (glLabelObject *object,
924 gl_debug (DEBUG_LABEL, "");
926 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
928 affine[0] = object->private->affine[0];
929 affine[1] = object->private->affine[1];
930 affine[2] = object->private->affine[2];
931 affine[3] = object->private->affine[3];
932 affine[4] = object->private->affine[4];
933 affine[5] = object->private->affine[5];
936 /****************************************************************************/
937 /* Get i2w affine, i.e. applied affine + translation. */
938 /****************************************************************************/
940 gl_label_object_get_i2w_affine (glLabelObject *object,
944 gdouble translation[6];
946 gl_debug (DEBUG_LABEL, "");
948 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
950 gl_label_object_get_affine (object, affine);
951 gl_label_object_get_position (object, &x, &y);
953 art_affine_translate (translation, x, y);
954 art_affine_multiply (affine, affine, translation);
957 /****************************************************************************/
958 /* Get w2i affine, i.e. inverse of applied affine + translation. */
959 /****************************************************************************/
961 gl_label_object_get_w2i_affine (glLabelObject *object,
965 gl_debug (DEBUG_LABEL, "");
967 g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
969 gl_label_object_get_i2w_affine (object, i2w);
970 art_affine_invert (affine, i2w);
973 /****************************************************************************/
974 /* Bring label object to front/top. */
975 /****************************************************************************/
977 gl_label_object_raise_to_top (glLabelObject *object)
981 gl_debug (DEBUG_LABEL, "START");
983 label = object->parent;
985 gl_label_raise_object_to_top (label, object);
987 g_signal_emit (G_OBJECT(object), signals[TOP], 0);
989 gl_debug (DEBUG_LABEL, "END");
992 /****************************************************************************/
993 /* Send label object to rear/bottom. */
994 /****************************************************************************/
996 gl_label_object_lower_to_bottom (glLabelObject *object)
1000 gl_debug (DEBUG_LABEL, "START");
1002 label = object->parent;
1004 gl_label_lower_object_to_bottom (label, object);
1006 g_signal_emit (G_OBJECT(object), signals[BOTTOM], 0);
1008 gl_debug (DEBUG_LABEL, "END");
1011 /*--------------------------------------------------------------------------*/
1012 /* PRIVATE. Label's merge data changed callback. */
1013 /*--------------------------------------------------------------------------*/
1015 merge_changed_cb (glLabel *label,
1016 glLabelObject *object)
1018 gl_label_object_emit_changed (object);