Abolish EekThemeNodePrivate.
This commit is contained in:
@ -34,13 +34,9 @@
|
|||||||
#include "eek-theme-node.h"
|
#include "eek-theme-node.h"
|
||||||
#include "eek-theme-private.h"
|
#include "eek-theme-private.h"
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekThemeNode, eek_theme_node, G_TYPE_OBJECT);
|
struct _EekThemeNode {
|
||||||
|
GObject parent;
|
||||||
|
|
||||||
#define EEK_THEME_NODE_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_THEME_NODE, EekThemeNodePrivate))
|
|
||||||
|
|
||||||
struct _EekThemeNodePrivate
|
|
||||||
{
|
|
||||||
EekThemeNode *parent_node;
|
EekThemeNode *parent_node;
|
||||||
EekTheme *theme;
|
EekTheme *theme;
|
||||||
|
|
||||||
@ -73,6 +69,15 @@ struct _EekThemeNodePrivate
|
|||||||
guint foreground_computed : 1;
|
guint foreground_computed : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _EekThemeNodeClass {
|
||||||
|
GObjectClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (EekThemeNode, eek_theme_node, G_TYPE_OBJECT);
|
||||||
|
|
||||||
|
#define EEK_THEME_NODE_GET_PRIVATE(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_THEME_NODE, EekThemeNodePrivate))
|
||||||
|
|
||||||
static void eek_theme_node_init (EekThemeNode *node);
|
static void eek_theme_node_init (EekThemeNode *node);
|
||||||
static void eek_theme_node_class_init (EekThemeNodeClass *klass);
|
static void eek_theme_node_class_init (EekThemeNodeClass *klass);
|
||||||
static void eek_theme_node_dispose (GObject *object);
|
static void eek_theme_node_dispose (GObject *object);
|
||||||
@ -87,9 +92,6 @@ static const EekColor DEFAULT_ERROR_COLOR = { 0xcc, 0x00, 0x00, 0xff };
|
|||||||
static void
|
static void
|
||||||
eek_theme_node_init (EekThemeNode *self)
|
eek_theme_node_init (EekThemeNode *self)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
priv = self->priv = EEK_THEME_NODE_GET_PRIVATE(self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -97,9 +99,6 @@ eek_theme_node_class_init (EekThemeNodeClass *klass)
|
|||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
g_type_class_add_private (object_class,
|
|
||||||
sizeof (EekThemeNodePrivate));
|
|
||||||
|
|
||||||
object_class->dispose = eek_theme_node_dispose;
|
object_class->dispose = eek_theme_node_dispose;
|
||||||
object_class->finalize = eek_theme_node_finalize;
|
object_class->finalize = eek_theme_node_finalize;
|
||||||
}
|
}
|
||||||
@ -107,18 +106,18 @@ eek_theme_node_class_init (EekThemeNodeClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_theme_node_dispose (GObject *gobject)
|
eek_theme_node_dispose (GObject *gobject)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv = EEK_THEME_NODE_GET_PRIVATE (gobject);
|
EekThemeNode *node = EEK_THEME_NODE (gobject);
|
||||||
|
|
||||||
if (priv->theme)
|
if (node->theme)
|
||||||
{
|
{
|
||||||
g_object_unref (priv->theme);
|
g_object_unref (node->theme);
|
||||||
priv->theme = NULL;
|
node->theme = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->parent_node)
|
if (node->parent_node)
|
||||||
{
|
{
|
||||||
g_object_unref (priv->parent_node);
|
g_object_unref (node->parent_node);
|
||||||
priv->parent_node = NULL;
|
node->parent_node = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (eek_theme_node_parent_class)->dispose (gobject);
|
G_OBJECT_CLASS (eek_theme_node_parent_class)->dispose (gobject);
|
||||||
@ -127,24 +126,24 @@ eek_theme_node_dispose (GObject *gobject)
|
|||||||
static void
|
static void
|
||||||
eek_theme_node_finalize (GObject *object)
|
eek_theme_node_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv = EEK_THEME_NODE_GET_PRIVATE (object);
|
EekThemeNode *node = EEK_THEME_NODE (object);
|
||||||
|
|
||||||
g_free (priv->element_id);
|
g_free (node->element_id);
|
||||||
g_free (priv->element_class);
|
g_free (node->element_class);
|
||||||
g_free (priv->pseudo_class);
|
g_free (node->pseudo_class);
|
||||||
g_free (priv->inline_style);
|
g_free (node->inline_style);
|
||||||
|
|
||||||
if (priv->properties)
|
if (node->properties)
|
||||||
{
|
{
|
||||||
g_free (priv->properties);
|
g_free (node->properties);
|
||||||
priv->properties = NULL;
|
node->properties = NULL;
|
||||||
priv->n_properties = 0;
|
node->n_properties = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->inline_properties)
|
if (node->inline_properties)
|
||||||
{
|
{
|
||||||
/* This destroys the list, not just the head of the list */
|
/* This destroys the list, not just the head of the list */
|
||||||
cr_declaration_destroy (priv->inline_properties);
|
cr_declaration_destroy (node->inline_properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (eek_theme_node_parent_class)->finalize (object);
|
G_OBJECT_CLASS (eek_theme_node_parent_class)->finalize (object);
|
||||||
@ -181,29 +180,27 @@ eek_theme_node_new (EekThemeNode *parent_node,
|
|||||||
const char *inline_style)
|
const char *inline_style)
|
||||||
{
|
{
|
||||||
EekThemeNode *node;
|
EekThemeNode *node;
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (parent_node == NULL || EEK_IS_THEME_NODE (parent_node), NULL);
|
g_return_val_if_fail (parent_node == NULL || EEK_IS_THEME_NODE (parent_node), NULL);
|
||||||
|
|
||||||
node = g_object_new (EEK_TYPE_THEME_NODE, NULL);
|
node = g_object_new (EEK_TYPE_THEME_NODE, NULL);
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
if (parent_node != NULL)
|
if (parent_node != NULL)
|
||||||
priv->parent_node = g_object_ref (parent_node);
|
node->parent_node = g_object_ref (parent_node);
|
||||||
else
|
else
|
||||||
priv->parent_node = NULL;
|
node->parent_node = NULL;
|
||||||
|
|
||||||
if (theme == NULL && parent_node != NULL)
|
if (theme == NULL && parent_node != NULL)
|
||||||
theme = eek_theme_node_get_theme (parent_node);
|
theme = eek_theme_node_get_theme (parent_node);
|
||||||
|
|
||||||
if (theme != NULL)
|
if (theme != NULL)
|
||||||
priv->theme = g_object_ref (theme);
|
node->theme = g_object_ref (theme);
|
||||||
|
|
||||||
priv->element_type = element_type;
|
node->element_type = element_type;
|
||||||
priv->element_id = g_strdup (element_id);
|
node->element_id = g_strdup (element_id);
|
||||||
priv->element_class = g_strdup (element_class);
|
node->element_class = g_strdup (element_class);
|
||||||
priv->pseudo_class = g_strdup (pseudo_class);
|
node->pseudo_class = g_strdup (pseudo_class);
|
||||||
priv->inline_style = g_strdup (inline_style);
|
node->inline_style = g_strdup (inline_style);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
@ -220,12 +217,9 @@ eek_theme_node_new (EekThemeNode *parent_node,
|
|||||||
EekThemeNode *
|
EekThemeNode *
|
||||||
eek_theme_node_get_parent (EekThemeNode *node)
|
eek_theme_node_get_parent (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
return node->parent_node;
|
||||||
return priv->parent_node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -239,82 +233,65 @@ eek_theme_node_get_parent (EekThemeNode *node)
|
|||||||
EekTheme *
|
EekTheme *
|
||||||
eek_theme_node_get_theme (EekThemeNode *node)
|
eek_theme_node_get_theme (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
return node->theme;
|
||||||
return priv->theme;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
eek_theme_node_get_element_type (EekThemeNode *node)
|
eek_theme_node_get_element_type (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), G_TYPE_NONE);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), G_TYPE_NONE);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
return node->element_type;
|
||||||
return priv->element_type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
eek_theme_node_get_element_id (EekThemeNode *node)
|
eek_theme_node_get_element_id (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
return node->element_id;
|
||||||
return priv->element_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
eek_theme_node_get_element_class (EekThemeNode *node)
|
eek_theme_node_get_element_class (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
return node->element_class;
|
||||||
return priv->element_class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
eek_theme_node_get_pseudo_class (EekThemeNode *node)
|
eek_theme_node_get_pseudo_class (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), NULL);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
return node->pseudo_class;
|
||||||
return priv->pseudo_class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ensure_properties (EekThemeNode *node)
|
ensure_properties (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
if (!node->properties_computed)
|
||||||
|
|
||||||
if (!priv->properties_computed)
|
|
||||||
{
|
{
|
||||||
GPtrArray *properties = NULL;
|
GPtrArray *properties = NULL;
|
||||||
|
|
||||||
priv->properties_computed = TRUE;
|
node->properties_computed = TRUE;
|
||||||
|
|
||||||
if (priv->theme)
|
if (node->theme)
|
||||||
properties = _eek_theme_get_matched_properties (priv->theme, node);
|
properties = _eek_theme_get_matched_properties (node->theme, node);
|
||||||
|
|
||||||
if (priv->inline_style)
|
if (node->inline_style)
|
||||||
{
|
{
|
||||||
CRDeclaration *cur_decl;
|
CRDeclaration *cur_decl;
|
||||||
|
|
||||||
if (!properties)
|
if (!properties)
|
||||||
properties = g_ptr_array_new ();
|
properties = g_ptr_array_new ();
|
||||||
|
|
||||||
priv->inline_properties =
|
node->inline_properties =
|
||||||
_eek_theme_parse_declaration_list (priv->inline_style);
|
_eek_theme_parse_declaration_list (node->inline_style);
|
||||||
for (cur_decl = priv->inline_properties;
|
for (cur_decl = node->inline_properties;
|
||||||
cur_decl;
|
cur_decl;
|
||||||
cur_decl = cur_decl->next)
|
cur_decl = cur_decl->next)
|
||||||
g_ptr_array_add (properties, cur_decl);
|
g_ptr_array_add (properties, cur_decl);
|
||||||
@ -322,8 +299,8 @@ ensure_properties (EekThemeNode *node)
|
|||||||
|
|
||||||
if (properties)
|
if (properties)
|
||||||
{
|
{
|
||||||
priv->n_properties = properties->len;
|
node->n_properties = properties->len;
|
||||||
priv->properties = (CRDeclaration **)g_ptr_array_free (properties,
|
node->properties = (CRDeclaration **)g_ptr_array_free (properties,
|
||||||
FALSE);
|
FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -508,18 +485,15 @@ eek_theme_node_lookup_color (EekThemeNode *node,
|
|||||||
gboolean inherit,
|
gboolean inherit,
|
||||||
EekColor *color)
|
EekColor *color)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
ensure_properties (node);
|
ensure_properties (node);
|
||||||
|
|
||||||
for (i = priv->n_properties - 1; i >= 0; i--)
|
for (i = node->n_properties - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
CRDeclaration *decl = priv->properties[i];
|
CRDeclaration *decl = node->properties[i];
|
||||||
|
|
||||||
if (strcmp (decl->property->stryng->str, property_name) == 0)
|
if (strcmp (decl->property->stryng->str, property_name) == 0)
|
||||||
{
|
{
|
||||||
@ -530,16 +504,16 @@ eek_theme_node_lookup_color (EekThemeNode *node,
|
|||||||
}
|
}
|
||||||
else if (result == VALUE_INHERIT)
|
else if (result == VALUE_INHERIT)
|
||||||
{
|
{
|
||||||
if (priv->parent_node)
|
if (node->parent_node)
|
||||||
return eek_theme_node_lookup_color (priv->parent_node, property_name, inherit, color);
|
return eek_theme_node_lookup_color (node->parent_node, property_name, inherit, color);
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inherit && priv->parent_node)
|
if (inherit && node->parent_node)
|
||||||
return eek_theme_node_lookup_color (priv->parent_node, property_name, inherit, color);
|
return eek_theme_node_lookup_color (node->parent_node, property_name, inherit, color);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -601,19 +575,16 @@ eek_theme_node_lookup_double (EekThemeNode *node,
|
|||||||
gboolean inherit,
|
gboolean inherit,
|
||||||
double *value)
|
double *value)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
gboolean result = FALSE;
|
gboolean result = FALSE;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
ensure_properties (node);
|
ensure_properties (node);
|
||||||
|
|
||||||
for (i = priv->n_properties - 1; i >= 0; i--)
|
for (i = node->n_properties - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
CRDeclaration *decl = priv->properties[i];
|
CRDeclaration *decl = node->properties[i];
|
||||||
|
|
||||||
if (strcmp (decl->property->stryng->str, property_name) == 0)
|
if (strcmp (decl->property->stryng->str, property_name) == 0)
|
||||||
{
|
{
|
||||||
@ -628,8 +599,8 @@ eek_theme_node_lookup_double (EekThemeNode *node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result && inherit && priv->parent_node)
|
if (!result && inherit && node->parent_node)
|
||||||
result = eek_theme_node_lookup_double (priv->parent_node, property_name, inherit, value);
|
result = eek_theme_node_lookup_double (node->parent_node, property_name, inherit, value);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -841,18 +812,15 @@ get_length_internal (EekThemeNode *node,
|
|||||||
const char *suffixed,
|
const char *suffixed,
|
||||||
gdouble *length)
|
gdouble *length)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
ensure_properties (node);
|
ensure_properties (node);
|
||||||
|
|
||||||
for (i = priv->n_properties - 1; i >= 0; i--)
|
for (i = node->n_properties - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
CRDeclaration *decl = priv->properties[i];
|
CRDeclaration *decl = node->properties[i];
|
||||||
|
|
||||||
if (strcmp (decl->property->stryng->str, property_name) == 0 ||
|
if (strcmp (decl->property->stryng->str, property_name) == 0 ||
|
||||||
(suffixed != NULL && strcmp (decl->property->stryng->str, suffixed) == 0))
|
(suffixed != NULL && strcmp (decl->property->stryng->str, suffixed) == 0))
|
||||||
@ -896,21 +864,18 @@ eek_theme_node_lookup_length (EekThemeNode *node,
|
|||||||
gboolean inherit,
|
gboolean inherit,
|
||||||
gdouble *length)
|
gdouble *length)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
GetFromTermResult result;
|
GetFromTermResult result;
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
g_return_val_if_fail (EEK_IS_THEME_NODE(node), FALSE);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
result = get_length_internal (node, property_name, NULL, length);
|
result = get_length_internal (node, property_name, NULL, length);
|
||||||
if (result == VALUE_FOUND)
|
if (result == VALUE_FOUND)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else if (result == VALUE_INHERIT)
|
else if (result == VALUE_INHERIT)
|
||||||
inherit = TRUE;
|
inherit = TRUE;
|
||||||
|
|
||||||
if (inherit && priv->parent_node &&
|
if (inherit && node->parent_node &&
|
||||||
eek_theme_node_lookup_length (priv->parent_node, property_name, inherit, length))
|
eek_theme_node_lookup_length (node->parent_node, property_name, inherit, length))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -954,24 +919,21 @@ do_border_radius_term (EekThemeNode *node,
|
|||||||
gboolean bottomright,
|
gboolean bottomright,
|
||||||
gboolean bottomleft)
|
gboolean bottomleft)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
int value;
|
int value;
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
if (get_length_from_term_int (node, term, FALSE, &value) != VALUE_FOUND)
|
if (get_length_from_term_int (node, term, FALSE, &value) != VALUE_FOUND)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (topleft)
|
if (topleft)
|
||||||
priv->border_radius[EEK_CORNER_TOPLEFT] = value;
|
node->border_radius[EEK_CORNER_TOPLEFT] = value;
|
||||||
if (topright)
|
if (topright)
|
||||||
priv->border_radius[EEK_CORNER_TOPRIGHT] = value;
|
node->border_radius[EEK_CORNER_TOPRIGHT] = value;
|
||||||
if (bottomright)
|
if (bottomright)
|
||||||
priv->border_radius[EEK_CORNER_BOTTOMRIGHT] = value;
|
node->border_radius[EEK_CORNER_BOTTOMRIGHT] = value;
|
||||||
if (bottomleft)
|
if (bottomleft)
|
||||||
priv->border_radius[EEK_CORNER_BOTTOMLEFT] = value;
|
node->border_radius[EEK_CORNER_BOTTOMLEFT] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1037,7 +999,6 @@ static void
|
|||||||
do_border_property (EekThemeNode *node,
|
do_border_property (EekThemeNode *node,
|
||||||
CRDeclaration *decl)
|
CRDeclaration *decl)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
const char *property_name = decl->property->stryng->str + 6; /* Skip 'border' */
|
const char *property_name = decl->property->stryng->str + 6; /* Skip 'border' */
|
||||||
EekSide side = (EekSide)-1;
|
EekSide side = (EekSide)-1;
|
||||||
EekColor color;
|
EekColor color;
|
||||||
@ -1048,8 +1009,6 @@ do_border_property (EekThemeNode *node,
|
|||||||
|
|
||||||
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
if (g_str_has_prefix (property_name, "-radius"))
|
if (g_str_has_prefix (property_name, "-radius"))
|
||||||
{
|
{
|
||||||
do_border_radius (node, decl);
|
do_border_radius (node, decl);
|
||||||
@ -1158,46 +1117,43 @@ do_border_property (EekThemeNode *node,
|
|||||||
for (j = 0; j < 4; j++)
|
for (j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
if (color_set)
|
if (color_set)
|
||||||
priv->border_color[j] = color;
|
node->border_color[j] = color;
|
||||||
if (width_set)
|
if (width_set)
|
||||||
priv->border_width[j] = width;
|
node->border_width[j] = width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (color_set)
|
if (color_set)
|
||||||
priv->border_color[side] = color;
|
node->border_color[side] = color;
|
||||||
if (width_set)
|
if (width_set)
|
||||||
priv->border_width[side] = width;
|
node->border_width[side] = width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_eek_theme_node_ensure_geometry (EekThemeNode *node)
|
_eek_theme_node_ensure_geometry (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
if (node->geometry_computed)
|
||||||
|
|
||||||
if (priv->geometry_computed)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
priv->geometry_computed = TRUE;
|
node->geometry_computed = TRUE;
|
||||||
|
|
||||||
ensure_properties (node);
|
ensure_properties (node);
|
||||||
|
|
||||||
for (j = 0; j < 4; j++)
|
for (j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
priv->border_width[j] = 0;
|
node->border_width[j] = 0;
|
||||||
priv->border_color[j] = TRANSPARENT_COLOR;
|
node->border_color[j] = TRANSPARENT_COLOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < priv->n_properties; i++)
|
for (i = 0; i < node->n_properties; i++)
|
||||||
{
|
{
|
||||||
CRDeclaration *decl = priv->properties[i];
|
CRDeclaration *decl = node->properties[i];
|
||||||
const char *property_name = decl->property->stryng->str;
|
const char *property_name = decl->property->stryng->str;
|
||||||
|
|
||||||
if (g_str_has_prefix (property_name, "border"))
|
if (g_str_has_prefix (property_name, "border"))
|
||||||
@ -1209,32 +1165,24 @@ int
|
|||||||
eek_theme_node_get_border_width (EekThemeNode *node,
|
eek_theme_node_get_border_width (EekThemeNode *node,
|
||||||
EekSide side)
|
EekSide side)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), 0.);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), 0.);
|
||||||
g_return_val_if_fail (side >= EEK_SIDE_TOP && side <= EEK_SIDE_LEFT, 0.);
|
g_return_val_if_fail (side >= EEK_SIDE_TOP && side <= EEK_SIDE_LEFT, 0.);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
_eek_theme_node_ensure_geometry (node);
|
_eek_theme_node_ensure_geometry (node);
|
||||||
|
|
||||||
return priv->border_width[side];
|
return node->border_width[side];
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
eek_theme_node_get_border_radius (EekThemeNode *node,
|
eek_theme_node_get_border_radius (EekThemeNode *node,
|
||||||
EekCorner corner)
|
EekCorner corner)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_THEME_NODE (node), 0.);
|
g_return_val_if_fail (EEK_IS_THEME_NODE (node), 0.);
|
||||||
g_return_val_if_fail (corner >= EEK_CORNER_TOPLEFT && corner <= EEK_CORNER_BOTTOMLEFT, 0.);
|
g_return_val_if_fail (corner >= EEK_CORNER_TOPLEFT && corner <= EEK_CORNER_BOTTOMLEFT, 0.);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
_eek_theme_node_ensure_geometry (node);
|
_eek_theme_node_ensure_geometry (node);
|
||||||
|
|
||||||
return priv->border_radius[corner];
|
return node->border_radius[corner];
|
||||||
}
|
}
|
||||||
|
|
||||||
static GetFromTermResult
|
static GetFromTermResult
|
||||||
@ -1258,21 +1206,20 @@ get_background_color_from_term (EekThemeNode *node,
|
|||||||
void
|
void
|
||||||
_eek_theme_node_ensure_background (EekThemeNode *node)
|
_eek_theme_node_ensure_background (EekThemeNode *node)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (priv->background_computed)
|
if (node->background_computed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
priv->background_computed = TRUE;
|
node->background_computed = TRUE;
|
||||||
priv->background_color = TRANSPARENT_COLOR;
|
node->background_color = TRANSPARENT_COLOR;
|
||||||
priv->background_gradient_type = EEK_GRADIENT_NONE;
|
node->background_gradient_type = EEK_GRADIENT_NONE;
|
||||||
|
|
||||||
ensure_properties (node);
|
ensure_properties (node);
|
||||||
|
|
||||||
for (i = 0; i < priv->n_properties; i++)
|
for (i = 0; i < node->n_properties; i++)
|
||||||
{
|
{
|
||||||
CRDeclaration *decl = priv->properties[i];
|
CRDeclaration *decl = node->properties[i];
|
||||||
const char *property_name = decl->property->stryng->str;
|
const char *property_name = decl->property->stryng->str;
|
||||||
|
|
||||||
if (g_str_has_prefix (property_name, "background"))
|
if (g_str_has_prefix (property_name, "background"))
|
||||||
@ -1290,25 +1237,25 @@ _eek_theme_node_ensure_background (EekThemeNode *node)
|
|||||||
|
|
||||||
CRTerm *term;
|
CRTerm *term;
|
||||||
/* background: property sets all terms to specified or default values */
|
/* background: property sets all terms to specified or default values */
|
||||||
priv->background_color = TRANSPARENT_COLOR;
|
node->background_color = TRANSPARENT_COLOR;
|
||||||
|
|
||||||
for (term = decl->value; term; term = term->next)
|
for (term = decl->value; term; term = term->next)
|
||||||
{
|
{
|
||||||
GetFromTermResult result = get_background_color_from_term (node, term, &priv->background_color);
|
GetFromTermResult result = get_background_color_from_term (node, term, &node->background_color);
|
||||||
if (result == VALUE_FOUND)
|
if (result == VALUE_FOUND)
|
||||||
{
|
{
|
||||||
/* color stored in node->background_color */
|
/* color stored in node->background_color */
|
||||||
}
|
}
|
||||||
else if (result == VALUE_INHERIT)
|
else if (result == VALUE_INHERIT)
|
||||||
{
|
{
|
||||||
if (priv->parent_node)
|
if (node->parent_node)
|
||||||
{
|
{
|
||||||
eek_theme_node_get_background_color (priv->parent_node, &priv->background_color);
|
eek_theme_node_get_background_color (node->parent_node, &node->background_color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (term_is_none (term))
|
else if (term_is_none (term))
|
||||||
{
|
{
|
||||||
/* leave priv->background_color as transparent */
|
/* leave node->background_color as transparent */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1319,15 +1266,15 @@ _eek_theme_node_ensure_background (EekThemeNode *node)
|
|||||||
if (decl->value == NULL || decl->value->next != NULL)
|
if (decl->value == NULL || decl->value->next != NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
result = get_background_color_from_term (node, decl->value, &priv->background_color);
|
result = get_background_color_from_term (node, decl->value, &node->background_color);
|
||||||
if (result == VALUE_FOUND)
|
if (result == VALUE_FOUND)
|
||||||
{
|
{
|
||||||
/* color stored in node->background_color */
|
/* color stored in node->background_color */
|
||||||
}
|
}
|
||||||
else if (result == VALUE_INHERIT)
|
else if (result == VALUE_INHERIT)
|
||||||
{
|
{
|
||||||
if (priv->parent_node)
|
if (node->parent_node)
|
||||||
eek_theme_node_get_background_color (priv->parent_node, &priv->background_color);
|
eek_theme_node_get_background_color (node->parent_node, &node->background_color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp (property_name, "-gradient-direction") == 0)
|
else if (strcmp (property_name, "-gradient-direction") == 0)
|
||||||
@ -1335,19 +1282,19 @@ _eek_theme_node_ensure_background (EekThemeNode *node)
|
|||||||
CRTerm *term = decl->value;
|
CRTerm *term = decl->value;
|
||||||
if (strcmp (term->content.str->stryng->str, "vertical") == 0)
|
if (strcmp (term->content.str->stryng->str, "vertical") == 0)
|
||||||
{
|
{
|
||||||
priv->background_gradient_type = EEK_GRADIENT_VERTICAL;
|
node->background_gradient_type = EEK_GRADIENT_VERTICAL;
|
||||||
}
|
}
|
||||||
else if (strcmp (term->content.str->stryng->str, "horizontal") == 0)
|
else if (strcmp (term->content.str->stryng->str, "horizontal") == 0)
|
||||||
{
|
{
|
||||||
priv->background_gradient_type = EEK_GRADIENT_HORIZONTAL;
|
node->background_gradient_type = EEK_GRADIENT_HORIZONTAL;
|
||||||
}
|
}
|
||||||
else if (strcmp (term->content.str->stryng->str, "radial") == 0)
|
else if (strcmp (term->content.str->stryng->str, "radial") == 0)
|
||||||
{
|
{
|
||||||
priv->background_gradient_type = EEK_GRADIENT_RADIAL;
|
node->background_gradient_type = EEK_GRADIENT_RADIAL;
|
||||||
}
|
}
|
||||||
else if (strcmp (term->content.str->stryng->str, "none") == 0)
|
else if (strcmp (term->content.str->stryng->str, "none") == 0)
|
||||||
{
|
{
|
||||||
priv->background_gradient_type = EEK_GRADIENT_NONE;
|
node->background_gradient_type = EEK_GRADIENT_NONE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1357,11 +1304,11 @@ _eek_theme_node_ensure_background (EekThemeNode *node)
|
|||||||
}
|
}
|
||||||
else if (strcmp (property_name, "-gradient-start") == 0)
|
else if (strcmp (property_name, "-gradient-start") == 0)
|
||||||
{
|
{
|
||||||
get_color_from_term (node, decl->value, &priv->background_color);
|
get_color_from_term (node, decl->value, &node->background_color);
|
||||||
}
|
}
|
||||||
else if (strcmp (property_name, "-gradient-end") == 0)
|
else if (strcmp (property_name, "-gradient-end") == 0)
|
||||||
{
|
{
|
||||||
get_color_from_term (node, decl->value, &priv->background_gradient_end);
|
get_color_from_term (node, decl->value, &node->background_gradient_end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1370,14 +1317,11 @@ void
|
|||||||
eek_theme_node_get_background_color (EekThemeNode *node,
|
eek_theme_node_get_background_color (EekThemeNode *node,
|
||||||
EekColor *color)
|
EekColor *color)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
||||||
|
|
||||||
_eek_theme_node_ensure_background (node);
|
_eek_theme_node_ensure_background (node);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
*color = node->background_color;
|
||||||
*color = priv->background_color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1385,43 +1329,35 @@ eek_theme_node_get_border_color (EekThemeNode *node,
|
|||||||
EekSide side,
|
EekSide side,
|
||||||
EekColor *color)
|
EekColor *color)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
g_return_if_fail (EEK_IS_THEME_NODE (node));
|
||||||
g_return_if_fail (side >= EEK_SIDE_TOP && side <= EEK_SIDE_LEFT);
|
g_return_if_fail (side >= EEK_SIDE_TOP && side <= EEK_SIDE_LEFT);
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
_eek_theme_node_ensure_geometry (node);
|
_eek_theme_node_ensure_geometry (node);
|
||||||
|
|
||||||
*color = priv->border_color[side];
|
*color = node->border_color[side];
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
eek_theme_node_get_foreground_color (EekThemeNode *node,
|
eek_theme_node_get_foreground_color (EekThemeNode *node,
|
||||||
EekColor *color)
|
EekColor *color)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_assert (EEK_IS_THEME_NODE (node));
|
g_assert (EEK_IS_THEME_NODE (node));
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
if (!node->foreground_computed)
|
||||||
|
|
||||||
if (!priv->foreground_computed)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
priv->foreground_computed = TRUE;
|
node->foreground_computed = TRUE;
|
||||||
|
|
||||||
ensure_properties (node);
|
ensure_properties (node);
|
||||||
|
|
||||||
for (i = priv->n_properties - 1; i >= 0; i--)
|
for (i = node->n_properties - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
CRDeclaration *decl = priv->properties[i];
|
CRDeclaration *decl = node->properties[i];
|
||||||
|
|
||||||
if (strcmp (decl->property->stryng->str, "color") == 0)
|
if (strcmp (decl->property->stryng->str, "color") == 0)
|
||||||
{
|
{
|
||||||
GetFromTermResult result = get_color_from_term (node, decl->value, &priv->foreground_color);
|
GetFromTermResult result = get_color_from_term (node, decl->value, &node->foreground_color);
|
||||||
if (result == VALUE_FOUND)
|
if (result == VALUE_FOUND)
|
||||||
goto out;
|
goto out;
|
||||||
else if (result == VALUE_INHERIT)
|
else if (result == VALUE_INHERIT)
|
||||||
@ -1429,14 +1365,14 @@ eek_theme_node_get_foreground_color (EekThemeNode *node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->parent_node)
|
if (node->parent_node)
|
||||||
eek_theme_node_get_foreground_color (priv->parent_node, &priv->foreground_color);
|
eek_theme_node_get_foreground_color (node->parent_node, &node->foreground_color);
|
||||||
else
|
else
|
||||||
priv->foreground_color = BLACK_COLOR; /* default to black */
|
node->foreground_color = BLACK_COLOR; /* default to black */
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
*color = priv->foreground_color;
|
*color = node->foreground_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1445,18 +1381,14 @@ eek_theme_node_get_background_gradient (EekThemeNode *node,
|
|||||||
EekColor *start,
|
EekColor *start,
|
||||||
EekColor *end)
|
EekColor *end)
|
||||||
{
|
{
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
|
|
||||||
g_assert (EEK_IS_THEME_NODE (node));
|
g_assert (EEK_IS_THEME_NODE (node));
|
||||||
|
|
||||||
priv = EEK_THEME_NODE_GET_PRIVATE(node);
|
|
||||||
|
|
||||||
_eek_theme_node_ensure_background (node);
|
_eek_theme_node_ensure_background (node);
|
||||||
|
|
||||||
*type = priv->background_gradient_type;
|
*type = node->background_gradient_type;
|
||||||
if (*type != EEK_GRADIENT_NONE)
|
if (*type != EEK_GRADIENT_NONE)
|
||||||
{
|
{
|
||||||
*start = priv->background_color;
|
*start = node->background_color;
|
||||||
*end = priv->background_gradient_end;
|
*end = node->background_gradient_end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,16 +67,6 @@ typedef enum {
|
|||||||
typedef struct _EekThemeNodeClass EekThemeNodeClass;
|
typedef struct _EekThemeNodeClass EekThemeNodeClass;
|
||||||
typedef struct _EekThemeNodePrivate EekThemeNodePrivate;
|
typedef struct _EekThemeNodePrivate EekThemeNodePrivate;
|
||||||
|
|
||||||
struct _EekThemeNode {
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
EekThemeNodePrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekThemeNodeClass {
|
|
||||||
GObjectClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
GType eek_theme_node_get_type
|
GType eek_theme_node_get_type
|
||||||
(void) G_GNUC_CONST;
|
(void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user