+2009-09-10 Jim Evins <evins@snaught.com>
+
+ * src/Makefile.am:
+ * src/mini-label-preview.c:
+ * src/mini-label-preview.h:
+ Created new glMiniLabelPreview widget to support glRotateLabelButton.
+ * src/rotate-label-button.c:
+ * src/rotate-label-button.h:
+ Renamed glWdgtRotateLabel to glRotateLabelButton.
+ * src/new-label-dialog.c: (gl_new_label_dialog_construct),
+ (template_changed_cb), (gl_new_label_dialog_get_rotate_state),
+ (gl_new_label_dialog_set_rotate_state):
+ Propogated above renaming.
+ * src/mini-preview.c: (gl_mini_preview_set_template), (draw),
+ (draw_shadow), (draw_paper), (draw_labels):
+ Use GtkStyle for colors instead of hardcoded ones.
+
2009-09-09 Jim Evins <evins@snaught.com>
* configure.in:
wdgt-media-select.h \
mini-preview.c \
mini-preview.h \
- wdgt-rotate-label.c \
- wdgt-rotate-label.h \
+ mini-label-preview.c \
+ mini-label-preview.h \
+ rotate-label-button.c \
+ rotate-label-button.h \
wdgt-chain-button.c \
wdgt-chain-button.h \
wdgt-merge-menu.c \
--- /dev/null
+/*
+ * mini-label-preview.c
+ * Copyright (C) 2009 Jim Evins <evins@snaught.com>.
+ *
+ * This file is part of gLabels.
+ *
+ * gLabels is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gLabels is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "mini-label-preview.h"
+
+#include <libglabels/db.h>
+#include "marshal.h"
+#include "cairo-label-path.h"
+#include "color.h"
+
+
+/*===========================================*/
+/* Private macros and constants. */
+/*===========================================*/
+
+#define MARGIN 2
+#define SHADOW_OFFSET 3
+
+
+/*===========================================*/
+/* Private types */
+/*===========================================*/
+
+struct _glMiniLabelPreviewPrivate {
+
+ lglTemplate *template;
+ gboolean rotate_flag;
+};
+
+
+/*===========================================*/
+/* Private globals */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes */
+/*===========================================*/
+
+static void gl_mini_label_preview_finalize (GObject *object);
+
+static void style_set_cb (GtkWidget *widget,
+ GtkStyle *previous_style);
+
+static void redraw (glMiniLabelPreview *this);
+
+static gboolean expose_event_cb (GtkWidget *widget,
+ GdkEventExpose *event);
+
+static void draw_preview (glMiniLabelPreview *this,
+ cairo_t *cr);
+
+
+/****************************************************************************/
+/* Boilerplate Object stuff. */
+/****************************************************************************/
+G_DEFINE_TYPE (glMiniLabelPreview, gl_mini_label_preview, GTK_TYPE_DRAWING_AREA);
+
+
+/*****************************************************************************/
+/* Class Init Function. */
+/*****************************************************************************/
+static void
+gl_mini_label_preview_class_init (glMiniLabelPreviewClass *class)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
+ gl_mini_label_preview_parent_class = g_type_class_peek_parent (class);
+
+ gobject_class->finalize = gl_mini_label_preview_finalize;
+
+ widget_class->expose_event = expose_event_cb;
+ widget_class->style_set = style_set_cb;
+}
+
+
+/*****************************************************************************/
+/* Object Instance Init Function. */
+/*****************************************************************************/
+static void
+gl_mini_label_preview_init (glMiniLabelPreview *this)
+{
+ GTK_WIDGET_SET_FLAGS (GTK_WIDGET (this), GTK_NO_WINDOW);
+
+ this->priv = g_new0 (glMiniLabelPreviewPrivate, 1);
+}
+
+
+/*****************************************************************************/
+/* Finalize Method. */
+/*****************************************************************************/
+static void
+gl_mini_label_preview_finalize (GObject *object)
+{
+ glMiniLabelPreview *this = GL_MINI_LABEL_PREVIEW (object);
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GL_IS_MINI_LABEL_PREVIEW (object));
+
+ lgl_template_free (this->priv->template);
+ g_free (this->priv);
+
+ G_OBJECT_CLASS (gl_mini_label_preview_parent_class)->finalize (object);
+}
+
+
+/*****************************************************************************/
+/** New Object Generator. */
+/*****************************************************************************/
+GtkWidget *
+gl_mini_label_preview_new (gint w,
+ gint h)
+{
+ glMiniLabelPreview *this;
+
+ this = g_object_new (GL_TYPE_MINI_LABEL_PREVIEW, NULL);
+
+ gtk_widget_set_size_request (GTK_WIDGET (this), w, h);
+
+ return GTK_WIDGET (this);
+}
+
+
+/*****************************************************************************/
+/* Set label by name. */
+/*****************************************************************************/
+void
+gl_mini_label_preview_set_by_name (glMiniLabelPreview *this,
+ gchar *name,
+ gboolean rotate_flag)
+{
+ if (!name)
+ {
+ lgl_template_free (this->priv->template);
+ this->priv->template = NULL;
+ }
+ else
+ {
+ this->priv->template = lgl_db_lookup_template_from_name (name);
+ this->priv->rotate_flag = rotate_flag;
+ }
+
+ redraw (this);
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* Style set handler (updates colors when style/theme changes). */
+/*--------------------------------------------------------------------------*/
+static void
+style_set_cb (GtkWidget *widget,
+ GtkStyle *previous_style)
+{
+ redraw (GL_MINI_LABEL_PREVIEW (widget));
+}
+
+
+/*****************************************************************************/
+/* Request redraw. */
+/*****************************************************************************/
+static void
+redraw (glMiniLabelPreview *this)
+{
+ GdkRegion *region;
+
+ if (GTK_WIDGET_REALIZED (GTK_WIDGET (this)))
+ {
+ /* redraw the cairo canvas forcing an expose event */
+ region = gdk_drawable_get_clip_region (GTK_WIDGET (this)->window);
+ gdk_window_invalidate_region (GTK_WIDGET (this)->window, region, TRUE);
+ gdk_region_destroy (region);
+ }
+}
+
+
+/*****************************************************************************/
+/* "Expose event" callback. */
+/*****************************************************************************/
+static gboolean
+expose_event_cb (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ cairo_t *cr;
+
+ cr = gdk_cairo_create (widget->window);
+
+ cairo_rectangle (cr,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_clip (cr);
+
+ cairo_translate (cr, widget->allocation.x, widget->allocation.y);
+
+ draw_preview (GL_MINI_LABEL_PREVIEW (widget), cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Draw sample. */
+/*****************************************************************************/
+static void
+draw_preview (glMiniLabelPreview *this,
+ cairo_t *cr)
+{
+ GtkStyle *style;
+ gdouble w, h;
+ guint fill_color, line_color, shadow_color;
+ const lglTemplateFrame *frame;
+ gdouble w_label, h_label;
+ gdouble scale;
+
+
+ w = GTK_WIDGET (this)->allocation.width;
+ h = GTK_WIDGET (this)->allocation.height;
+
+
+ style = gtk_widget_get_style (GTK_WIDGET (this));
+ if ( GTK_WIDGET_IS_SENSITIVE (GTK_WIDGET (this)) )
+ {
+ fill_color = gl_color_from_gdk_color (&style->light[GTK_STATE_NORMAL]);
+ line_color = gl_color_from_gdk_color (&style->fg[GTK_STATE_NORMAL]);
+ shadow_color = gl_color_from_gdk_color (&style->dark[GTK_STATE_NORMAL]);
+ }
+ else
+ {
+ fill_color = GL_COLOR_NONE;
+ line_color = gl_color_from_gdk_color (&style->fg[GTK_STATE_INSENSITIVE]);
+ shadow_color = GL_COLOR_NONE;
+ }
+
+
+ if (this->priv->template == NULL)
+ {
+ return;
+ }
+
+ frame = (lglTemplateFrame *)this->priv->template->frames->data;
+
+ if (this->priv->rotate_flag)
+ {
+ lgl_template_frame_get_size (frame, &h_label, &w_label);
+ }
+ else
+ {
+ lgl_template_frame_get_size (frame, &w_label, &h_label);
+ }
+
+ scale = MIN( (w - 2*MARGIN - 2*SHADOW_OFFSET)/w_label,
+ (h - 2*MARGIN - 2*SHADOW_OFFSET)/h_label );
+
+
+ cairo_translate (cr, w/2.0, h/2.0);
+ cairo_scale (cr, scale, scale);
+ cairo_translate (cr, -w_label/2.0, -h_label/2.0);
+
+
+ /*
+ * Shadow
+ */
+ cairo_save (cr);
+ cairo_translate (cr, SHADOW_OFFSET/scale, SHADOW_OFFSET/scale);
+ gl_cairo_label_path (cr, this->priv->template, this->priv->rotate_flag, FALSE);
+
+ cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_color));
+ cairo_fill (cr);
+ cairo_restore (cr);
+
+ /*
+ * Label + outline
+ */
+ gl_cairo_label_path (cr, this->priv->template, this->priv->rotate_flag, FALSE);
+
+ cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (fill_color));
+ cairo_fill_preserve (cr);
+
+ cairo_set_line_width (cr, 1.0/scale);
+ cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (line_color));
+ cairo_stroke (cr);
+
+}
+
+
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */
--- /dev/null
+/*
+ * mini-label-preview.h
+ * Copyright (C) 2009 Jim Evins <evins@snaught.com>.
+ *
+ * This file is part of gLabels.
+ *
+ * gLabels is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gLabels is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __MINI_LABEL_PREVIEW_H__
+#define __MINI_LABEL_PREVIEW_H__
+
+
+#include <gtk/gtkdrawingarea.h>
+
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_MINI_LABEL_PREVIEW (gl_mini_label_preview_get_type ())
+#define GL_MINI_LABEL_PREVIEW(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GL_TYPE_MINI_LABEL_PREVIEW, glMiniLabelPreview ))
+#define GL_MINI_LABEL_PREVIEW_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_MINI_LABEL_PREVIEW, glMiniLabelPreviewClass))
+#define GL_IS_MINI_LABEL_PREVIEW(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_MINI_LABEL_PREVIEW))
+#define GL_IS_MINI_LABEL_PREVIEW_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_MINI_LABEL_PREVIEW))
+
+typedef struct _glMiniLabelPreview glMiniLabelPreview;
+typedef struct _glMiniLabelPreviewPrivate glMiniLabelPreviewPrivate;
+typedef struct _glMiniLabelPreviewClass glMiniLabelPreviewClass;
+
+struct _glMiniLabelPreview {
+ GtkDrawingArea parent_widget;
+
+ glMiniLabelPreviewPrivate *priv;
+};
+
+struct _glMiniLabelPreviewClass {
+ GtkDrawingAreaClass parent_class;
+};
+
+
+GType gl_mini_label_preview_get_type (void) G_GNUC_CONST;
+
+GtkWidget *gl_mini_label_preview_new (gint w,
+ gint h);
+
+void gl_mini_label_preview_set_by_name (glMiniLabelPreview *this,
+ gchar *name,
+ gboolean rotate_flag);
+
+
+
+G_END_DECLS
+
+#endif /* __MINI_LABEL_PREVIEW_H__ */
+
+
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */
/* Private macros and constants. */
/*===========================================*/
-#define PAPER_RGB_ARGS 1.0, 1.0, 1.0
-#define PAPER_OUTLINE_RGB_ARGS 0.0, 0.0, 0.0
-#define LABEL_OUTLINE_RGB_ARGS 0.5, 0.5, 0.5
-
-#define SHADOW_X_OFFSET 5
-#define SHADOW_Y_OFFSET 5
+#define MARGIN
+#define SHADOW_OFFSET 3
/*===========================================*/
/*
* Set scale and offsets
*/
- w = this->priv->width - 4 - 2*SHADOW_X_OFFSET;
- h = this->priv->height - 4 - 2*SHADOW_Y_OFFSET;
+ w = this->priv->width - 2*MARGIN - 2*SHADOW_OFFSET;
+ h = this->priv->height - 2*MARGIN - 2*SHADOW_OFFSET;
if ( (w/template->page_width) > (h/template->page_height) ) {
this->priv->scale = h / template->page_height;
} else {
/* update shadow */
- shadow_x = SHADOW_X_OFFSET/this->priv->scale;
- shadow_y = SHADOW_Y_OFFSET/this->priv->scale;
+ shadow_x = SHADOW_OFFSET/this->priv->scale;
+ shadow_y = SHADOW_OFFSET/this->priv->scale;
draw_shadow (this, cr,
shadow_x, shadow_y,
cairo_rectangle (cr, x, y, width, height);
style = gtk_widget_get_style (GTK_WIDGET(this));
- shadow_color = gl_color_from_gdk_color (&style->bg[GTK_STATE_ACTIVE]);
+ shadow_color = gl_color_from_gdk_color (&style->dark[GTK_STATE_NORMAL]);
cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (shadow_color));
cairo_fill (cr);
gdouble height,
gdouble line_width)
{
- cairo_save (cr);
+ GtkStyle *style;
+ guint paper_color, outline_color;
gl_debug (DEBUG_MINI_PREVIEW, "START");
+ cairo_save (cr);
+
+ style = gtk_widget_get_style (GTK_WIDGET(this));
+ paper_color = gl_color_from_gdk_color (&style->light[GTK_STATE_NORMAL]);
+ outline_color = gl_color_from_gdk_color (&style->fg[GTK_STATE_NORMAL]);
+
cairo_rectangle (cr, 0.0, 0.0, width, height);
- cairo_set_source_rgb (cr, PAPER_RGB_ARGS);
+ cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (paper_color));
cairo_fill_preserve (cr);
- cairo_set_source_rgb (cr, PAPER_OUTLINE_RGB_ARGS);
+ cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (outline_color));
cairo_set_line_width (cr, line_width);
cairo_stroke (cr);
gint i, n_labels;
lglTemplateOrigin *origins;
GtkStyle *style;
- guint highlight_color;
+ guint highlight_color, paper_color, outline_color;
gl_debug (DEBUG_MINI_PREVIEW, "START");
style = gtk_widget_get_style (GTK_WIDGET(this));
highlight_color = gl_color_from_gdk_color (&style->base[GTK_STATE_SELECTED]);
+ paper_color = gl_color_from_gdk_color (&style->light[GTK_STATE_NORMAL]);
+ outline_color = gl_color_from_gdk_color (&style->fg[GTK_STATE_NORMAL]);
for ( i=0; i < n_labels; i++ ) {
}
else
{
- cairo_set_source_rgb (cr, PAPER_RGB_ARGS);
+ cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (paper_color));
}
cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
cairo_fill_preserve (cr);
cairo_set_line_width (cr, line_width);
- cairo_set_source_rgb (cr, LABEL_OUTLINE_RGB_ARGS);
+ cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (outline_color));
cairo_stroke (cr);
cairo_restore (cr);
#include "hig.h"
#include "wdgt-media-select.h"
-#include "wdgt-rotate-label.h"
+#include "rotate-label-button.h"
#include "util.h"
#include "debug.h"
gtk_box_pack_start (GTK_BOX (media_select_vbox),
dialog->priv->media_select, FALSE, FALSE, 0);
- dialog->priv->rotate_label = gl_wdgt_rotate_label_new ();
+ dialog->priv->rotate_label = gl_rotate_label_button_new ();
gtk_box_pack_start (GTK_BOX (rotate_label_vbox),
dialog->priv->rotate_label, FALSE, FALSE, 0);
/* Sync template name from media select with rotate widget. */
name = gl_wdgt_media_select_get_name (GL_WDGT_MEDIA_SELECT (dialog->priv->media_select));
- gl_wdgt_rotate_label_set_template_name (GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label),
- name);
+ gl_rotate_label_button_set_template_name (GL_ROTATE_LABEL_BUTTON (dialog->priv->rotate_label),
+ name);
g_signal_connect (G_OBJECT (dialog->priv->media_select), "changed",
G_CALLBACK (template_changed_cb), dialog);
name = gl_wdgt_media_select_get_name (GL_WDGT_MEDIA_SELECT (select));
- gl_wdgt_rotate_label_set_template_name (GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label),
- name);
+ gl_rotate_label_button_set_template_name (GL_ROTATE_LABEL_BUTTON (dialog->priv->rotate_label),
+ name);
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
GTK_RESPONSE_OK,
gboolean
gl_new_label_dialog_get_rotate_state (glNewLabelDialog *dialog)
{
- return gl_wdgt_rotate_label_get_state (
- GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label));
+ return gl_rotate_label_button_get_state (
+ GL_ROTATE_LABEL_BUTTON (dialog->priv->rotate_label));
}
gl_new_label_dialog_set_rotate_state (glNewLabelDialog *dialog,
gboolean state)
{
- gl_wdgt_rotate_label_set_state (
- GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label), state);
+ gl_rotate_label_button_set_state (
+ GL_ROTATE_LABEL_BUTTON (dialog->priv->rotate_label), state);
}
--- /dev/null
+/*
+ * rotate-label-button.c
+ * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
+ *
+ * This file is part of gLabels.
+ *
+ * gLabels is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gLabels is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "rotate-label-button.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkradiobutton.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkvbox.h>
+#include <math.h>
+#include "mini-label-preview.h"
+#include <libglabels/db.h>
+#include "hig.h"
+#include "marshal.h"
+
+#include "debug.h"
+
+
+/*========================================================*/
+/* Private macros and constants. */
+/*========================================================*/
+
+#define SIZE 48
+
+
+/*===========================================*/
+/* Private types */
+/*===========================================*/
+
+struct _glRotateLabelButtonPrivate {
+
+ GtkWidget *no_rotate_radio;
+ GtkWidget *rotate_radio;
+ GtkWidget *no_rotate_preview;
+ GtkWidget *rotate_preview;
+};
+
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
+
+
+/*===========================================*/
+/* Private globals */
+/*===========================================*/
+
+static gint rotate_label_button_signals[LAST_SIGNAL] = { 0 };
+
+
+/*===========================================*/
+/* Local function prototypes */
+/*===========================================*/
+
+static void gl_rotate_label_button_finalize (GObject *object);
+
+static void toggled_cb (GtkToggleButton *toggle,
+ gpointer user_data);
+
+
+/****************************************************************************/
+/* Boilerplate Object stuff. */
+/****************************************************************************/
+G_DEFINE_TYPE (glRotateLabelButton, gl_rotate_label_button, GTK_TYPE_HBOX);
+
+
+static void
+gl_rotate_label_button_class_init (glRotateLabelButtonClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ gl_rotate_label_button_parent_class = g_type_class_peek_parent (class);
+
+ object_class->finalize = gl_rotate_label_button_finalize;
+
+ rotate_label_button_signals[CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE(object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (glRotateLabelButtonClass, changed),
+ NULL, NULL,
+ gl_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+}
+
+
+static void
+gl_rotate_label_button_init (glRotateLabelButton *this)
+{
+ GtkWidget *vbox;
+ GtkWidget *label;
+
+ this->priv = g_new0 (glRotateLabelButtonPrivate, 1);
+
+ gtk_container_set_border_width (GTK_CONTAINER (this), GL_HIG_PAD2);
+
+ this->priv->no_rotate_radio = gtk_radio_button_new (NULL);
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (this->priv->no_rotate_radio),
+ FALSE);
+ vbox = gtk_vbox_new (FALSE, 1);
+ this->priv->no_rotate_preview = gl_mini_label_preview_new (SIZE, SIZE);
+ gtk_box_pack_start (GTK_BOX (vbox), this->priv->no_rotate_preview, FALSE, FALSE, 0);
+ label = gtk_label_new (_("Normal"));
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (this->priv->no_rotate_radio), vbox);
+
+
+ this->priv->rotate_radio = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON (this->priv->no_rotate_radio));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (this->priv->rotate_radio),
+ FALSE);
+ vbox = gtk_vbox_new (FALSE, 1);
+ this->priv->rotate_preview = gl_mini_label_preview_new (SIZE, SIZE);
+ gtk_box_pack_start (GTK_BOX (vbox), this->priv->rotate_preview, FALSE, FALSE, 0);
+ label = gtk_label_new (_("Rotated"));
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (this->priv->rotate_radio), vbox);
+
+ gtk_box_pack_start (GTK_BOX (this),
+ this->priv->no_rotate_radio,
+ FALSE, FALSE, GL_HIG_PAD1);
+ gtk_box_pack_start (GTK_BOX (this),
+ this->priv->rotate_radio,
+ FALSE, FALSE, GL_HIG_PAD1);
+
+ /* Connect signals to controls */
+ g_signal_connect (G_OBJECT (this->priv->no_rotate_radio),
+ "toggled",
+ G_CALLBACK (toggled_cb), this);
+ g_signal_connect (G_OBJECT (this->priv->rotate_radio),
+ "toggled",
+ G_CALLBACK (toggled_cb), this);
+}
+
+
+static void
+gl_rotate_label_button_finalize (GObject *object)
+{
+ glRotateLabelButton *this = GL_ROTATE_LABEL_BUTTON (object);
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GL_IS_ROTATE_LABEL_BUTTON (object));
+
+ g_free (this->priv);
+
+ G_OBJECT_CLASS (gl_rotate_label_button_parent_class)->finalize (object);
+}
+
+
+GtkWidget *
+gl_rotate_label_button_new (void)
+{
+ glRotateLabelButton *this;
+
+ this = g_object_new (gl_rotate_label_button_get_type (), NULL);
+
+ return GTK_WIDGET (this);
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. modify widget due to change of check button */
+/*--------------------------------------------------------------------------*/
+static void
+toggled_cb (GtkToggleButton *toggle,
+ gpointer user_data)
+{
+
+ /* Emit our "changed" signal */
+ g_signal_emit (G_OBJECT (user_data),
+ rotate_label_button_signals[CHANGED], 0);
+
+}
+
+
+/****************************************************************************/
+/* query state of widget. */
+/****************************************************************************/
+gboolean
+gl_rotate_label_button_get_state (glRotateLabelButton *this)
+{
+ return
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+ (this->priv->rotate_radio));
+}
+
+/****************************************************************************/
+/* set state of widget. */
+/****************************************************************************/
+void
+gl_rotate_label_button_set_state (glRotateLabelButton *this,
+ gboolean state)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (this->priv->rotate_radio), state);
+}
+
+/****************************************************************************/
+/* set template for widget. */
+/****************************************************************************/
+void
+gl_rotate_label_button_set_template_name (glRotateLabelButton *this,
+ gchar *name)
+{
+ lglTemplate *template;
+ const lglTemplateFrame *frame;
+ gdouble raw_w, raw_h;
+
+ if (name == NULL)
+ {
+ gtk_widget_set_sensitive (this->priv->no_rotate_radio, FALSE);
+ gtk_widget_set_sensitive (this->priv->rotate_radio, FALSE);
+ }
+ else
+ {
+ template = lgl_db_lookup_template_from_name (name);
+ frame = (lglTemplateFrame *)template->frames->data;
+
+ gl_mini_label_preview_set_by_name (GL_MINI_LABEL_PREVIEW (this->priv->no_rotate_preview),
+ name, FALSE);
+ gl_mini_label_preview_set_by_name (GL_MINI_LABEL_PREVIEW (this->priv->rotate_preview),
+ name, TRUE);
+
+ lgl_template_frame_get_size (frame, &raw_w, &raw_h);
+ gtk_widget_set_sensitive (this->priv->no_rotate_radio,
+ (raw_w != raw_h));
+ gtk_widget_set_sensitive (this->priv->rotate_radio,
+ (raw_w != raw_h));
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (this->priv->no_rotate_radio), TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (this->priv->rotate_radio), FALSE);
+ }
+
+}
+
+
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */
--- /dev/null
+/*
+ * rotate-label-button.h
+ * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
+ *
+ * This file is part of gLabels.
+ *
+ * gLabels is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gLabels is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ROTATE_LABEL_BUTTON_H__
+#define __ROTATE_LABEL_BUTTON_H__
+
+#include <gtk/gtkhbox.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_ROTATE_LABEL_BUTTON (gl_rotate_label_button_get_type ())
+#define GL_ROTATE_LABEL_BUTTON(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GL_TYPE_ROTATE_LABEL_BUTTON, glRotateLabelButton ))
+#define GL_ROTATE_LABEL_BUTTON_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_ROTATE_LABEL_BUTTON, glRotateLabelButtonClass))
+#define GL_IS_ROTATE_LABEL_BUTTON(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_ROTATE_LABEL_BUTTON))
+#define GL_IS_ROTATE_LABEL_BUTTON_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_ROTATE_LABEL_BUTTON))
+
+
+typedef struct _glRotateLabelButton glRotateLabelButton;
+typedef struct _glRotateLabelButtonClass glRotateLabelButtonClass;
+
+typedef struct _glRotateLabelButtonPrivate glRotateLabelButtonPrivate;
+
+struct _glRotateLabelButton {
+ GtkHBox parent_widget;
+
+ glRotateLabelButtonPrivate *priv;
+};
+
+struct _glRotateLabelButtonClass {
+ GtkHBoxClass parent_class;
+
+ void (*changed) (glRotateLabelButton *rotate_label_button,
+ gpointer user_data);
+};
+
+
+GType gl_rotate_label_button_get_type (void) G_GNUC_CONST;
+
+GtkWidget *gl_rotate_label_button_new (void);
+
+gboolean gl_rotate_label_button_get_state (glRotateLabelButton *rotate_label);
+
+void gl_rotate_label_button_set_state (glRotateLabelButton *rotate_label,
+ gboolean state);
+
+void gl_rotate_label_button_set_template_name (glRotateLabelButton *rotate_label,
+ gchar *name);
+
+G_END_DECLS
+
+#endif
+
+
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */
+++ /dev/null
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
-/*
- * (GLABELS) Label and Business Card Creation program for GNOME
- *
- * wdgt_rotate_label.c: label rotate selection widget module
- *
- * Copyright (C) 2001-2006 Jim Evins <evins@snaught.com>.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <config.h>
-
-#include "wdgt-rotate-label.h"
-
-#include <glib/gi18n.h>
-#include <gtk/gtkradiobutton.h>
-#include <gtk/gtkdrawingarea.h>
-#include <math.h>
-
-#include "marshal.h"
-#include "color.h"
-#include "hig.h"
-#include <libglabels/db.h>
-#include "cairo-label-path.h"
-
-#include "debug.h"
-
-/*========================================================*/
-/* Private macros and constants. */
-/*========================================================*/
-#define MINI_PREVIEW_MAX_PIXELS 48
-#define MINI_PREVIEW_CANVAS_PIXELS (MINI_PREVIEW_MAX_PIXELS + 8)
-
-#define LINE_COLOR GL_COLOR(0,0,0)
-#define FILL_COLOR GL_COLOR(255,255,255)
-#define SHADOW_COLOR GL_COLOR_A(192,192,192,128)
-
-#define LINE_WIDTH_PIXELS 1.0
-
-#define SHADOW_X_OFFSET 3
-#define SHADOW_Y_OFFSET 3
-
-
-/*===========================================*/
-/* Private types */
-/*===========================================*/
-
-struct _glWdgtRotateLabelPrivate {
-
- GtkWidget *no_rotate_radio;
- GtkWidget *rotate_radio;
- GtkWidget *no_rotate_image;
- GtkWidget *rotate_image;
-
- lglTemplate *template;
-};
-
-enum {
- CHANGED,
- LAST_SIGNAL
-};
-
-/*===========================================*/
-/* Private globals */
-/*===========================================*/
-
-static gint wdgt_rotate_label_signals[LAST_SIGNAL] = { 0 };
-
-/*===========================================*/
-/* Local function prototypes */
-/*===========================================*/
-
-static void gl_wdgt_rotate_label_finalize (GObject *object);
-
-static void toggled_cb (GtkToggleButton *toggle,
- gpointer user_data);
-
-static GdkPixbuf *create_pixbuf (lglTemplate *template,
- gboolean rotate_flag);
-
-
-/****************************************************************************/
-/* Boilerplate Object stuff. */
-/****************************************************************************/
-G_DEFINE_TYPE (glWdgtRotateLabel, gl_wdgt_rotate_label, GTK_TYPE_HBOX);
-
-
-static void
-gl_wdgt_rotate_label_class_init (glWdgtRotateLabelClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
-
- gl_wdgt_rotate_label_parent_class = g_type_class_peek_parent (class);
-
- object_class->finalize = gl_wdgt_rotate_label_finalize;
-
- wdgt_rotate_label_signals[CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE(object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (glWdgtRotateLabelClass, changed),
- NULL, NULL,
- gl_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
-}
-
-static void
-gl_wdgt_rotate_label_init (glWdgtRotateLabel *rotate_label)
-{
- rotate_label->priv = g_new0 (glWdgtRotateLabelPrivate, 1);
-
- gtk_container_set_border_width (GTK_CONTAINER (rotate_label), GL_HIG_PAD2);
-
- rotate_label->priv->no_rotate_radio = gtk_radio_button_new_with_label (NULL, _("Normal"));
- rotate_label->priv->rotate_radio = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rotate_label->priv->no_rotate_radio), _("Rotated"));
-
- gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (rotate_label->priv->no_rotate_radio),
- FALSE);
- gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (rotate_label->priv->rotate_radio),
- FALSE);
-
- gtk_button_set_image_position (GTK_BUTTON (rotate_label->priv->no_rotate_radio),
- GTK_POS_TOP);
- gtk_button_set_image_position (GTK_BUTTON (rotate_label->priv->rotate_radio),
- GTK_POS_TOP);
-
- rotate_label->priv->no_rotate_image = gtk_image_new ();
- rotate_label->priv->rotate_image = gtk_image_new ();
-
- gtk_button_set_image (GTK_BUTTON (rotate_label->priv->no_rotate_radio),
- rotate_label->priv->no_rotate_image);
- gtk_button_set_image (GTK_BUTTON (rotate_label->priv->rotate_radio),
- rotate_label->priv->rotate_image);
-
- gtk_box_pack_start (GTK_BOX (rotate_label),
- rotate_label->priv->no_rotate_radio,
- FALSE, FALSE, GL_HIG_PAD1);
- gtk_box_pack_start (GTK_BOX (rotate_label),
- rotate_label->priv->rotate_radio,
- FALSE, FALSE, GL_HIG_PAD1);
-
- /* Connect signals to controls */
- g_signal_connect (G_OBJECT (rotate_label->priv->no_rotate_radio),
- "toggled",
- G_CALLBACK (toggled_cb), rotate_label);
- g_signal_connect (G_OBJECT (rotate_label->priv->rotate_radio),
- "toggled",
- G_CALLBACK (toggled_cb), rotate_label);
-}
-
-static void
-gl_wdgt_rotate_label_finalize (GObject *object)
-{
- glWdgtRotateLabel *rotate_label = GL_WDGT_ROTATE_LABEL (object);
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GL_IS_WDGT_ROTATE_LABEL (object));
-
- if (rotate_label->priv->template) {
- lgl_template_free (rotate_label->priv->template);
- rotate_label->priv->template = NULL;
- }
- g_free (rotate_label->priv);
-
- G_OBJECT_CLASS (gl_wdgt_rotate_label_parent_class)->finalize (object);
-}
-
-GtkWidget *
-gl_wdgt_rotate_label_new (void)
-{
- glWdgtRotateLabel *rotate_label;
-
- rotate_label = g_object_new (gl_wdgt_rotate_label_get_type (), NULL);
-
- return GTK_WIDGET (rotate_label);
-}
-
-/*--------------------------------------------------------------------------*/
-/* PRIVATE. modify widget due to change of check button */
-/*--------------------------------------------------------------------------*/
-static void
-toggled_cb (GtkToggleButton *toggle,
- gpointer user_data)
-{
-
- /* Emit our "changed" signal */
- g_signal_emit (G_OBJECT (user_data),
- wdgt_rotate_label_signals[CHANGED], 0);
-
-}
-
-/*--------------------------------------------------------------------------*/
-/* PRIVATE. Update mini-preview from template . */
-/*--------------------------------------------------------------------------*/
-static GdkPixbuf *
-create_pixbuf (lglTemplate *template,
- gboolean rotate_flag)
-{
- GdkPixbuf *pixbuf;
- cairo_surface_t *surface;
- const lglTemplateFrame *frame;
- gdouble m, m_canvas, w, h, scale;
- cairo_t *cr;
-
- /* Create pixbuf and cairo context. */
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, MINI_PREVIEW_CANVAS_PIXELS, MINI_PREVIEW_CANVAS_PIXELS);
- surface = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels (pixbuf),
- CAIRO_FORMAT_RGB24,
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf),
- gdk_pixbuf_get_rowstride (pixbuf));
-
-
- if (template == NULL)
- {
- return pixbuf;
- }
-
- frame = (lglTemplateFrame *)template->frames->data;
-
- if (rotate_flag)
- {
- lgl_template_frame_get_size (frame, &h, &w);
- }
- else
- {
- lgl_template_frame_get_size (frame, &w, &h);
- }
- m = MAX (w, h);
- scale = MINI_PREVIEW_MAX_PIXELS / m;
- m_canvas = MINI_PREVIEW_CANVAS_PIXELS / scale;
-
- cr = cairo_create (surface);
- cairo_surface_destroy (surface);
-
- /* Clear pixbuf */
- cairo_save (cr);
- cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
- cairo_paint (cr);
- cairo_restore (cr);
-
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_GRAY);
-
- cairo_identity_matrix (cr);
- cairo_translate (cr, MINI_PREVIEW_CANVAS_PIXELS/2, MINI_PREVIEW_CANVAS_PIXELS/2);
- cairo_scale (cr, scale, scale);
- cairo_translate (cr, -w/2.0, -h/2.0);
-
- /*
- * Shadow
- */
- cairo_save (cr);
- cairo_translate (cr, SHADOW_X_OFFSET/scale, SHADOW_Y_OFFSET/scale);
- gl_cairo_label_path (cr, template, rotate_flag, FALSE);
-
- cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (SHADOW_COLOR));
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_fill (cr);
- cairo_restore (cr);
-
- /*
- * Label + outline
- */
- gl_cairo_label_path (cr, template, rotate_flag, FALSE);
-
- cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (FILL_COLOR));
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_fill_preserve (cr);
-
- cairo_set_line_width (cr, LINE_WIDTH_PIXELS/scale);
- cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (LINE_COLOR));
- cairo_stroke (cr);
-
-
- cairo_destroy (cr);
-
- return pixbuf;
-}
-
-/****************************************************************************/
-/* query state of widget. */
-/****************************************************************************/
-gboolean
-gl_wdgt_rotate_label_get_state (glWdgtRotateLabel *rotate_label)
-{
- return
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
- (rotate_label->priv->rotate_radio));
-}
-
-/****************************************************************************/
-/* set state of widget. */
-/****************************************************************************/
-void
-gl_wdgt_rotate_label_set_state (glWdgtRotateLabel *rotate_label,
- gboolean state)
-{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
- (rotate_label->priv->rotate_radio), state);
-}
-
-/****************************************************************************/
-/* set template for widget. */
-/****************************************************************************/
-void
-gl_wdgt_rotate_label_set_template_name (glWdgtRotateLabel *rotate_label,
- gchar *name)
-{
- lglTemplate *template;
- const lglTemplateFrame *frame;
- gdouble raw_w, raw_h;
-
- if (name == NULL)
- {
- rotate_label->priv->template = NULL;
-
- gtk_widget_set_sensitive (rotate_label->priv->no_rotate_radio, FALSE);
- gtk_widget_set_sensitive (rotate_label->priv->rotate_radio, FALSE);
- }
- else
- {
- template = lgl_db_lookup_template_from_name (name);
- frame = (lglTemplateFrame *)template->frames->data;
-
- rotate_label->priv->template = template;
- lgl_template_frame_get_size (frame, &raw_w, &raw_h);
-
- gtk_image_set_from_pixbuf (GTK_IMAGE (rotate_label->priv->no_rotate_image),
- create_pixbuf (rotate_label->priv->template, FALSE));
- gtk_image_set_from_pixbuf (GTK_IMAGE (rotate_label->priv->rotate_image),
- create_pixbuf (rotate_label->priv->template, TRUE));
-
- gtk_widget_set_sensitive (rotate_label->priv->no_rotate_radio,
- (raw_w != raw_h));
- gtk_widget_set_sensitive (rotate_label->priv->rotate_radio,
- (raw_w != raw_h));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
- (rotate_label->priv->no_rotate_radio), TRUE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
- (rotate_label->priv->rotate_radio), FALSE);
-
- }
-
-}
-
+++ /dev/null
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
-/*
- * (GLABELS) Label and Business Card Creation program for GNOME
- *
- * wdgt_rotate_label.h: label rotate selection widget module header file
- *
- * Copyright (C) 2001-2006 Jim Evins <evins@snaught.com>.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __WDGT_ROTATE_LABEL_H__
-#define __WDGT_ROTATE_LABEL_H__
-
-#include <gtk/gtkhbox.h>
-
-G_BEGIN_DECLS
-
-#define GL_TYPE_WDGT_ROTATE_LABEL (gl_wdgt_rotate_label_get_type ())
-#define GL_WDGT_ROTATE_LABEL(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GL_TYPE_WDGT_ROTATE_LABEL, glWdgtRotateLabel ))
-#define GL_WDGT_ROTATE_LABEL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_WDGT_ROTATE_LABEL, glWdgtRotateLabelClass))
-#define GL_IS_WDGT_ROTATE_LABEL(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_WDGT_ROTATE_LABEL))
-#define GL_IS_WDGT_ROTATE_LABEL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_WDGT_ROTATE_LABEL))
-
-typedef struct _glWdgtRotateLabel glWdgtRotateLabel;
-typedef struct _glWdgtRotateLabelClass glWdgtRotateLabelClass;
-
-typedef struct _glWdgtRotateLabelPrivate glWdgtRotateLabelPrivate;
-
-struct _glWdgtRotateLabel {
- GtkHBox parent_widget;
-
- glWdgtRotateLabelPrivate *priv;
-};
-
-struct _glWdgtRotateLabelClass {
- GtkHBoxClass parent_class;
-
- void (*changed) (glWdgtRotateLabel *wdgt_rotate_label,
- gpointer user_data);
-};
-
-GType gl_wdgt_rotate_label_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gl_wdgt_rotate_label_new (void);
-
-gboolean gl_wdgt_rotate_label_get_state (glWdgtRotateLabel *rotate_label);
-
-void gl_wdgt_rotate_label_set_state (glWdgtRotateLabel *rotate_label,
- gboolean state);
-
-void gl_wdgt_rotate_label_set_template_name (glWdgtRotateLabel *rotate_label,
- gchar *name);
-
-G_END_DECLS
-
-#endif