]> git.sur5r.net Git - glabels/blobdiff - src/label.c
Finnish translation update
[glabels] / src / label.c
index c09021d8d5f1bce35b0345dd9c607d83f1403037..48df06a43511380a274981455801baa85cb328a1 100644 (file)
@@ -62,6 +62,7 @@ struct _glLabelPrivate {
        glMerge     *merge;
 
        GHashTable  *pixbuf_cache;
+       GHashTable  *svg_cache;
 
         /* Delay changed signals while operating on selections of multiple objects. */
         gboolean     selection_op_flag;
@@ -74,6 +75,7 @@ struct _glLabelPrivate {
        gboolean           default_font_italic_flag;
        guint              default_text_color;
        PangoAlignment     default_text_alignment;
+       glValignment       default_text_valignment;
        gdouble            default_text_line_spacing;
 
        /* Default object line properties */
@@ -140,6 +142,9 @@ static void gl_label_finalize      (GObject *object);
 static void object_changed_cb      (glLabelObject *object,
                                     glLabel       *label);
 
+static void object_moved_cb        (glLabelObject *object,
+                                    glLabel       *label);
+
 static void do_modify              (glLabel       *label);
 
 static void begin_selection_op     (glLabel       *label);
@@ -185,7 +190,7 @@ static void   state_restore        (State            *state,
 /*****************************************************************************/
 /* Boilerplate object stuff.                                                 */
 /*****************************************************************************/
-G_DEFINE_TYPE (glLabel, gl_label, G_TYPE_OBJECT);
+G_DEFINE_TYPE (glLabel, gl_label, G_TYPE_OBJECT)
 
 
 static void
@@ -275,6 +280,7 @@ gl_label_init (glLabel *label)
 
        label->priv->merge         = NULL;
        label->priv->pixbuf_cache  = gl_pixbuf_cache_new ();
+       label->priv->svg_cache     = gl_svg_cache_new ();
 
         label->priv->undo_stack    = g_queue_new ();
         label->priv->redo_stack    = g_queue_new ();
@@ -319,7 +325,6 @@ gl_label_finalize (GObject *object)
         {
                g_object_unref (G_OBJECT(label->priv->merge));
        }
-       gl_pixbuf_cache_free (label->priv->pixbuf_cache);
         g_free (label->priv->default_font_family);
 
         stack_clear (label->priv->undo_stack);
@@ -328,6 +333,9 @@ gl_label_finalize (GObject *object)
         g_queue_free (label->priv->undo_stack);
         g_queue_free (label->priv->redo_stack);
 
+       gl_pixbuf_cache_free (label->priv->pixbuf_cache);
+       gl_svg_cache_free (label->priv->svg_cache);
+
        g_free (label->priv);
 
        G_OBJECT_CLASS (gl_label_parent_class)->finalize (object);
@@ -514,6 +522,17 @@ object_changed_cb (glLabelObject *object,
 }
 
 
+/****************************************************************************/
+/* Object "moved" callback.                                                 */
+/****************************************************************************/
+static void
+object_moved_cb (glLabelObject *object,
+                 glLabel       *label)
+{
+        do_modify (label);
+}
+
+
 /****************************************************************************/
 /* Do modify.                                                               */
 /****************************************************************************/
@@ -740,6 +759,16 @@ gl_label_get_pixbuf_cache (glLabel       *label)
 }
 
 
+/****************************************************************************/
+/* Get svg cache.                                                           */
+/****************************************************************************/
+GHashTable *
+gl_label_get_svg_cache (glLabel       *label)
+{
+       return label->priv->svg_cache;
+}
+
+
 /*****************************************************************************/
 /* Add object to label.                                                      */
 /*****************************************************************************/
@@ -757,6 +786,8 @@ gl_label_add_object (glLabel       *label,
 
         g_signal_connect (G_OBJECT (object), "changed",
                           G_CALLBACK (object_changed_cb), label);
+        g_signal_connect (G_OBJECT (object), "moved",
+                          G_CALLBACK (object_moved_cb), label);
 
         do_modify (label);
 
@@ -780,6 +811,8 @@ gl_label_delete_object (glLabel       *label,
 
         g_signal_handlers_disconnect_by_func (G_OBJECT (object),
                                               G_CALLBACK (object_changed_cb), label);
+        g_signal_handlers_disconnect_by_func (G_OBJECT (object),
+                                              G_CALLBACK (object_moved_cb), label);
         g_object_unref (object);
 
         do_modify (label);
@@ -1197,6 +1230,8 @@ gl_label_delete_selection (glLabel       *label)
 
         end_selection_op (label);
 
+       g_signal_emit (G_OBJECT(label), signals[SELECTION_CHANGED], 0);
+
        gl_debug (DEBUG_LABEL, "END");
 }
 
@@ -2131,6 +2166,39 @@ gl_label_set_selection_text_alignment (glLabel        *label,
 }
 
 
+/*****************************************************************************/
+/* Set vertical text alignment for all text contained in selected objects.   */
+/*****************************************************************************/
+void
+gl_label_set_selection_text_valignment (glLabel        *label,
+                                        glValignment    text_valignment)
+{
+        GList         *selection_list;
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+        begin_selection_op (label);
+
+        selection_list = gl_label_get_selection_list (label);
+
+       for (p = selection_list; p != NULL; p = p->next)
+        {
+               object = GL_LABEL_OBJECT (p->data);
+               gl_label_object_set_text_valignment (object, text_valignment, TRUE);
+       }
+
+        g_list_free (selection_list);
+
+        end_selection_op (label);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
 /*****************************************************************************/
 /* Set text line spacing for all text contained in selected objects.         */
 /*****************************************************************************/
@@ -2391,12 +2459,14 @@ gl_label_copy_selection (glLabel       *label)
                 if ( gl_label_is_selection_atomic (label) &&
                      GL_IS_LABEL_IMAGE (selection_list->data) )
                 {
-                        glLabelImage       *image_object = GL_LABEL_IMAGE (selection_list->data);
-                        const GdkPixbuf    *pixbuf = gl_label_image_get_pixbuf (image_object, NULL);
+                        glLabelImage  *image_object = GL_LABEL_IMAGE (selection_list->data);
+                        GdkPixbuf     *pixbuf = gl_label_image_get_pixbuf (image_object, NULL);
 
-                        gtk_target_list_add_image_targets (target_list, 2, TRUE);
-
-                        data->pixbuf = g_object_ref (G_OBJECT (pixbuf));
+                        if (pixbuf)
+                        {
+                                gtk_target_list_add_image_targets (target_list, 2, TRUE);
+                                data->pixbuf = pixbuf;
+                        }
                 }
 
 
@@ -2775,6 +2845,22 @@ gl_label_set_default_text_alignment (glLabel        *label,
 }
 
 
+/****************************************************************************/
+/* Set default vertical text alignment.                                     */
+/****************************************************************************/
+void
+gl_label_set_default_text_valignment (glLabel        *label,
+                                      glValignment    text_valignment)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       label->priv->default_text_valignment = text_valignment;
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
 /****************************************************************************/
 /* Set default text line spacing.                                           */
 /****************************************************************************/
@@ -2939,6 +3025,22 @@ gl_label_get_default_text_alignment (glLabel *label)
 }
 
 
+/****************************************************************************/
+/* Get default vertical text alignment.                                     */
+/****************************************************************************/
+glValignment
+gl_label_get_default_text_valignment (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (label && GL_IS_LABEL (label), GL_VALIGN_TOP);
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return label->priv->default_text_valignment;
+}
+
+
 /****************************************************************************/
 /* Get default text line spacing.                                           */
 /****************************************************************************/