mirror of https://github.com/GNOME/gimp.git
app: make the text style editor aware of the image's resolution
Needed for adding proper text size controls.
This commit is contained in:
parent
d074653c36
commit
1c8b01f012
|
@ -30,6 +30,8 @@
|
|||
|
||||
#include "tools-types.h"
|
||||
|
||||
#include "core/gimpimage.h"
|
||||
|
||||
#include "text/gimptext.h"
|
||||
#include "text/gimptextlayout.h"
|
||||
|
||||
|
@ -157,6 +159,9 @@ gimp_text_tool_editor_start (GimpTextTool *text_tool)
|
|||
|
||||
if (! text_tool->style_overlay)
|
||||
{
|
||||
gdouble xres = 1.0;
|
||||
gdouble yres = 1.0;
|
||||
|
||||
text_tool->style_overlay = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (text_tool->style_overlay),
|
||||
GTK_SHADOW_OUT);
|
||||
|
@ -166,7 +171,11 @@ gimp_text_tool_editor_start (GimpTextTool *text_tool)
|
|||
gimp_overlay_box_set_child_opacity (GIMP_OVERLAY_BOX (shell->canvas),
|
||||
text_tool->style_overlay, 0.7);
|
||||
|
||||
text_tool->style_editor = gimp_text_style_editor_new (text_tool->buffer);
|
||||
if (text_tool->image)
|
||||
gimp_image_get_resolution (text_tool->image, &xres, &yres);
|
||||
|
||||
text_tool->style_editor = gimp_text_style_editor_new (text_tool->buffer,
|
||||
xres, yres);
|
||||
gtk_container_add (GTK_CONTAINER (text_tool->style_overlay),
|
||||
text_tool->style_editor);
|
||||
gtk_widget_show (text_tool->style_editor);
|
||||
|
@ -197,6 +206,18 @@ gimp_text_tool_editor_position (GimpTextTool *text_tool)
|
|||
text_tool->style_overlay,
|
||||
x + 2,
|
||||
y - requisition.height - 6);
|
||||
|
||||
if (text_tool->image)
|
||||
{
|
||||
gdouble xres, yres;
|
||||
|
||||
gimp_image_get_resolution (text_tool->image, &xres, &yres);
|
||||
|
||||
g_object_set (text_tool->style_editor,
|
||||
"resolution-x", xres,
|
||||
"resolution-y", yres,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#include <gegl.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "libgimpbase/gimpbase.h"
|
||||
|
||||
#include "widgets-types.h"
|
||||
|
||||
#include "gimptextbuffer.h"
|
||||
|
@ -32,7 +34,9 @@
|
|||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_BUFFER
|
||||
PROP_BUFFER,
|
||||
PROP_RESOLUTION_X,
|
||||
PROP_RESOLUTION_Y
|
||||
};
|
||||
|
||||
|
||||
|
@ -86,6 +90,24 @@ gimp_text_style_editor_class_init (GimpTextStyleEditorClass *klass)
|
|||
GIMP_TYPE_TEXT_BUFFER,
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_RESOLUTION_X,
|
||||
g_param_spec_double ("resolution-x",
|
||||
NULL, NULL,
|
||||
GIMP_MIN_RESOLUTION,
|
||||
GIMP_MAX_RESOLUTION,
|
||||
1.0,
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_RESOLUTION_Y,
|
||||
g_param_spec_double ("resolution-y",
|
||||
NULL, NULL,
|
||||
GIMP_MIN_RESOLUTION,
|
||||
GIMP_MAX_RESOLUTION,
|
||||
1.0,
|
||||
GIMP_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -108,6 +130,11 @@ gimp_text_style_editor_init (GimpTextStyleEditor *editor)
|
|||
image = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU);
|
||||
gtk_container_add (GTK_CONTAINER (editor->clear_button), image);
|
||||
gtk_widget_show (image);
|
||||
|
||||
editor->size_label = gtk_label_new ("0.0");
|
||||
gtk_misc_set_padding (GTK_MISC (editor->size_label), 2, 0);
|
||||
gtk_box_pack_end (GTK_BOX (editor), editor->size_label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (editor->size_label);
|
||||
}
|
||||
|
||||
static GObject *
|
||||
|
@ -201,6 +228,12 @@ gimp_text_style_editor_set_property (GObject *object,
|
|||
case PROP_BUFFER:
|
||||
editor->buffer = g_value_dup_object (value);
|
||||
break;
|
||||
case PROP_RESOLUTION_X:
|
||||
editor->resolution_x = g_value_get_double (value);
|
||||
break;
|
||||
case PROP_RESOLUTION_Y:
|
||||
editor->resolution_y = g_value_get_double (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
|
@ -221,6 +254,12 @@ gimp_text_style_editor_get_property (GObject *object,
|
|||
case PROP_BUFFER:
|
||||
g_value_set_object (value, editor->buffer);
|
||||
break;
|
||||
case PROP_RESOLUTION_X:
|
||||
g_value_set_double (value, editor->resolution_x);
|
||||
break;
|
||||
case PROP_RESOLUTION_Y:
|
||||
g_value_set_double (value, editor->resolution_y);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
|
@ -232,12 +271,18 @@ gimp_text_style_editor_get_property (GObject *object,
|
|||
/* public functions */
|
||||
|
||||
GtkWidget *
|
||||
gimp_text_style_editor_new (GimpTextBuffer *buffer)
|
||||
gimp_text_style_editor_new (GimpTextBuffer *buffer,
|
||||
gdouble resolution_x,
|
||||
gdouble resolution_y)
|
||||
{
|
||||
g_return_val_if_fail (GIMP_IS_TEXT_BUFFER (buffer), NULL);
|
||||
g_return_val_if_fail (resolution_x > 0.0, NULL);
|
||||
g_return_val_if_fail (resolution_y > 0.0, NULL);
|
||||
|
||||
return g_object_new (GIMP_TYPE_TEXT_STYLE_EDITOR,
|
||||
"buffer", buffer,
|
||||
"buffer", buffer,
|
||||
"resolution-x", resolution_x,
|
||||
"resolution-y", resolution_y,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
@ -440,11 +485,14 @@ gimp_text_style_editor_update (GimpTextStyleEditor *editor)
|
|||
if (! data.any_active)
|
||||
break;
|
||||
}
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (editor->size_label), "---");
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateTogglesData data;
|
||||
GtkTextIter cursor;
|
||||
UpdateTogglesData data;
|
||||
GtkTextIter cursor;
|
||||
gchar *str;
|
||||
|
||||
gtk_text_buffer_get_iter_at_mark (buffer, &cursor,
|
||||
gtk_text_buffer_get_insert (buffer));
|
||||
|
@ -458,6 +506,10 @@ gimp_text_style_editor_update (GimpTextStyleEditor *editor)
|
|||
(GHFunc) gimp_text_style_editor_update_cursor,
|
||||
&data);
|
||||
|
||||
str = g_strdup_printf ("%0.2f", editor->resolution_y);
|
||||
gtk_label_set_text (GTK_LABEL (editor->size_label), str);
|
||||
g_free (str);
|
||||
|
||||
g_slist_free (data.tags);
|
||||
g_slist_free (data.tags_on);
|
||||
g_slist_free (data.tags_off);
|
||||
|
|
|
@ -38,12 +38,17 @@ struct _GimpTextStyleEditor
|
|||
|
||||
GimpTextBuffer *buffer;
|
||||
|
||||
gdouble resolution_x;
|
||||
gdouble resolution_y;
|
||||
|
||||
GtkWidget *clear_button;
|
||||
GtkWidget *bold_toggle;
|
||||
GtkWidget *italic_toggle;
|
||||
GtkWidget *underline_toggle;
|
||||
GtkWidget *strikethrough_toggle;
|
||||
|
||||
GtkWidget *size_label;
|
||||
|
||||
GList *toggles;
|
||||
GHashTable *tag_to_toggle_hash;
|
||||
};
|
||||
|
@ -56,7 +61,9 @@ struct _GimpTextStyleEditorClass
|
|||
|
||||
GType gimp_text_style_editor_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GtkWidget * gimp_text_style_editor_new (GimpTextBuffer *buffer);
|
||||
GtkWidget * gimp_text_style_editor_new (GimpTextBuffer *buffer,
|
||||
gdouble resolution_x,
|
||||
gdouble resolution_y);
|
||||
|
||||
GList * gimp_text_style_editor_list_tags (GimpTextStyleEditor *editor);
|
||||
|
||||
|
|
Loading…
Reference in New Issue