Updated with upstream update
This commit is contained in:
@ -406,13 +406,6 @@ pika_font_deserialize_create (GType type,
|
||||
|
||||
font = PIKA_FONT (pika_container_get_child_by_index (fonts_container, i));
|
||||
|
||||
if (fonthash != NULL && font->hash != NULL && !g_strcmp0 (font->hash, fonthash))
|
||||
{
|
||||
most_similar_font_index = i;
|
||||
g_clear_pointer (&similar_fonts, g_list_free);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Some attrs are more identifying than others,
|
||||
* hence their higher importance in measuring similarity.
|
||||
*/
|
||||
|
@ -704,6 +704,7 @@ pika_font_factory_load_names (PikaContainer *container,
|
||||
{
|
||||
PangoFontDescription *pfd;
|
||||
GString *xml;
|
||||
GString *xml_bold_variant;
|
||||
gchar *fontformat;
|
||||
gchar *family = NULL;
|
||||
gchar *style = NULL;
|
||||
@ -796,26 +797,43 @@ pika_font_factory_load_names (PikaContainer *container,
|
||||
|
||||
xml = g_string_new ("<?xml version=\"1.0\"?>\n<match>");
|
||||
|
||||
/*We can't use faux bold (sometimes real bold) unless it is specified in fontconfig*/
|
||||
xml_bold_variant = g_string_new ("<?xml version=\"1.0\"?>\n<match>");
|
||||
|
||||
g_string_append_printf (xml,
|
||||
"<test name=\"family\"><string>%s</string></test>",
|
||||
newname);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<test name=\"family\"><string>%s</string></test>",
|
||||
newname);
|
||||
g_string_append (xml_bold_variant,
|
||||
"<test name=\"weight\" compare=\"eq\"><const>bold</const></test>");
|
||||
|
||||
escaped_fullname = g_markup_escape_text (fullname, -1);
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"fullname\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
escaped_fullname);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"fullname\" mode=\"prepend\" binding=\"strong\"><string>%s</string></edit>",
|
||||
escaped_fullname);
|
||||
g_free (escaped_fullname);
|
||||
|
||||
family = g_markup_escape_text (family, -1);
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"family\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
family);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"family\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
family);
|
||||
g_free (family);
|
||||
|
||||
escaped_file = g_markup_escape_text (file, -1);
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"file\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
escaped_file);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"file\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
escaped_file);
|
||||
g_free (escaped_file);
|
||||
|
||||
if (psname != NULL)
|
||||
@ -824,6 +842,9 @@ pika_font_factory_load_names (PikaContainer *container,
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"postscriptname\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
psname);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"postscriptname\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
psname);
|
||||
g_free (psname);
|
||||
}
|
||||
|
||||
@ -833,36 +854,64 @@ pika_font_factory_load_names (PikaContainer *container,
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"style\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
style);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"style\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
|
||||
style);
|
||||
g_free (style);
|
||||
}
|
||||
|
||||
g_string_append (xml_bold_variant, "<edit name=\"weight\" mode=\"assign\" binding=\"strong\"><const>bold</const></edit>");
|
||||
|
||||
if (weight != -1)
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"weight\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
"<edit name=\"weight\" mode=\"prepend\" binding=\"strong\"><int>%i</int></edit>",
|
||||
weight);
|
||||
|
||||
if (width != -1)
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"width\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
width);
|
||||
{
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"width\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
width);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"width\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
width);
|
||||
}
|
||||
|
||||
if (slant != -1)
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"slant\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
slant);
|
||||
{
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"slant\" mode=\"prepend\" binding=\"strong\"><int>%i</int></edit>",
|
||||
slant);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"slant\" mode=\"prepend\" binding=\"strong\"><int>%i</int></edit>",
|
||||
slant);
|
||||
}
|
||||
|
||||
if (fontversion != -1)
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"fontversion\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
fontversion);
|
||||
{
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"fontversion\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
fontversion);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"fontversion\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
fontversion);
|
||||
}
|
||||
|
||||
if (index != -1)
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"index\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
index);
|
||||
{
|
||||
g_string_append_printf (xml,
|
||||
"<edit name=\"index\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
index);
|
||||
g_string_append_printf (xml_bold_variant,
|
||||
"<edit name=\"index\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
|
||||
index);
|
||||
}
|
||||
|
||||
|
||||
g_string_append (xml, "</match>\n");
|
||||
g_string_append (xml_bold_variant, "</match>\n");
|
||||
|
||||
FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml_bold_variant->str, FcTrue);
|
||||
FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml->str, FcTrue);
|
||||
|
||||
pfd = pango_font_description_from_string (newname);
|
||||
@ -877,6 +926,7 @@ pika_font_factory_load_names (PikaContainer *container,
|
||||
pango_font_description_free (pfd);
|
||||
g_free (newname);
|
||||
g_string_free (xml, TRUE);
|
||||
g_string_free (xml_bold_variant, TRUE);
|
||||
}
|
||||
|
||||
if (n_ignored > 0)
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "core/pikaimage-undo.h"
|
||||
#include "core/pikalayer-floating-selection.h"
|
||||
|
||||
#include "pikafont.h"
|
||||
#include "pikatext.h"
|
||||
#include "pikatext-compat.h"
|
||||
#include "pikatextlayer.h"
|
||||
@ -55,24 +56,22 @@ text_render (PikaImage *image,
|
||||
PikaContext *context,
|
||||
gint text_x,
|
||||
gint text_y,
|
||||
const gchar *fontname,
|
||||
PikaFont *font,
|
||||
gdouble font_size,
|
||||
const gchar *text,
|
||||
gint border,
|
||||
gboolean antialias)
|
||||
{
|
||||
PangoFontDescription *desc;
|
||||
PikaText *gtext;
|
||||
PikaLayer *layer;
|
||||
PikaRGB color;
|
||||
gchar *font;
|
||||
gdouble size;
|
||||
PikaText *gtext;
|
||||
PikaLayer *layer;
|
||||
PikaRGB color;
|
||||
|
||||
g_return_val_if_fail (PIKA_IS_IMAGE (image), NULL);
|
||||
g_return_val_if_fail (drawable == NULL || PIKA_IS_DRAWABLE (drawable), NULL);
|
||||
g_return_val_if_fail (drawable == NULL ||
|
||||
pika_item_is_attached (PIKA_ITEM (drawable)), NULL);
|
||||
g_return_val_if_fail (PIKA_IS_CONTEXT (context), NULL);
|
||||
g_return_val_if_fail (fontname != NULL, NULL);
|
||||
g_return_val_if_fail (PIKA_IS_FONT (font), NULL);
|
||||
g_return_val_if_fail (text != NULL, NULL);
|
||||
|
||||
if (! pika_data_factory_data_wait (image->pika->font_factory))
|
||||
@ -81,27 +80,17 @@ text_render (PikaImage *image,
|
||||
if (border < 0)
|
||||
border = 0;
|
||||
|
||||
desc = pango_font_description_from_string (fontname);
|
||||
size = PANGO_PIXELS (pango_font_description_get_size (desc));
|
||||
|
||||
pango_font_description_unset_fields (desc, PANGO_FONT_MASK_SIZE);
|
||||
font = pango_font_description_to_string (desc);
|
||||
|
||||
pango_font_description_free (desc);
|
||||
|
||||
pika_context_get_foreground (context, &color);
|
||||
|
||||
gtext = g_object_new (PIKA_TYPE_TEXT,
|
||||
"text", text,
|
||||
"font", font,
|
||||
"font-size", size,
|
||||
"font-size", font_size,
|
||||
"antialias", antialias,
|
||||
"border", border,
|
||||
"color", &color,
|
||||
NULL);
|
||||
|
||||
g_free (font);
|
||||
|
||||
layer = pika_text_layer_new (image, gtext);
|
||||
|
||||
g_object_unref (gtext);
|
||||
@ -142,7 +131,8 @@ text_render (PikaImage *image,
|
||||
|
||||
gboolean
|
||||
text_get_extents (Pika *pika,
|
||||
const gchar *fontname,
|
||||
PikaFont *font,
|
||||
gdouble font_size,
|
||||
const gchar *text,
|
||||
gint *width,
|
||||
gint *height,
|
||||
@ -154,9 +144,10 @@ text_get_extents (Pika *pika,
|
||||
PangoLayout *layout;
|
||||
PangoFontMap *fontmap;
|
||||
PangoRectangle rect;
|
||||
gchar *real_fontname;
|
||||
|
||||
g_return_val_if_fail (PIKA_IS_PIKA (pika), FALSE);
|
||||
g_return_val_if_fail (fontname != NULL, FALSE);
|
||||
g_return_val_if_fail (PIKA_IS_FONT (font), FALSE);
|
||||
g_return_val_if_fail (text != NULL, FALSE);
|
||||
|
||||
if (! pika_data_factory_data_wait (pika->font_factory))
|
||||
@ -175,9 +166,11 @@ text_get_extents (Pika *pika,
|
||||
layout = pango_layout_new (context);
|
||||
g_object_unref (context);
|
||||
|
||||
font_desc = pango_font_description_from_string (fontname);
|
||||
real_fontname = g_strdup_printf ("%s %d", pika_font_get_lookup_name (font), (gint) font_size);
|
||||
font_desc = pango_font_description_from_string (real_fontname);
|
||||
pango_layout_set_font_description (layout, font_desc);
|
||||
pango_font_description_free (font_desc);
|
||||
g_free (real_fontname);
|
||||
|
||||
pango_layout_set_text (layout, text, -1);
|
||||
|
||||
@ -202,7 +195,7 @@ text_get_extents (Pika *pika,
|
||||
if (ascent)
|
||||
*ascent = PANGO_ASCENT (rect);
|
||||
if (descent)
|
||||
*descent = - PANGO_DESCENT (rect);
|
||||
*descent = PANGO_DESCENT (rect);
|
||||
}
|
||||
|
||||
g_object_unref (layout);
|
||||
|
@ -33,12 +33,14 @@ PikaLayer * text_render (PikaImage *image,
|
||||
PikaContext *context,
|
||||
gint text_x,
|
||||
gint text_y,
|
||||
const gchar *fontname,
|
||||
PikaFont *font,
|
||||
gdouble font_size,
|
||||
const gchar *text,
|
||||
gint border,
|
||||
gboolean antialias);
|
||||
gboolean text_get_extents (Pika *pika,
|
||||
const gchar *fontname,
|
||||
PikaFont *font,
|
||||
gdouble font_size,
|
||||
const gchar *text,
|
||||
gint *width,
|
||||
gint *height,
|
||||
|
Reference in New Issue
Block a user