forked from AuroraMiddleware/gtk
Implement text transforms for GtkTextView
Add a property to GtkTextTag and do all the legwork to translate it to the Pango attribute.
This commit is contained in:
parent
2d84a1c63e
commit
417b3f9c6b
@ -271,6 +271,7 @@ insert_tags_for_attributes (GtkTextBuffer *buffer,
|
||||
break;
|
||||
|
||||
case PANGO_ATTR_TEXT_TRANSFORM:
|
||||
INT_ATTR (text_transform);
|
||||
break;
|
||||
|
||||
case PANGO_ATTR_INVALID:
|
||||
|
@ -438,6 +438,9 @@ _gtk_text_attributes_fill_from_tags (GtkTextAttributes *dest,
|
||||
|
||||
if (tag->priv->insert_hyphens_set)
|
||||
dest->no_hyphens = vals->no_hyphens;
|
||||
|
||||
if (tag->priv->text_transform_set)
|
||||
dest->text_transform = vals->text_transform;
|
||||
}
|
||||
|
||||
dest->left_margin += left_margin_accumulative;
|
||||
@ -467,7 +470,8 @@ _gtk_text_tag_affects_size (GtkTextTag *tag)
|
||||
priv->wrap_mode_set ||
|
||||
priv->invisible_set ||
|
||||
priv->font_features_set ||
|
||||
priv->letter_spacing_set;
|
||||
priv->letter_spacing_set ||
|
||||
priv->text_transform_set;
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -159,6 +159,7 @@ struct _GtkTextAttributes
|
||||
guint show_spaces : 3; /* PangoShowFlags */
|
||||
guint no_hyphens : 1;
|
||||
guint line_height_is_absolute : 1;
|
||||
guint text_transform : 3; /* PangoTextTransform */
|
||||
};
|
||||
|
||||
GtkTextAttributes* gtk_text_attributes_new (void);
|
||||
|
@ -4713,6 +4713,7 @@ insert_tags_for_attributes (GtkTextBuffer *buffer,
|
||||
break;
|
||||
|
||||
case PANGO_ATTR_TEXT_TRANSFORM:
|
||||
INT_ATTR (text_transform);
|
||||
break;
|
||||
|
||||
case PANGO_ATTR_SHAPE:
|
||||
|
@ -1683,6 +1683,15 @@ add_text_attrs (GtkTextLayout *layout,
|
||||
attr->start_index = start;
|
||||
attr->end_index = start + byte_count;
|
||||
|
||||
pango_attr_list_insert (attrs, attr);
|
||||
}
|
||||
|
||||
if (style->text_transform != PANGO_TEXT_TRANSFORM_NONE)
|
||||
{
|
||||
attr = pango_attr_text_transform_new (style->text_transform);
|
||||
attr->start_index = start;
|
||||
attr->end_index = start + byte_count;
|
||||
|
||||
pango_attr_list_insert (attrs, attr);
|
||||
}
|
||||
}
|
||||
|
@ -134,6 +134,7 @@ enum {
|
||||
PROP_ALLOW_BREAKS,
|
||||
PROP_SHOW_SPACES,
|
||||
PROP_INSERT_HYPHENS,
|
||||
PROP_TEXT_TRANSFORM,
|
||||
|
||||
/* Behavior args */
|
||||
PROP_ACCUMULATIVE_MARGIN,
|
||||
@ -176,6 +177,7 @@ enum {
|
||||
PROP_ALLOW_BREAKS_SET,
|
||||
PROP_SHOW_SPACES_SET,
|
||||
PROP_INSERT_HYPHENS_SET,
|
||||
PROP_TEXT_TRANSFORM_SET,
|
||||
|
||||
LAST_ARG
|
||||
};
|
||||
@ -856,6 +858,22 @@ gtk_text_tag_class_init (GtkTextTagClass *klass)
|
||||
TRUE,
|
||||
GTK_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* GtkTextTag:text-transform:
|
||||
*
|
||||
* How to transform the text for display.
|
||||
*
|
||||
* Since: 4.6
|
||||
*/
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_TEXT_TRANSFORM,
|
||||
g_param_spec_enum ("text-transform",
|
||||
P_("Text Transform"),
|
||||
P_("Whether to transform text for display."),
|
||||
PANGO_TYPE_TEXT_TRANSFORM,
|
||||
PANGO_TEXT_TRANSFORM_NONE,
|
||||
GTK_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* GtkTextTag:accumulative-margin:
|
||||
*
|
||||
@ -1034,6 +1052,10 @@ gtk_text_tag_class_init (GtkTextTagClass *klass)
|
||||
ADD_SET_PROP ("insert-hyphens-set", PROP_INSERT_HYPHENS_SET,
|
||||
P_("Insert hyphens set"),
|
||||
P_("Whether this tag affects insertion of hyphens"));
|
||||
|
||||
ADD_SET_PROP ("text-transform-set", PROP_TEXT_TRANSFORM_SET,
|
||||
P_("Text transform set"),
|
||||
P_("Whether this tag affects text transformation"));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1783,6 +1805,12 @@ gtk_text_tag_set_property (GObject *object,
|
||||
g_object_notify (object, "insert-hyphens-set");
|
||||
break;
|
||||
|
||||
case PROP_TEXT_TRANSFORM:
|
||||
priv->text_transform_set = TRUE;
|
||||
priv->values->text_transform = g_value_get_enum (value);
|
||||
g_object_notify (object, "text-transform-set");
|
||||
break;
|
||||
|
||||
case PROP_ACCUMULATIVE_MARGIN:
|
||||
priv->accumulative_margin = g_value_get_boolean (value);
|
||||
g_object_notify (object, "accumulative-margin");
|
||||
@ -1947,6 +1975,10 @@ gtk_text_tag_set_property (GObject *object,
|
||||
priv->insert_hyphens_set = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
case PROP_TEXT_TRANSFORM_SET:
|
||||
priv->text_transform_set = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@ -2159,6 +2191,10 @@ gtk_text_tag_get_property (GObject *object,
|
||||
g_value_set_boolean (value, !priv->values->no_hyphens);
|
||||
break;
|
||||
|
||||
case PROP_TEXT_TRANSFORM:
|
||||
g_value_set_enum (value, priv->values->text_transform);
|
||||
break;
|
||||
|
||||
case PROP_ACCUMULATIVE_MARGIN:
|
||||
g_value_set_boolean (value, priv->accumulative_margin);
|
||||
break;
|
||||
@ -2301,6 +2337,10 @@ gtk_text_tag_get_property (GObject *object,
|
||||
g_value_set_boolean (value, priv->insert_hyphens_set);
|
||||
break;
|
||||
|
||||
case PROP_TEXT_TRANSFORM_SET:
|
||||
g_value_set_boolean (value, priv->text_transform_set);
|
||||
break;
|
||||
|
||||
case PROP_BACKGROUND:
|
||||
case PROP_FOREGROUND:
|
||||
case PROP_PARAGRAPH_BACKGROUND:
|
||||
|
@ -87,6 +87,7 @@ struct _GtkTextTagPrivate
|
||||
guint allow_breaks_set : 1;
|
||||
guint show_spaces_set : 1;
|
||||
guint insert_hyphens_set : 1;
|
||||
guint text_transform_set : 1;
|
||||
|
||||
/* Whether these margins accumulate or override */
|
||||
guint accumulative_margin : 1;
|
||||
|
Loading…
Reference in New Issue
Block a user