summaryrefslogtreecommitdiff
path: root/endless
diff options
context:
space:
mode:
authorPatrick Ward <patrick@endlessm.com>2014-01-17 11:13:01 -0800
committerPatrick Ward <patrick@endlessm.com>2014-01-29 10:27:44 -0800
commitb71ccdd0f0718fdea5da42108afcf194507a84fd (patch)
tree4222bdf940504d407fb05424586ccbe8e03f502a /endless
parentb124b623944c574d2325589cd20198d2a79bb993 (diff)
Add publicly available font size property
Added a publicly available calculated font size property. This allows Endless applications to perform actions based on the calculated font size of an EosWindow. In particular, the WebHelper application now uses the property to update the 'default-font-size' property of a WebSettings object. [endlessm/eos-sdk#484]
Diffstat (limited to 'endless')
-rw-r--r--endless/eoswindow.c53
-rw-r--r--endless/eoswindow.h37
2 files changed, 67 insertions, 23 deletions
diff --git a/endless/eoswindow.c b/endless/eoswindow.c
index bbe2422..7b89312 100644
--- a/endless/eoswindow.c
+++ b/endless/eoswindow.c
@@ -49,11 +49,15 @@
* The default minimum font size under which a font will never scale can be set
* by #EosWindow:font-scaling-min-font-size.
*
+ * The calculated minimum font size by which children widgets will scale and can
+ * be retrieved by #EosWindow:font-scaling-calculated-font-size. This property is
+ * only readable and is only set by #EosWindow internally.
+ *
* For instance, supose we have a default font size of 12px, a default window size
- * of 720px, and a window allocation of 360px. The calculated base pixel size
+ * of 720px, and a window allocation of 360px. The calculated font pixel size
* will be 12px * (360px / 720px) = 6px. A corresponding CSS font-size of 1em will
* be equivalent to 6 px. A CSS font-size of 0.5em will be equivalent to 3px. If the
- * window is resized to a height of 720px, then the calculated base pixel size will
+ * window is resized to a height of 720px, then the calculated pixel size will
* be 12px, and the CSS font-size of 1em will be equivalent to 12px. A CSS
* font-size of 0.5em will be equivalent to 6px. If the minimum font size is set
* to 12px, then the font-size will be forced to 12px, ignoring the calculated font
@@ -103,6 +107,7 @@ typedef struct {
gint font_scaling_default_size;
gint font_scaling_default_window_size;
gint font_scaling_min_font_size;
+ gdouble font_scaling_calculated_font_size;
/* For keeping track of what to display alongside the current page */
GtkWidget *current_page;
@@ -122,6 +127,7 @@ enum
PROP_FONT_SCALING_DEFAULT_SIZE,
PROP_FONT_SCALING_DEFAULT_WINDOW_SIZE,
PROP_FONT_SCALING_MIN_FONT_SIZE,
+ PROP_FONT_SCALING_CALCULATED_FONT_SIZE,
NPROPS
};
@@ -429,6 +435,10 @@ eos_window_get_property (GObject *object,
g_value_set_int (value, priv->font_scaling_min_font_size);
break;
+ case PROP_FONT_SCALING_CALCULATED_FONT_SIZE:
+ g_value_set_double (value, priv->font_scaling_calculated_font_size);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -581,15 +591,15 @@ eos_window_size_allocate (GtkWidget *window, GtkAllocation *allocation)
if (priv->font_scaling_active)
{
GtkStyleProvider *provider = GTK_STYLE_PROVIDER (priv->font_size_provider);
- gdouble base_pixel_size = (gdouble) priv->font_scaling_default_size *
+ priv->font_scaling_calculated_font_size = (gdouble) priv->font_scaling_default_size *
((gdouble) allocation->height / (gdouble) priv->font_scaling_default_window_size);
- if (base_pixel_size < priv->font_scaling_min_font_size)
- base_pixel_size = priv->font_scaling_min_font_size;
+ if (priv->font_scaling_calculated_font_size < priv->font_scaling_min_font_size)
+ priv->font_scaling_calculated_font_size = priv->font_scaling_min_font_size;
GError *error = NULL;
- gchar *font_size_css = g_strdup_printf (FONT_SIZE_TEMPLATE, base_pixel_size);
+ gchar *font_size_css = g_strdup_printf (FONT_SIZE_TEMPLATE, priv->font_scaling_calculated_font_size);
GdkScreen *screen = gdk_screen_get_default ();
gtk_style_context_remove_provider_for_screen (screen, provider);
@@ -700,6 +710,19 @@ eos_window_class_init (EosWindowClass *klass)
8,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+ /**
+ * EosWindow:font-scaling-calculated-font-size:
+ *
+ * The calculated font-size by which children widgets scale. Units are in pixels.
+ */
+ eos_window_props[PROP_FONT_SCALING_CALCULATED_FONT_SIZE] =
+ g_param_spec_double ("font-scaling-calculated-font-size", "Font scaling calculated size",
+ "This is the calculated font-size by which children widgets scale",
+ 1,
+ G_MAXDOUBLE,
+ 12,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (object_class, NPROPS, eos_window_props);
}
@@ -1057,3 +1080,21 @@ eos_window_set_font_scaling_min_font_size (EosWindow *self,
EosWindowPrivate *priv = eos_window_get_instance_private (self);
priv->font_scaling_min_font_size = new_min_font_size;
}
+
+/**
+ * eos_window_get_font_scaling_calculated_font_size:
+ * @self: the window
+ *
+ * See #EosWindow:font-scaling-calculated-font-size for details.
+ *
+ * Returns: the calculated font size by which the font size of children widgets
+ * will scale.
+ */
+gdouble
+eos_window_get_font_scaling_calculated_font_size (EosWindow *self)
+{
+ g_return_val_if_fail (self != NULL && EOS_IS_WINDOW (self), -1);
+ EosWindowPrivate *priv = eos_window_get_instance_private (self);
+
+ return priv->font_scaling_calculated_font_size;
+}
diff --git a/endless/eoswindow.h b/endless/eoswindow.h
index 317f0c5..af39160 100644
--- a/endless/eoswindow.h
+++ b/endless/eoswindow.h
@@ -59,45 +59,48 @@ struct _EosWindowClass
};
EOS_SDK_ALL_API_VERSIONS
-GType eos_window_get_type (void) G_GNUC_CONST;
+GType eos_window_get_type (void) G_GNUC_CONST;
EOS_SDK_ALL_API_VERSIONS
-GtkWidget *eos_window_new (EosApplication *application);
+GtkWidget *eos_window_new (EosApplication *application);
EOS_SDK_ALL_API_VERSIONS
-EosPageManager *eos_window_get_page_manager (EosWindow *self);
+EosPageManager *eos_window_get_page_manager (EosWindow *self);
EOS_SDK_ALL_API_VERSIONS
-void eos_window_set_page_manager (EosWindow *self,
- EosPageManager *page_manager);
+void eos_window_set_page_manager (EosWindow *self,
+ EosPageManager *page_manager);
EOS_SDK_ALL_API_VERSIONS
-gboolean eos_window_get_font_scaling_active (EosWindow *self);
+gboolean eos_window_get_font_scaling_active (EosWindow *self);
EOS_SDK_ALL_API_VERSIONS
-void eos_window_set_font_scaling_active (EosWindow *self,
- gboolean is_scaling);
+void eos_window_set_font_scaling_active (EosWindow *self,
+ gboolean is_scaling);
EOS_SDK_ALL_API_VERSIONS
-gint eos_window_get_font_scaling_default_size (EosWindow *self);
+gint eos_window_get_font_scaling_default_size (EosWindow *self);
EOS_SDK_ALL_API_VERSIONS
-void eos_window_set_font_scaling_default_size (EosWindow *self,
- gint new_default_font_size);
+void eos_window_set_font_scaling_default_size (EosWindow *self,
+ gint new_default_font_size);
EOS_SDK_ALL_API_VERSIONS
-gint eos_window_get_font_scaling_default_window_size (EosWindow *self);
+gint eos_window_get_font_scaling_default_window_size (EosWindow *self);
EOS_SDK_ALL_API_VERSIONS
-void eos_window_set_font_scaling_default_window_size (EosWindow *self,
- gint new_default_window_size);
+void eos_window_set_font_scaling_default_window_size (EosWindow *self,
+ gint new_default_window_size);
EOS_SDK_ALL_API_VERSIONS
-gint eos_window_get_font_scaling_min_font_size (EosWindow *self);
+gint eos_window_get_font_scaling_min_font_size (EosWindow *self);
EOS_SDK_ALL_API_VERSIONS
-void eos_window_set_font_scaling_min_font_size (EosWindow *self,
- gint new_min_font_size);
+void eos_window_set_font_scaling_min_font_size (EosWindow *self,
+ gint new_min_font_size);
+
+EOS_SDK_ALL_API_VERSIONS
+gdouble eos_window_get_font_scaling_calculated_font_size (EosWindow *self);
G_END_DECLS