Break out symbol handling into Rust
This commit is contained in:
@ -508,11 +508,3 @@ void eek_key_set_pressed(EekKey *key, gboolean value)
|
||||
|
||||
priv->is_pressed = value;
|
||||
}
|
||||
|
||||
gboolean
|
||||
eek_key_has_label(EekKey *key)
|
||||
{
|
||||
EekSymbol *symbol = eek_key_get_symbol(key);
|
||||
return (eek_symbol_get_label(symbol) != NULL) ||
|
||||
(eek_symbol_get_icon_name(symbol) != NULL);
|
||||
}
|
||||
|
||||
@ -82,7 +82,5 @@ gboolean eek_key_is_locked (EekKey *key);
|
||||
void eek_key_set_pressed (EekKey *key,
|
||||
gboolean value);
|
||||
|
||||
gboolean eek_key_has_label (EekKey *key);
|
||||
|
||||
G_END_DECLS
|
||||
#endif /* EEK_KEY_H */
|
||||
|
||||
@ -305,7 +305,7 @@ void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key, guint32 timestam
|
||||
if (!symbol)
|
||||
return;
|
||||
|
||||
EekModifierType modifier = eek_symbol_get_modifier_mask (symbol);
|
||||
EekModifierType modifier = squeek_symbol_get_modifier_mask (symbol);
|
||||
if (priv->modifier_behavior == EEK_MODIFIER_BEHAVIOR_NONE) {
|
||||
set_modifiers_with_key (keyboard, key, priv->modifiers | modifier);
|
||||
set_level_from_modifiers (keyboard, key);
|
||||
@ -336,12 +336,10 @@ void eek_keyboard_release_key( EekKeyboard *keyboard,
|
||||
if (!symbol)
|
||||
return;
|
||||
|
||||
EekModifierType modifier = eek_symbol_get_modifier_mask (symbol);
|
||||
|
||||
if (!symbol)
|
||||
return;
|
||||
|
||||
modifier = eek_symbol_get_modifier_mask (symbol);
|
||||
EekModifierType modifier = squeek_symbol_get_modifier_mask (symbol);
|
||||
switch (priv->modifier_behavior) {
|
||||
case EEK_MODIFIER_BEHAVIOR_NONE:
|
||||
set_modifiers_with_key (keyboard, key, priv->modifiers & ~modifier);
|
||||
@ -810,11 +808,13 @@ eek_keyboard_get_keymap(EekKeyboard *keyboard)
|
||||
|
||||
gchar *groups[2];
|
||||
for (i = 0, j = 0; i < 2; ++i, j += 2) {
|
||||
if (syms[j] && syms[j + 1])
|
||||
groups[i] = g_strjoin(", ", eek_symbol_get_name(syms[j]),
|
||||
eek_symbol_get_name(syms[j + 1]),
|
||||
if (syms[j] && syms[j + 1]) {
|
||||
char *tleft = squeek_symbol_get_name(syms[j]);
|
||||
char *tright = squeek_symbol_get_name(syms[j + 1]);
|
||||
groups[i] = g_strjoin(", ", tleft,
|
||||
tright,
|
||||
NULL);
|
||||
else
|
||||
} else
|
||||
groups[i] = "";
|
||||
}
|
||||
|
||||
|
||||
@ -228,6 +228,17 @@ eek_keysym_new (guint xkeysym)
|
||||
return eek_keysym_new_with_modifier (xkeysym, get_modifier_mask (xkeysym));
|
||||
}
|
||||
|
||||
guint32
|
||||
eek_keysym_from_name (const gchar *name)
|
||||
{
|
||||
for (uint i = 0; i < G_N_ELEMENTS(xkeysym_keysym_entries); i++) {
|
||||
if (g_strcmp0 (xkeysym_keysym_entries[i].name, name) == 0) {
|
||||
return xkeysym_keysym_entries[i].xkeysym;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_keysym_new_from_name:
|
||||
* @name: an X keysym name
|
||||
@ -237,9 +248,10 @@ eek_keysym_new (guint xkeysym)
|
||||
EekSymbol*
|
||||
eek_keysym_new_from_name (const gchar *name)
|
||||
{
|
||||
for (uint i = 0; i < G_N_ELEMENTS(xkeysym_keysym_entries); i++)
|
||||
if (g_strcmp0 (xkeysym_keysym_entries[i].name, name) == 0)
|
||||
return eek_keysym_new (xkeysym_keysym_entries[i].xkeysym);
|
||||
guint32 xkeysym = eek_keysym_from_name(name);
|
||||
if (xkeysym != 0) {
|
||||
return eek_keysym_new(xkeysym);
|
||||
}
|
||||
|
||||
EekSymbol *ret = eek_symbol_new(name);
|
||||
eek_symbol_set_label(ret, name);
|
||||
|
||||
@ -40,6 +40,7 @@ G_BEGIN_DECLS
|
||||
EekSymbol *eek_keysym_new (guint xkeysym);
|
||||
guint eek_keysym_get_xkeysym (EekSymbol *keysym);
|
||||
|
||||
guint32 eek_keysym_from_name (const gchar *name);
|
||||
EekSymbol *eek_keysym_new_from_name (const gchar *name);
|
||||
EekSymbol *eek_keysym_new_with_modifier (guint xkeysym,
|
||||
EekModifierType modifier_mask);
|
||||
|
||||
@ -231,9 +231,6 @@ render_key (EekRenderer *self,
|
||||
PangoRectangle extents = { 0, };
|
||||
EekColor foreground;
|
||||
|
||||
if (!eek_key_has_label(key))
|
||||
return;
|
||||
|
||||
oref = eek_key_get_oref (key);
|
||||
outline = eek_keyboard_get_outline (priv->keyboard, oref);
|
||||
if (outline == NULL)
|
||||
@ -284,11 +281,11 @@ render_key (EekRenderer *self,
|
||||
if (!symbol)
|
||||
return;
|
||||
|
||||
if (eek_symbol_get_icon_name (symbol)) {
|
||||
if (squeek_symbol_get_icon_name (symbol)) {
|
||||
gint scale = priv->scale_factor;
|
||||
cairo_surface_t *icon_surface =
|
||||
eek_renderer_get_icon_surface (self,
|
||||
eek_symbol_get_icon_name (symbol),
|
||||
squeek_symbol_get_icon_name (symbol),
|
||||
16 / priv->scale,
|
||||
scale);
|
||||
if (icon_surface) {
|
||||
@ -397,7 +394,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
||||
if (!symbol)
|
||||
return;
|
||||
|
||||
label = eek_symbol_get_label (symbol);
|
||||
label = squeek_symbol_get_label (symbol);
|
||||
if (!label)
|
||||
return;
|
||||
|
||||
|
||||
@ -211,8 +211,6 @@ static void
|
||||
eek_section_finalize (GObject *object)
|
||||
{
|
||||
EekSection *self = EEK_SECTION (object);
|
||||
EekSectionPrivate *priv = (EekSectionPrivate*)eek_section_get_instance_private (self);
|
||||
|
||||
G_OBJECT_CLASS (eek_section_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
@ -512,11 +510,6 @@ keycounter (EekElement *element, gpointer user_data)
|
||||
{
|
||||
EekKey *key = EEK_KEY(element);
|
||||
|
||||
/* Skip keys without labels for the current level. This causes those
|
||||
keys to be hidden in the visible layout. */
|
||||
if (!eek_key_has_label(key))
|
||||
return;
|
||||
|
||||
struct keys_info *data = user_data;
|
||||
data->count++;
|
||||
EekBounds key_bounds = {0};
|
||||
@ -532,10 +525,6 @@ keyplacer(EekElement *element, gpointer user_data)
|
||||
{
|
||||
EekKey *key = EEK_KEY(element);
|
||||
|
||||
/* Skip keys without labels for the current level. */
|
||||
if (!eek_key_has_label(key))
|
||||
return;
|
||||
|
||||
double *current_offset = user_data;
|
||||
EekBounds key_bounds = {0};
|
||||
eek_element_get_bounds(element, &key_bounds);
|
||||
|
||||
@ -30,42 +30,15 @@
|
||||
#include "eek-symbol.h"
|
||||
#include "eek-enumtypes.h"
|
||||
|
||||
void
|
||||
eek_symbol_destroy (EekSymbol *priv)
|
||||
{
|
||||
g_free (priv->name);
|
||||
g_free (priv->label);
|
||||
g_free (priv->icon_name);
|
||||
g_free (priv->tooltip);
|
||||
g_free(priv->text);
|
||||
g_free(priv);
|
||||
}
|
||||
|
||||
EekSymbol *
|
||||
eek_symbol_new (const gchar *name)
|
||||
{
|
||||
EekSymbol *self = g_new0(EekSymbol, 1);
|
||||
eek_symbol_set_name(self, name);
|
||||
self->name = g_strdup (name);
|
||||
self->category = EEK_SYMBOL_CATEGORY_UNKNOWN;
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
eek_symbol_set_name (EekSymbol *symbol,
|
||||
const gchar *name)
|
||||
{
|
||||
g_free (symbol->name);
|
||||
symbol->name = g_strdup (name);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
eek_symbol_get_name (EekSymbol *symbol)
|
||||
{
|
||||
if (symbol->name == NULL || *symbol->name == '\0')
|
||||
return NULL;
|
||||
return symbol->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_symbol_set_label:
|
||||
* @symbol: an #EekSymbol
|
||||
@ -81,20 +54,6 @@ eek_symbol_set_label (EekSymbol *symbol,
|
||||
symbol->label = g_strdup (label);
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_symbol_get_label:
|
||||
* @symbol: an #EekSymbol
|
||||
*
|
||||
* Get the label text of @symbol.
|
||||
*/
|
||||
const gchar *
|
||||
eek_symbol_get_label (EekSymbol *symbol)
|
||||
{
|
||||
if (symbol->label == NULL || *symbol->label == '\0')
|
||||
return NULL;
|
||||
return symbol->label;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_symbol_set_modifier_mask:
|
||||
* @symbol: an #EekSymbol
|
||||
@ -118,15 +77,10 @@ eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
||||
EekModifierType
|
||||
eek_symbol_get_modifier_mask (EekSymbol *symbol)
|
||||
{
|
||||
return 0;
|
||||
return symbol->modifier_mask;
|
||||
}
|
||||
|
||||
gboolean
|
||||
eek_symbol_is_modifier (EekSymbol *symbol)
|
||||
{
|
||||
return eek_symbol_get_modifier_mask (symbol) != 0;
|
||||
}
|
||||
|
||||
void
|
||||
eek_symbol_set_icon_name (EekSymbol *symbol,
|
||||
const gchar *icon_name)
|
||||
@ -138,9 +92,7 @@ eek_symbol_set_icon_name (EekSymbol *symbol,
|
||||
const gchar *
|
||||
eek_symbol_get_icon_name (EekSymbol *symbol)
|
||||
{
|
||||
if (symbol->icon_name == NULL || *symbol->icon_name == '\0')
|
||||
return NULL;
|
||||
return symbol->icon_name;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
@ -154,6 +106,7 @@ eek_symbol_set_tooltip (EekSymbol *symbol,
|
||||
const gchar *
|
||||
eek_symbol_get_tooltip (EekSymbol *symbol)
|
||||
{
|
||||
return NULL;
|
||||
if (symbol->tooltip == NULL || *symbol->tooltip == '\0')
|
||||
return NULL;
|
||||
return symbol->tooltip;
|
||||
|
||||
@ -26,6 +26,8 @@
|
||||
#define EEK_SYMBOL_H 1
|
||||
|
||||
#include "eek-types.h"
|
||||
#include "src/symbol.h"
|
||||
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -91,7 +93,6 @@ EekSymbolCategory eek_symbol_get_category (EekSymbol *symbol);
|
||||
EekModifierType eek_symbol_get_modifier_mask (EekSymbol *symbol);
|
||||
void eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
||||
EekModifierType mask);
|
||||
gboolean eek_symbol_is_modifier (EekSymbol *symbol);
|
||||
void eek_symbol_set_icon_name (EekSymbol *symbol,
|
||||
const gchar *icon_name);
|
||||
const gchar *eek_symbol_get_icon_name (EekSymbol *symbol);
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#include "eek-key.h"
|
||||
#include "eek-keysym.h"
|
||||
#include "eek-text.h"
|
||||
#include "src/symbol.h"
|
||||
|
||||
#include "squeekboard-resources.h"
|
||||
|
||||
@ -732,38 +733,25 @@ symbols_end_element_callback (GMarkupParseContext *pcontext,
|
||||
if (g_strcmp0 (element_name, "symbol") == 0 ||
|
||||
g_strcmp0 (element_name, "keysym") == 0 ||
|
||||
g_strcmp0 (element_name, "text") == 0) {
|
||||
EekSymbol *symbol;
|
||||
|
||||
if (g_strcmp0 (element_name, "keysym") == 0) {
|
||||
EekSymbol *keysym;
|
||||
if (data->keyval != EEK_INVALID_KEYSYM)
|
||||
keysym = eek_keysym_new (data->keyval);
|
||||
else
|
||||
keysym = eek_keysym_new_from_name (text);
|
||||
symbol = keysym;
|
||||
} else if (g_strcmp0 (element_name, "text") == 0) {
|
||||
symbol = eek_text_new (text);
|
||||
} else {
|
||||
symbol = eek_symbol_new (text);
|
||||
}
|
||||
|
||||
if (data->label) {
|
||||
eek_symbol_set_label (symbol, data->label);
|
||||
g_free (data->label);
|
||||
data->label = NULL;
|
||||
}
|
||||
if (data->icon) {
|
||||
eek_symbol_set_icon_name (symbol, data->icon);
|
||||
g_free (data->icon);
|
||||
data->icon = NULL;
|
||||
}
|
||||
if (data->tooltip) {
|
||||
eek_symbol_set_tooltip (symbol, data->tooltip);
|
||||
g_free (data->tooltip);
|
||||
data->tooltip = NULL;
|
||||
}
|
||||
|
||||
data->symbols = g_slist_prepend (data->symbols, symbol);
|
||||
data->symbols = g_slist_prepend (
|
||||
data->symbols,
|
||||
squeek_symbol_new(
|
||||
element_name,
|
||||
text,
|
||||
data->keyval,
|
||||
data->label,
|
||||
data->icon,
|
||||
data->tooltip
|
||||
)
|
||||
);
|
||||
data->keyval = 0;
|
||||
g_free(data->label);
|
||||
data->label = NULL;
|
||||
g_free(data->icon);
|
||||
data->icon = NULL;
|
||||
g_free(data->tooltip);
|
||||
data->tooltip = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user