Merge branch 'textproperty' into 'master'

Removed text categories

See merge request Librem5/squeekboard!114
This commit is contained in:
David Boddie
2019-08-02 14:36:41 +00:00
9 changed files with 10 additions and 233 deletions

View File

@ -56,7 +56,6 @@ typedef struct _EekKeysymPrivate
struct _EekKeysymEntry { struct _EekKeysymEntry {
guint xkeysym; guint xkeysym;
const gchar *name; const gchar *name;
EekSymbolCategory category;
}; };
typedef struct _EekKeysymEntry EekKeysymEntry; typedef struct _EekKeysymEntry EekKeysymEntry;
@ -226,7 +225,6 @@ eek_keysym_new_with_modifier (guint xkeysym,
EekKeysymEntry *special_entry, *xkeysym_entry, *unicode_entry, EekKeysymEntry *special_entry, *xkeysym_entry, *unicode_entry,
*unichar_entry; *unichar_entry;
gchar *name, *label; gchar *name, *label;
EekSymbolCategory category;
gunichar uc; gunichar uc;
special_entry = special_entry =
@ -246,23 +244,17 @@ eek_keysym_new_with_modifier (guint xkeysym,
unichar_entry = g_slice_new (EekKeysymEntry); unichar_entry = g_slice_new (EekKeysymEntry);
unichar_entry->xkeysym = xkeysym; unichar_entry->xkeysym = xkeysym;
unichar_entry->name = unichar_to_utf8 (uc); unichar_entry->name = unichar_to_utf8 (uc);
unichar_entry->category = EEK_SYMBOL_CATEGORY_LETTER;
} }
/* name and category */
name = NULL; name = NULL;
if (xkeysym_entry) { if (xkeysym_entry) {
name = g_strdup (xkeysym_entry->name); name = g_strdup (xkeysym_entry->name);
category = xkeysym_entry->category;
} else if (unichar_entry) { } else if (unichar_entry) {
name = g_strdup (unichar_entry->name); name = g_strdup (unichar_entry->name);
category = unichar_entry->category;
} else if (unicode_entry) { } else if (unicode_entry) {
name = g_strdup (unicode_entry->name); name = g_strdup (unicode_entry->name);
category = unicode_entry->category;
} else { } else {
name = g_strdup (""); name = g_strdup ("");
category = EEK_SYMBOL_CATEGORY_UNKNOWN;
} }
/* label */ /* label */
@ -278,7 +270,6 @@ eek_keysym_new_with_modifier (guint xkeysym,
keysym = g_object_new (EEK_TYPE_KEYSYM, keysym = g_object_new (EEK_TYPE_KEYSYM,
"name", name, "name", name,
"label", label, "label", label,
"category", category,
"modifier-mask", modifier_mask, "modifier-mask", modifier_mask,
NULL); NULL);
g_free (name); g_free (name);
@ -326,7 +317,6 @@ eek_keysym_new_from_name (const gchar *name)
return g_object_new (EEK_TYPE_KEYSYM, return g_object_new (EEK_TYPE_KEYSYM,
"name", name, "name", name,
"label", name, "label", name,
"category", EEK_SYMBOL_CATEGORY_UNKNOWN,
"modifier-mask", 0, "modifier-mask", 0,
NULL); NULL);
} }

View File

