mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
Port GimpText to GimpFont
In GimpText, The font used to be stored as a string containing its name, Now, it is stored as a GimpFont object, which makes more sense and makes operations on fonts easier (such as serialization).
This commit is contained in:
parent
b5895aca9a
commit
a966297498
10 changed files with 66 additions and 37 deletions
|
@ -275,6 +275,8 @@ gimp_g_value_get_memsize (GValue *value)
|
||||||
{
|
{
|
||||||
if (strcmp ("GimpPattern", G_VALUE_TYPE_NAME (value)) == 0)
|
if (strcmp ("GimpPattern", G_VALUE_TYPE_NAME (value)) == 0)
|
||||||
memsize += gimp_g_object_get_memsize (g_value_get_object (value));
|
memsize += gimp_g_object_get_memsize (g_value_get_object (value));
|
||||||
|
else if (strcmp ("GimpFont", G_VALUE_TYPE_NAME (value)) == 0)
|
||||||
|
memsize += gimp_g_object_get_memsize (g_value_get_object (value));
|
||||||
else
|
else
|
||||||
g_printerr ("%s: unhandled object value type: %s\n",
|
g_printerr ("%s: unhandled object value type: %s\n",
|
||||||
G_STRFUNC, G_VALUE_TYPE_NAME (value));
|
G_STRFUNC, G_VALUE_TYPE_NAME (value));
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "core/gimpcontext.h"
|
#include "core/gimpcontext.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
#include "core/gimpparamspecs.h"
|
#include "core/gimpparamspecs.h"
|
||||||
|
#include "text/gimpfont.h"
|
||||||
#include "text/gimptext.h"
|
#include "text/gimptext.h"
|
||||||
#include "text/gimptextlayer.h"
|
#include "text/gimptextlayer.h"
|
||||||
|
|
||||||
|
@ -260,9 +261,13 @@ text_layer_get_font_invoker (GimpProcedure *procedure,
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
|
GimpFont *font_obj;
|
||||||
|
|
||||||
g_object_get (gimp_text_layer_get_text (layer),
|
g_object_get (gimp_text_layer_get_text (layer),
|
||||||
"font", &font,
|
"font", &font_obj,
|
||||||
NULL);
|
NULL);
|
||||||
|
font = g_strdup (gimp_font_get_lookup_name (font_obj));
|
||||||
|
g_object_unref (font_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||||
|
|
|
@ -42,6 +42,8 @@
|
||||||
|
|
||||||
#include "core/gimptempbuf.h"
|
#include "core/gimptempbuf.h"
|
||||||
|
|
||||||
|
#include "core/gimp-memsize.h"
|
||||||
|
|
||||||
#include "gimpfont.h"
|
#include "gimpfont.h"
|
||||||
|
|
||||||
#include "gimp-intl.h"
|
#include "gimp-intl.h"
|
||||||
|
@ -106,6 +108,8 @@ static GimpTempBuf * gimp_font_get_new_preview (GimpViewable *viewable,
|
||||||
static const gchar * gimp_font_get_sample_string (PangoContext *context,
|
static const gchar * gimp_font_get_sample_string (PangoContext *context,
|
||||||
PangoFontDescription *font_desc);
|
PangoFontDescription *font_desc);
|
||||||
|
|
||||||
|
static gint64 gimp_font_get_memsize (GimpObject *object,
|
||||||
|
gint64 *gui_size);
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpFont, gimp_font, GIMP_TYPE_DATA)
|
G_DEFINE_TYPE (GimpFont, gimp_font, GIMP_TYPE_DATA)
|
||||||
|
|
||||||
|
@ -122,7 +126,7 @@ gboolean
|
||||||
gimp_font_match_by_lookup_name (GimpFont *font,
|
gimp_font_match_by_lookup_name (GimpFont *font,
|
||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
return !g_strcmp0 (gimp_font_get_lookup_name (font), name);
|
return !g_strcmp0 (font->lookup_name, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
const gchar*
|
const gchar*
|
||||||
|
@ -134,11 +138,13 @@ gimp_font_get_lookup_name (GimpFont *font)
|
||||||
static void
|
static void
|
||||||
gimp_font_class_init (GimpFontClass *klass)
|
gimp_font_class_init (GimpFontClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
|
GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
|
||||||
|
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
object_class->finalize = gimp_font_finalize;
|
object_class->finalize = gimp_font_finalize;
|
||||||
object_class->set_property = gimp_font_set_property;
|
object_class->set_property = gimp_font_set_property;
|
||||||
|
gimp_object_class->get_memsize = gimp_font_get_memsize;
|
||||||
|
|
||||||
viewable_class->get_preview_size = gimp_font_get_preview_size;
|
viewable_class->get_preview_size = gimp_font_get_preview_size;
|
||||||
viewable_class->get_popup_size = gimp_font_get_popup_size;
|
viewable_class->get_popup_size = gimp_font_get_popup_size;
|
||||||
|
@ -192,6 +198,19 @@ gimp_font_set_property (GObject *object,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gint64
|
||||||
|
gimp_font_get_memsize (GimpObject *object,
|
||||||
|
gint64 *gui_size)
|
||||||
|
{
|
||||||
|
GimpFont *font = GIMP_FONT (object);
|
||||||
|
gint64 memsize = 0;
|
||||||
|
|
||||||
|
memsize += gimp_string_get_memsize (font->lookup_name);
|
||||||
|
|
||||||
|
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
|
||||||
|
gui_size);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_font_get_preview_size (GimpViewable *viewable,
|
gimp_font_get_preview_size (GimpViewable *viewable,
|
||||||
gint size,
|
gint size,
|
||||||
|
@ -221,7 +240,7 @@ gimp_font_get_popup_size (GimpViewable *viewable,
|
||||||
if (! font->pango_context)
|
if (! font->pango_context)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
name = gimp_font_get_lookup_name (font);
|
name = font->lookup_name;
|
||||||
|
|
||||||
font_desc = pango_font_description_from_string (name);
|
font_desc = pango_font_description_from_string (name);
|
||||||
g_return_val_if_fail (font_desc != NULL, FALSE);
|
g_return_val_if_fail (font_desc != NULL, FALSE);
|
||||||
|
@ -276,7 +295,7 @@ gimp_font_get_new_preview (GimpViewable *viewable,
|
||||||
PangoFontDescription *font_desc;
|
PangoFontDescription *font_desc;
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
|
|
||||||
name = gimp_font_get_lookup_name (font);
|
name = font->lookup_name;
|
||||||
|
|
||||||
DEBUGPRINT (("%s: ", name));
|
DEBUGPRINT (("%s: ", name));
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
|
|
||||||
#include "text-types.h"
|
#include "text-types.h"
|
||||||
|
|
||||||
|
#include "gimpfont.h"
|
||||||
|
|
||||||
#include "core/gimp.h"
|
#include "core/gimp.h"
|
||||||
#include "core/gimp-memsize.h"
|
#include "core/gimp-memsize.h"
|
||||||
#include "core/gimp-utils.h"
|
#include "core/gimp-utils.h"
|
||||||
|
@ -176,11 +178,9 @@ gimp_text_class_init (GimpTextClass *klass)
|
||||||
NULL,
|
NULL,
|
||||||
GIMP_PARAM_STATIC_STRINGS);
|
GIMP_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
GIMP_CONFIG_PROP_STRING (object_class, PROP_FONT,
|
GIMP_CONFIG_PROP_FONT (object_class, PROP_FONT,
|
||||||
"font",
|
"font", NULL, NULL,
|
||||||
NULL, NULL,
|
GIMP_CONFIG_PARAM_FLAGS);
|
||||||
"Sans-serif",
|
|
||||||
GIMP_PARAM_STATIC_STRINGS);
|
|
||||||
|
|
||||||
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_FONT_SIZE,
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_FONT_SIZE,
|
||||||
"font-size",
|
"font-size",
|
||||||
|
@ -415,8 +415,8 @@ gimp_text_finalize (GObject *object)
|
||||||
|
|
||||||
g_clear_pointer (&text->text, g_free);
|
g_clear_pointer (&text->text, g_free);
|
||||||
g_clear_pointer (&text->markup, g_free);
|
g_clear_pointer (&text->markup, g_free);
|
||||||
g_clear_pointer (&text->font, g_free);
|
|
||||||
g_clear_pointer (&text->language, g_free);
|
g_clear_pointer (&text->language, g_free);
|
||||||
|
g_clear_object (&text->font);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
@ -438,7 +438,7 @@ gimp_text_get_property (GObject *object,
|
||||||
g_value_set_string (value, text->markup);
|
g_value_set_string (value, text->markup);
|
||||||
break;
|
break;
|
||||||
case PROP_FONT:
|
case PROP_FONT:
|
||||||
g_value_set_string (value, text->font);
|
g_value_set_object (value, text->font);
|
||||||
break;
|
break;
|
||||||
case PROP_FONT_SIZE:
|
case PROP_FONT_SIZE:
|
||||||
g_value_set_double (value, text->font_size);
|
g_value_set_double (value, text->font_size);
|
||||||
|
@ -580,23 +580,10 @@ gimp_text_set_property (GObject *object,
|
||||||
break;
|
break;
|
||||||
case PROP_FONT:
|
case PROP_FONT:
|
||||||
{
|
{
|
||||||
const gchar *font = g_value_get_string (value);
|
GimpFont *font = g_value_get_object (value);
|
||||||
|
|
||||||
g_free (text->font);
|
if (font != text->font)
|
||||||
|
g_set_object (&text->font, font);
|
||||||
if (font)
|
|
||||||
{
|
|
||||||
gsize len = strlen (font);
|
|
||||||
|
|
||||||
if (g_str_has_suffix (font, " Not-Rotated"))
|
|
||||||
len -= strlen ( " Not-Rotated");
|
|
||||||
|
|
||||||
text->font = g_strndup (font, len);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
text->font = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PROP_FONT_SIZE:
|
case PROP_FONT_SIZE:
|
||||||
|
@ -748,7 +735,6 @@ gimp_text_get_memsize (GimpObject *object,
|
||||||
|
|
||||||
memsize += gimp_string_get_memsize (text->text);
|
memsize += gimp_string_get_memsize (text->text);
|
||||||
memsize += gimp_string_get_memsize (text->markup);
|
memsize += gimp_string_get_memsize (text->markup);
|
||||||
memsize += gimp_string_get_memsize (text->font);
|
|
||||||
memsize += gimp_string_get_memsize (text->language);
|
memsize += gimp_string_get_memsize (text->language);
|
||||||
|
|
||||||
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
|
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
|
||||||
|
|
|
@ -41,7 +41,7 @@ struct _GimpText
|
||||||
|
|
||||||
gchar *text;
|
gchar *text;
|
||||||
gchar *markup;
|
gchar *markup;
|
||||||
gchar *font;
|
GimpFont *font;
|
||||||
GimpUnit unit;
|
GimpUnit unit;
|
||||||
gdouble font_size;
|
gdouble font_size;
|
||||||
gboolean antialias;
|
gboolean antialias;
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
|
|
||||||
#include "core/gimperror.h"
|
#include "core/gimperror.h"
|
||||||
|
|
||||||
|
#include "gimpfont.h"
|
||||||
|
|
||||||
#include "gimptext.h"
|
#include "gimptext.h"
|
||||||
#include "gimptextlayout.h"
|
#include "gimptextlayout.h"
|
||||||
|
|
||||||
|
@ -116,7 +118,7 @@ gimp_text_layout_new (GimpText *text,
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_TEXT (text), NULL);
|
g_return_val_if_fail (GIMP_IS_TEXT (text), NULL);
|
||||||
|
|
||||||
font_desc = pango_font_description_from_string (text->font);
|
font_desc = pango_font_description_from_string (gimp_font_get_lookup_name (text->font));
|
||||||
g_return_val_if_fail (font_desc != NULL, NULL);
|
g_return_val_if_fail (font_desc != NULL, NULL);
|
||||||
|
|
||||||
size = pango_units_from_double (gimp_units_to_points (text->font_size,
|
size = pango_units_from_double (gimp_units_to_points (text->font_size,
|
||||||
|
|
|
@ -41,6 +41,8 @@
|
||||||
|
|
||||||
#include "text/gimptext.h"
|
#include "text/gimptext.h"
|
||||||
|
|
||||||
|
#include "text/gimpfont.h"
|
||||||
|
|
||||||
#include "widgets/gimpcolorpanel.h"
|
#include "widgets/gimpcolorpanel.h"
|
||||||
#include "widgets/gimpmenufactory.h"
|
#include "widgets/gimpmenufactory.h"
|
||||||
#include "widgets/gimppropwidgets.h"
|
#include "widgets/gimppropwidgets.h"
|
||||||
|
@ -648,11 +650,14 @@ gimp_text_options_notify_font (GimpContext *context,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
GimpText *text)
|
GimpText *text)
|
||||||
{
|
{
|
||||||
|
if (gimp_context_get_font (context) == text->font)
|
||||||
|
return;
|
||||||
|
|
||||||
g_signal_handlers_block_by_func (text,
|
g_signal_handlers_block_by_func (text,
|
||||||
gimp_text_options_notify_text_font,
|
gimp_text_options_notify_text_font,
|
||||||
context);
|
context);
|
||||||
|
|
||||||
g_object_set (text, "font", gimp_context_get_font_name (context), NULL);
|
g_object_set (text, "font", gimp_context_get_font (context), NULL);
|
||||||
|
|
||||||
g_signal_handlers_unblock_by_func (text,
|
g_signal_handlers_unblock_by_func (text,
|
||||||
gimp_text_options_notify_text_font,
|
gimp_text_options_notify_text_font,
|
||||||
|
@ -667,7 +672,7 @@ gimp_text_options_notify_text_font (GimpText *text,
|
||||||
g_signal_handlers_block_by_func (context,
|
g_signal_handlers_block_by_func (context,
|
||||||
gimp_text_options_notify_font, text);
|
gimp_text_options_notify_font, text);
|
||||||
|
|
||||||
gimp_context_set_font_name (context, text->font);
|
gimp_context_set_font (context, text->font);
|
||||||
|
|
||||||
g_signal_handlers_unblock_by_func (context,
|
g_signal_handlers_unblock_by_func (context,
|
||||||
gimp_text_options_notify_font, text);
|
gimp_text_options_notify_font, text);
|
||||||
|
@ -728,7 +733,7 @@ gimp_text_options_connect_text (GimpTextOptions *options,
|
||||||
|
|
||||||
g_object_set (text,
|
g_object_set (text,
|
||||||
"color", &color,
|
"color", &color,
|
||||||
"font", gimp_context_get_font_name (context),
|
"font", gimp_context_get_font (context),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
gimp_config_connect (G_OBJECT (options), G_OBJECT (text), NULL);
|
gimp_config_connect (G_OBJECT (options), G_OBJECT (text), NULL);
|
||||||
|
|
|
@ -723,7 +723,7 @@ gimp_text_style_editor_set_default_font (GimpTextStyleEditor *editor)
|
||||||
gimp_text_style_editor_font_changed,
|
gimp_text_style_editor_font_changed,
|
||||||
editor);
|
editor);
|
||||||
|
|
||||||
gimp_context_set_font_name (editor->context, editor->text->font);
|
gimp_context_set_font (editor->context, editor->text->font);
|
||||||
|
|
||||||
g_signal_handlers_unblock_by_func (editor->context,
|
g_signal_handlers_unblock_by_func (editor->context,
|
||||||
gimp_text_style_editor_font_changed,
|
gimp_text_style_editor_font_changed,
|
||||||
|
|
|
@ -182,6 +182,11 @@ G_BEGIN_DECLS
|
||||||
default,\
|
default,\
|
||||||
flags | GIMP_CONFIG_PARAM_FLAGS))
|
flags | GIMP_CONFIG_PARAM_FLAGS))
|
||||||
|
|
||||||
|
#define GIMP_CONFIG_PROP_FONT(class, id, name, nick, blurb, flags) \
|
||||||
|
g_object_class_install_property (class, id,\
|
||||||
|
g_param_spec_object (name, nick, blurb,\
|
||||||
|
GIMP_TYPE_FONT,\
|
||||||
|
flags | GIMP_CONFIG_PARAM_FLAGS))
|
||||||
|
|
||||||
/* object, boxed and pointer properties are _not_ G_PARAM_CONSTRUCT */
|
/* object, boxed and pointer properties are _not_ G_PARAM_CONSTRUCT */
|
||||||
|
|
||||||
|
|
|
@ -249,9 +249,13 @@ HELP
|
||||||
%invoke = (
|
%invoke = (
|
||||||
code => <<'CODE'
|
code => <<'CODE'
|
||||||
{
|
{
|
||||||
|
GimpFont *font_obj;
|
||||||
|
|
||||||
g_object_get (gimp_text_layer_get_text (layer),
|
g_object_get (gimp_text_layer_get_text (layer),
|
||||||
"font", &font,
|
"font", &font_obj,
|
||||||
NULL);
|
NULL);
|
||||||
|
font = g_strdup (gimp_font_get_lookup_name (font_obj));
|
||||||
|
g_object_unref (font_obj);
|
||||||
}
|
}
|
||||||
CODE
|
CODE
|
||||||
);
|
);
|
||||||
|
@ -990,6 +994,7 @@ CODE
|
||||||
@headers = qw(<pango/pango.h>
|
@headers = qw(<pango/pango.h>
|
||||||
"libgimpbase/gimpbase.h"
|
"libgimpbase/gimpbase.h"
|
||||||
"core/gimpcontext.h"
|
"core/gimpcontext.h"
|
||||||
|
"text/gimpfont.h"
|
||||||
"text/gimptext.h"
|
"text/gimptext.h"
|
||||||
"text/gimptextlayer.h"
|
"text/gimptextlayer.h"
|
||||||
"gimppdb-utils.h"
|
"gimppdb-utils.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue