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