Compare commits
3 Commits
pureos/1.1
...
font_size
| Author | SHA1 | Date | |
|---|---|---|---|
| d5dc5c0ddf | |||
| 172ed08d40 | |||
| f27fade744 |
@ -107,7 +107,6 @@ create_keyboard_surface_key_callback (EekElement *element,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
CreateKeyboardSurfaceCallbackData *data = user_data;
|
CreateKeyboardSurfaceCallbackData *data = user_data;
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
|
|
||||||
cairo_save (data->cr);
|
cairo_save (data->cr);
|
||||||
@ -130,7 +129,6 @@ create_keyboard_surface_section_callback (EekElement *element,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
CreateKeyboardSurfaceCallbackData *data = user_data;
|
CreateKeyboardSurfaceCallbackData *data = user_data;
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
gint angle;
|
gint angle;
|
||||||
|
|
||||||
@ -332,91 +330,6 @@ render_key_outline (EekRenderer *renderer,
|
|||||||
eek_outline_free (outline);
|
eek_outline_free (outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _CalculateFontSizeCallbackData {
|
|
||||||
gdouble size;
|
|
||||||
gboolean ascii;
|
|
||||||
EekRenderer *renderer;
|
|
||||||
const PangoFontDescription *base_font;
|
|
||||||
};
|
|
||||||
typedef struct _CalculateFontSizeCallbackData CalculateFontSizeCallbackData;
|
|
||||||
|
|
||||||
static void
|
|
||||||
calculate_font_size_key_callback (EekElement *element, gpointer user_data)
|
|
||||||
{
|
|
||||||
CalculateFontSizeCallbackData *data = user_data;
|
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
|
||||||
gdouble sx, sy;
|
|
||||||
PangoFontDescription *font;
|
|
||||||
PangoRectangle extents = { 0, };
|
|
||||||
PangoLayout *layout;
|
|
||||||
gdouble size;
|
|
||||||
EekBounds bounds;
|
|
||||||
const gchar *label = NULL;
|
|
||||||
|
|
||||||
if (data->ascii)
|
|
||||||
label = "M";
|
|
||||||
else {
|
|
||||||
EekSymbol *symbol;
|
|
||||||
|
|
||||||
symbol = eek_key_get_symbol (EEK_KEY(element));
|
|
||||||
if (symbol &&
|
|
||||||
eek_symbol_get_category (symbol) == EEK_SYMBOL_CATEGORY_LETTER)
|
|
||||||
label = eek_symbol_get_label (symbol);
|
|
||||||
if (!label)
|
|
||||||
label = "M";
|
|
||||||
}
|
|
||||||
|
|
||||||
font = pango_font_description_copy (data->base_font);
|
|
||||||
|
|
||||||
eek_element_get_bounds (element, &bounds);
|
|
||||||
size = eek_bounds_long_side (&bounds) * PANGO_SCALE;
|
|
||||||
pango_font_description_set_size (font, size);
|
|
||||||
layout = pango_layout_new (priv->pcontext);
|
|
||||||
pango_layout_set_font_description (layout, font);
|
|
||||||
pango_font_description_free (font);
|
|
||||||
|
|
||||||
pango_layout_set_text (layout, label, -1);
|
|
||||||
|
|
||||||
pango_layout_get_extents (layout, NULL, &extents);
|
|
||||||
g_object_unref (layout);
|
|
||||||
|
|
||||||
sx = sy = 1.0;
|
|
||||||
if (extents.width > bounds.width * PANGO_SCALE)
|
|
||||||
sx = bounds.width * PANGO_SCALE / extents.width;
|
|
||||||
if (extents.height > bounds.height * PANGO_SCALE)
|
|
||||||
sy = bounds.height * PANGO_SCALE / extents.height;
|
|
||||||
|
|
||||||
size *= MIN(sx, sy);
|
|
||||||
if (size < data->size)
|
|
||||||
data->size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
calculate_font_size_section_callback (EekElement *element, gpointer user_data)
|
|
||||||
{
|
|
||||||
eek_container_foreach_child (EEK_CONTAINER(element),
|
|
||||||
calculate_font_size_key_callback,
|
|
||||||
user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gdouble
|
|
||||||
calculate_font_size (EekRenderer *renderer,
|
|
||||||
const PangoFontDescription *base_font,
|
|
||||||
gboolean ascii)
|
|
||||||
{
|
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
|
||||||
CalculateFontSizeCallbackData data;
|
|
||||||
|
|
||||||
data.size = G_MAXDOUBLE;
|
|
||||||
data.ascii = ascii;
|
|
||||||
data.renderer = renderer;
|
|
||||||
data.base_font = base_font;
|
|
||||||
eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
|
|
||||||
calculate_font_size_section_callback,
|
|
||||||
&data);
|
|
||||||
return data.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
render_key (EekRenderer *self,
|
render_key (EekRenderer *self,
|
||||||
cairo_t *cr,
|
cairo_t *cr,
|
||||||
@ -576,9 +489,8 @@ get_text_property_for_category (EekSymbolCategory category)
|
|||||||
{ EEK_SYMBOL_CATEGORY_FUNCTION, TRUE, 0.5, FALSE },
|
{ EEK_SYMBOL_CATEGORY_FUNCTION, TRUE, 0.5, FALSE },
|
||||||
{ EEK_SYMBOL_CATEGORY_KEYNAME, TRUE, 0.5, TRUE }
|
{ EEK_SYMBOL_CATEGORY_KEYNAME, TRUE, 0.5, TRUE }
|
||||||
};
|
};
|
||||||
gint i;
|
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS(props); i++)
|
for (uint i = 0; i < G_N_ELEMENTS(props); i++)
|
||||||
if (props[i].category == category)
|
if (props[i].category == category)
|
||||||
return &props[i];
|
return &props[i];
|
||||||
|
|
||||||
@ -618,13 +530,16 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
|||||||
base_font = eek_theme_node_get_font (theme_node);
|
base_font = eek_theme_node_get_font (theme_node);
|
||||||
else
|
else
|
||||||
base_font = pango_context_get_font_description (priv->pcontext);
|
base_font = pango_context_get_font_description (priv->pcontext);
|
||||||
ascii_size = calculate_font_size (self, base_font, TRUE);
|
// FIXME: Base font size on the same size unit used for button sizing,
|
||||||
|
// and make the default about 1/3 of the current row height
|
||||||
|
ascii_size = 30000.0;
|
||||||
priv->ascii_font = pango_font_description_copy (base_font);
|
priv->ascii_font = pango_font_description_copy (base_font);
|
||||||
pango_font_description_set_size (priv->ascii_font, ascii_size);
|
pango_font_description_set_size (priv->ascii_font,
|
||||||
|
(gint)round(ascii_size));
|
||||||
|
|
||||||
size = calculate_font_size (self, base_font, FALSE);
|
size = 30000.0;
|
||||||
priv->font = pango_font_description_copy (base_font);
|
priv->font = pango_font_description_copy (base_font);
|
||||||
pango_font_description_set_size (priv->font, size * 0.6);
|
pango_font_description_set_size (priv->font, (gint)round(size * 0.6));
|
||||||
}
|
}
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
|
eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
|
||||||
@ -638,8 +553,8 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
|||||||
priv->ascii_font :
|
priv->ascii_font :
|
||||||
priv->font);
|
priv->font);
|
||||||
pango_font_description_set_size (font,
|
pango_font_description_set_size (font,
|
||||||
pango_font_description_get_size (font) *
|
(gint)round(pango_font_description_get_size (font) *
|
||||||
prop->scale * 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);
|
||||||
|
|
||||||
@ -972,7 +887,6 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
|||||||
EekBounds section_bounds, keyboard_bounds;
|
EekBounds section_bounds, keyboard_bounds;
|
||||||
gint angle = 0;
|
gint angle = 0;
|
||||||
EekPoint points[4], min, max;
|
EekPoint points[4], min, max;
|
||||||
gint i;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (EEK_IS_KEY(key));
|
g_return_if_fail (EEK_IS_KEY(key));
|
||||||
@ -1006,7 +920,7 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
|||||||
|
|
||||||
min = points[2];
|
min = points[2];
|
||||||
max = points[0];
|
max = points[0];
|
||||||
for (i = 0; i < G_N_ELEMENTS(points); i++) {
|
for (uint i = 0; i < G_N_ELEMENTS(points); i++) {
|
||||||
eek_point_rotate (&points[i], angle);
|
eek_point_rotate (&points[i], angle);
|
||||||
if (points[i].x < min.x)
|
if (points[i].x < min.x)
|
||||||
min.x = points[i].x;
|
min.x = points[i].x;
|
||||||
@ -1248,7 +1162,6 @@ find_key_by_position_key_callback (EekElement *element,
|
|||||||
FindKeyByPositionCallbackData *data = user_data;
|
FindKeyByPositionCallbackData *data = user_data;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
EekPoint points[4];
|
EekPoint points[4];
|
||||||
gint i;
|
|
||||||
gboolean b1, b2, b3;
|
gboolean b1, b2, b3;
|
||||||
|
|
||||||
eek_element_get_bounds (element, &bounds);
|
eek_element_get_bounds (element, &bounds);
|
||||||
@ -1262,9 +1175,7 @@ find_key_by_position_key_callback (EekElement *element,
|
|||||||
points[3].x = points[0].x;
|
points[3].x = points[0].x;
|
||||||
points[3].y = points[2].y;
|
points[3].y = points[2].y;
|
||||||
|
|
||||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
for (uint i = 0; i < G_N_ELEMENTS(points); i++) {
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS(points); i++) {
|
|
||||||
eek_point_rotate (&points[i], data->angle);
|
eek_point_rotate (&points[i], data->angle);
|
||||||
points[i].x += data->origin.x;
|
points[i].x += data->origin.x;
|
||||||
points[i].y += data->origin.y;
|
points[i].y += data->origin.y;
|
||||||
|
|||||||
Reference in New Issue
Block a user