@ -68,14 +68,6 @@ G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT)
static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0}; static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0};
static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0}; static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0};
struct _TextProperty {
gint category;
gboolean ascii;
gdouble scale;
gboolean ellipses;
};
typedef struct _TextProperty TextProperty;
/* eek-keyboard-drawing.c */ /* eek-keyboard-drawing.c */
extern void _eek_rounded_polygon (cairo_t *cr, extern void _eek_rounded_polygon (cairo_t *cr,
gdouble radius, gdouble radius,
@ -496,22 +488,6 @@ eek_renderer_apply_transformation_for_key (EekRenderer *self,
} }
} }
static const TextProperty *
get_text_property_for_category (EekSymbolCategory category)
{
static const TextProperty props[EEK_SYMBOL_CATEGORY_LAST] = {
{ EEK_SYMBOL_CATEGORY_LETTER, FALSE, 1.0, FALSE },
{ EEK_SYMBOL_CATEGORY_FUNCTION, TRUE, 0.5, FALSE },
{ EEK_SYMBOL_CATEGORY_KEYNAME, TRUE, 0.5, TRUE }
};
for (uint i = 0; i < G_N_ELEMENTS(props); i++)
if (props[i].category == category)
return &props[i];
g_return_val_if_reached (NULL);
}
static void static void
eek_renderer_real_render_key_label (EekRenderer *self, eek_renderer_real_render_key_label (EekRenderer *self,
PangoLayout *layout, PangoLayout *layout,
@ -519,10 +495,8 @@ eek_renderer_real_render_key_label (EekRenderer *self,
{ {
EekRendererPrivate *priv = eek_renderer_get_instance_private (self); EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
EekSymbol *symbol; EekSymbol *symbol;
EekSymbolCategory category;
const gchar *label; const gchar *label;
EekBounds bounds; EekBounds bounds;
const TextProperty *prop;
PangoFontDescription *font; PangoFontDescription *font;
PangoLayoutLine *line; PangoLayoutLine *line;
gdouble scale; gdouble scale;
@ -561,15 +535,9 @@ eek_renderer_real_render_key_label (EekRenderer *self,
scale = MIN((bounds.width - priv->border_width) / bounds.width, scale = MIN((bounds.width - priv->border_width) / bounds.width,
(bounds.height - priv->border_width) / bounds.height); (bounds.height - priv->border_width) / bounds.height);
category = eek_symbol_get_category (symbol); font = pango_font_description_copy (priv->font);
prop = get_text_property_for_category (category);
font = pango_font_description_copy (prop->ascii ?
priv->ascii_font :
priv->font);
pango_font_description_set_size (font, pango_font_description_set_size (font,
(gint)round(pango_font_description_get_size (font) * (gint)round(pango_font_description_get_size (font) * scale));
prop->scale * scale));
pango_layout_set_font_description (layout, font); pango_layout_set_font_description (layout, font);
pango_font_description_free (font); pango_font_description_free (font);
@ -579,8 +547,6 @@ eek_renderer_real_render_key_label (EekRenderer *self,
pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT); pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT);
pango_layout_set_width (layout, pango_layout_set_width (layout,
PANGO_SCALE * bounds.width * scale); PANGO_SCALE * bounds.width * scale);
if (prop->ellipses)
pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END);
} }
static void static void

View File

@ -36,10 +36,8 @@ eek_serializable_get_type (void)
{ {
static GType iface_type = 0; static GType iface_type = 0;
if (iface_type == 0) { if (iface_type == 0) {
static const GTypeInfo info = { static GTypeInfo info = {
sizeof (EekSerializableIface), .class_size = sizeof (EekSerializableIface)
NULL,
NULL,
}; };
iface_type = g_type_register_static (G_TYPE_INTERFACE, iface_type = g_type_register_static (G_TYPE_INTERFACE,
"EekSerializable", "EekSerializable",

View File

@ -28,14 +28,12 @@
#include "config.h" #include "config.h"
#include "eek-symbol.h" #include "eek-symbol.h"
#include "eek-serializable.h"
#include "eek-enumtypes.h" #include "eek-enumtypes.h"
enum { enum {
PROP_0, PROP_0,
PROP_NAME, PROP_NAME,
PROP_LABEL, PROP_LABEL,
PROP_CATEGORY,
PROP_MODIFIER_MASK, PROP_MODIFIER_MASK,
PROP_ICON_NAME, PROP_ICON_NAME,
PROP_TOOLTIP, PROP_TOOLTIP,
@ -46,60 +44,16 @@ typedef struct _EekSymbolPrivate
{ {
gchar *name; gchar *name;
gchar *label; gchar *label;
EekSymbolCategory category;
EekModifierType modifier_mask; EekModifierType modifier_mask;
gchar *icon_name; gchar *icon_name;
gchar *tooltip; gchar *tooltip;
} EekSymbolPrivate; } EekSymbolPrivate;
static void eek_serializable_iface_init (EekSerializableIface *iface);
G_DEFINE_TYPE_EXTENDED (EekSymbol, G_DEFINE_TYPE_EXTENDED (EekSymbol,
eek_symbol, eek_symbol,
G_TYPE_OBJECT, G_TYPE_OBJECT,
0, /* GTypeFlags */ 0, /* GTypeFlags */
G_ADD_PRIVATE (EekSymbol) G_ADD_PRIVATE (EekSymbol))
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
eek_serializable_iface_init))
static void
eek_symbol_real_serialize (EekSerializable *self,
GVariantBuilder *builder)
{
EekSymbolPrivate *priv = eek_symbol_get_instance_private (EEK_SYMBOL (self));
#define NOTNULL(s) ((s) != NULL ? (s) : "")
g_variant_builder_add (builder, "s", NOTNULL(priv->name));
g_variant_builder_add (builder, "s", NOTNULL(priv->label));
g_variant_builder_add (builder, "u", priv->category);
g_variant_builder_add (builder, "u", priv->modifier_mask);
g_variant_builder_add (builder, "s", NOTNULL(priv->icon_name));
g_variant_builder_add (builder, "s", NOTNULL(priv->tooltip));
#undef NOTNULL
}
static gsize
eek_symbol_real_deserialize (EekSerializable *self,
GVariant *variant,
gsize index)
{
EekSymbolPrivate *priv = eek_symbol_get_instance_private (EEK_SYMBOL (self));
g_variant_get_child (variant, index++, "s", &priv->name);
g_variant_get_child (variant, index++, "s", &priv->label);
g_variant_get_child (variant, index++, "u", &priv->category);
g_variant_get_child (variant, index++, "u", &priv->modifier_mask);
g_variant_get_child (variant, index++, "s", &priv->icon_name);
g_variant_get_child (variant, index++, "s", &priv->tooltip);
return index;
}
static void
eek_serializable_iface_init (EekSerializableIface *iface)
{
iface->serialize = eek_symbol_real_serialize;
iface->deserialize = eek_symbol_real_deserialize;
}
static void static void
eek_symbol_set_property (GObject *object, eek_symbol_set_property (GObject *object,
@ -114,9 +68,6 @@ eek_symbol_set_property (GObject *object,
case PROP_LABEL: case PROP_LABEL:
eek_symbol_set_label (EEK_SYMBOL(object), g_value_get_string (value)); eek_symbol_set_label (EEK_SYMBOL(object), g_value_get_string (value));
break; break;
case PROP_CATEGORY:
eek_symbol_set_category (EEK_SYMBOL(object), g_value_get_enum (value));
break;
case PROP_MODIFIER_MASK: case PROP_MODIFIER_MASK:
eek_symbol_set_modifier_mask (EEK_SYMBOL(object), eek_symbol_set_modifier_mask (EEK_SYMBOL(object),
g_value_get_flags (value)); g_value_get_flags (value));
@ -148,9 +99,6 @@ eek_symbol_get_property (GObject *object,
case PROP_LABEL: case PROP_LABEL:
g_value_set_string (value, eek_symbol_get_label (EEK_SYMBOL(object))); g_value_set_string (value, eek_symbol_get_label (EEK_SYMBOL(object)));
break; break;
case PROP_CATEGORY:
g_value_set_enum (value, eek_symbol_get_category (EEK_SYMBOL(object)));
break;
case PROP_MODIFIER_MASK: case PROP_MODIFIER_MASK:
g_value_set_flags (value, g_value_set_flags (value,
eek_symbol_get_modifier_mask (EEK_SYMBOL(object))); eek_symbol_get_modifier_mask (EEK_SYMBOL(object)));
@ -206,14 +154,6 @@ eek_symbol_class_init (EekSymbolClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_READWRITE); G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_LABEL, pspec); g_object_class_install_property (gobject_class, PROP_LABEL, pspec);
pspec = g_param_spec_enum ("category",
"Category",
"Category of the symbol",
EEK_TYPE_SYMBOL_CATEGORY,
EEK_SYMBOL_CATEGORY_UNKNOWN,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_CATEGORY, pspec);
pspec = g_param_spec_flags ("modifier-mask", pspec = g_param_spec_flags ("modifier-mask",
"Modifier mask", "Modifier mask",
"Modifier mask of the symbol", "Modifier mask of the symbol",
@ -239,11 +179,7 @@ eek_symbol_class_init (EekSymbolClass *klass)
static void static void
eek_symbol_init (EekSymbol *self) eek_symbol_init (EekSymbol *self)
{ {}
EekSymbolPrivate *priv = eek_symbol_get_instance_private (self);
priv->category = EEK_SYMBOL_CATEGORY_UNKNOWN;
}
/** /**
* eek_symbol_new: * eek_symbol_new:
@ -331,40 +267,6 @@ eek_symbol_get_label (EekSymbol *symbol)
return priv->label; return priv->label;
} }
/**
* eek_symbol_set_category:
* @symbol: an #EekSymbol
* @category: an #EekSymbolCategory
*
* Set symbol category of @symbol to @category.
*/
void
eek_symbol_set_category (EekSymbol *symbol,
EekSymbolCategory category)
{
g_return_if_fail (EEK_IS_SYMBOL(symbol));
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
priv->category = category;
}
/**
* eek_symbol_get_category:
* @symbol: an #EekSymbol
*
* Get symbol category of @symbol.
*/
EekSymbolCategory
eek_symbol_get_category (EekSymbol *symbol)
{
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), EEK_SYMBOL_CATEGORY_UNKNOWN);
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
return priv->category;
}
/** /**
* eek_symbol_set_modifier_mask: * eek_symbol_set_modifier_mask:
* @symbol: an #EekSymbol * @symbol: an #EekSymbol
@ -486,37 +388,3 @@ eek_symbol_get_tooltip (EekSymbol *symbol)
return priv->tooltip; return priv->tooltip;
} }
static const struct {
EekSymbolCategory category;
gchar *name;
} category_names[] = {
{ EEK_SYMBOL_CATEGORY_LETTER, "letter" },
{ EEK_SYMBOL_CATEGORY_FUNCTION, "function" },
{ EEK_SYMBOL_CATEGORY_KEYNAME, "keyname" },
{ EEK_SYMBOL_CATEGORY_USER0, "user0" },
{ EEK_SYMBOL_CATEGORY_USER1, "user1" },
{ EEK_SYMBOL_CATEGORY_USER2, "user2" },
{ EEK_SYMBOL_CATEGORY_USER3, "user3" },
{ EEK_SYMBOL_CATEGORY_USER4, "user4" },
{ EEK_SYMBOL_CATEGORY_UNKNOWN, NULL }
};
const gchar *
eek_symbol_category_get_name (EekSymbolCategory category)
{
gint i;
for (i = 0; i < G_N_ELEMENTS(category_names); i++)
if (category_names[i].category == category)
return category_names[i].name;
return NULL;
}
EekSymbolCategory
eek_symbol_category_from_name (const gchar *name)
{
gint i;
for (i = 0; i < G_N_ELEMENTS(category_names); i++)
if (g_strcmp0 (category_names[i].name, name) == 0)
return category_names[i].category;
return EEK_SYMBOL_CATEGORY_UNKNOWN;
}

View File

@ -29,35 +29,6 @@
G_BEGIN_DECLS G_BEGIN_DECLS
/**
* EekSymbolCategory:
* @EEK_SYMBOL_CATEGORY_LETTER: the symbol represents an alphabet letter
* @EEK_SYMBOL_CATEGORY_FUNCTION: the symbol represents a function
* @EEK_SYMBOL_CATEGORY_KEYNAME: the symbol does not have meaning but
* have a name
* @EEK_SYMBOL_CATEGORY_USER0: reserved for future use
* @EEK_SYMBOL_CATEGORY_USER1: reserved for future use
* @EEK_SYMBOL_CATEGORY_USER2: reserved for future use
* @EEK_SYMBOL_CATEGORY_USER3: reserved for future use
* @EEK_SYMBOL_CATEGORY_USER4: reserved for future use
* @EEK_SYMBOL_CATEGORY_UNKNOWN: used for error reporting
* @EEK_SYMBOL_CATEGORY_LAST: the last symbol category
*
* Category of the key symbols.
*/
typedef enum {
EEK_SYMBOL_CATEGORY_LETTER,
EEK_SYMBOL_CATEGORY_FUNCTION,
EEK_SYMBOL_CATEGORY_KEYNAME,
EEK_SYMBOL_CATEGORY_USER0,
EEK_SYMBOL_CATEGORY_USER1,
EEK_SYMBOL_CATEGORY_USER2,
EEK_SYMBOL_CATEGORY_USER3,
EEK_SYMBOL_CATEGORY_USER4,
EEK_SYMBOL_CATEGORY_UNKNOWN,
EEK_SYMBOL_CATEGORY_LAST = EEK_SYMBOL_CATEGORY_UNKNOWN
} EekSymbolCategory;
#define EEK_TYPE_SYMBOL (eek_symbol_get_type()) #define EEK_TYPE_SYMBOL (eek_symbol_get_type())
G_DECLARE_DERIVABLE_TYPE(EekSymbol, eek_symbol, EEK, SYMBOL, GObject) G_DECLARE_DERIVABLE_TYPE(EekSymbol, eek_symbol, EEK, SYMBOL, GObject)
@ -78,9 +49,6 @@ const gchar *eek_symbol_get_name (EekSymbol *symbol);
void eek_symbol_set_label (EekSymbol *symbol, void eek_symbol_set_label (EekSymbol *symbol,
const gchar *label); const gchar *label);
const gchar *eek_symbol_get_label (EekSymbol *symbol); const gchar *eek_symbol_get_label (EekSymbol *symbol);
void eek_symbol_set_category (EekSymbol *symbol,
EekSymbolCategory category);
EekSymbolCategory eek_symbol_get_category (EekSymbol *symbol);
EekModifierType eek_symbol_get_modifier_mask (EekSymbol *symbol); EekModifierType eek_symbol_get_modifier_mask (EekSymbol *symbol);
void eek_symbol_set_modifier_mask (EekSymbol *symbol, void eek_symbol_set_modifier_mask (EekSymbol *symbol,
EekModifierType mask); EekModifierType mask);
@ -92,9 +60,6 @@ void eek_symbol_set_tooltip (EekSymbol *symbol,
const gchar *tooltip); const gchar *tooltip);
const gchar * eek_symbol_get_tooltip (EekSymbol *symbol); const gchar * eek_symbol_get_tooltip (EekSymbol *symbol);
const gchar *eek_symbol_category_get_name (EekSymbolCategory category);
EekSymbolCategory eek_symbol_category_from_name (const gchar *name);
G_END_DECLS G_END_DECLS
#endif /* EEK_SYMBOL_H */ #endif /* EEK_SYMBOL_H */

View File

@ -165,7 +165,6 @@ eek_text_new (const gchar *text)
{ {
return g_object_new (EEK_TYPE_TEXT, return g_object_new (EEK_TYPE_TEXT,
"label", text, "label", text,
"category", EEK_SYMBOL_CATEGORY_FUNCTION,
"text", text, "text", text,
NULL); NULL);
} }

View File

@ -568,7 +568,6 @@ struct _SymbolsParseData {
gchar *label; gchar *label;
gchar *icon; gchar *icon;
gchar *tooltip; gchar *tooltip;
EekSymbolCategory category;
guint keyval; guint keyval;
gint groups; gint groups;
}; };
@ -681,13 +680,6 @@ symbols_start_element_callback (GMarkupParseContext *pcontext,
"tooltip"); "tooltip");
if (attribute != NULL) if (attribute != NULL)
data->tooltip = g_strdup (attribute); data->tooltip = g_strdup (attribute);
attribute = get_attribute (attribute_names, attribute_values,
"category");
if (attribute != NULL)
data->category = strtoul (attribute, NULL, 10);
else
data->category = EEK_SYMBOL_CATEGORY_KEYNAME;
} }
out: out:
@ -755,7 +747,6 @@ symbols_end_element_callback (GMarkupParseContext *pcontext,
symbol = EEK_SYMBOL(eek_text_new (text)); symbol = EEK_SYMBOL(eek_text_new (text));
} else { } else {
symbol = eek_symbol_new (text); symbol = eek_symbol_new (text);
eek_symbol_set_category (symbol, EEK_SYMBOL_CATEGORY_KEYNAME);
} }
if (data->label) { if (data->label) {

View File

@ -33,7 +33,7 @@ else:
table = dict() table = dict()
for line in in_stream: for line in in_stream:
match = re.match(r'\s*(0x[0-9A-F]+)\s+(\S*)\s+(\S*)', line, re.I) match = re.match(r'\s*(0x[0-9A-F]+)\s+"(.*)"\s+(\S*)', line, re.I)
if match: if match:
table[int(match.group(1), 16)] = (match.group(2), match.group(3)) table[int(match.group(1), 16)] = (match.group(2), match.group(3))
@ -42,8 +42,8 @@ sys.stdout.write("static const EekKeysymEntry %s[] = {\n" %
for index, (keysym, (l, c)) in enumerate([(keysym, table[keysym]) for index, (keysym, (l, c)) in enumerate([(keysym, table[keysym])
for keysym in sorted(table.keys())]): for keysym in sorted(table.keys())]):
sys.stdout.write(" { 0x%X, %s, %s }" % sys.stdout.write(" { 0x%X, \"%s\" }" %
(keysym, l, c)) (keysym, l))
if index < len(table) - 1: if index < len(table) - 1:
sys.stdout.write(",") sys.stdout.write(",")
sys.stdout.write("\n") sys.stdout.write("\n")

View File

@ -16,7 +16,7 @@ add_project_arguments(
'-Werror=implicit-function-declaration', '-Werror=implicit-function-declaration',
'-Werror=implicit-fallthrough=3', '-Werror=implicit-fallthrough=3',
'-Werror=maybe-uninitialized', '-Werror=maybe-uninitialized',
# '-Werror=missing-field-initializers', // fix eek-unicode-keysym-entries first '-Werror=missing-field-initializers',
], ],
language: 'c' language: 'c'
) )