container: Drop parent reference
This commit is contained in:
@ -61,7 +61,6 @@ eek_container_real_add_child (EekContainer *self,
|
||||
priv->last->next = g_list_prepend (priv->last->next, child);
|
||||
priv->last = priv->last->next;
|
||||
}
|
||||
eek_element_set_parent (child, EEK_ELEMENT(self));
|
||||
g_signal_emit (self, signals[CHILD_ADDED], 0, child);
|
||||
}
|
||||
|
||||
@ -79,7 +78,6 @@ eek_container_real_remove_child (EekContainer *self,
|
||||
if (head == priv->last)
|
||||
priv->last = g_list_previous (priv->last);
|
||||
priv->head = g_list_remove_link (priv->head, head);
|
||||
eek_element_set_parent (child, NULL);
|
||||
g_signal_emit (self, signals[CHILD_REMOVED], 0, child);
|
||||
}
|
||||
|
||||
|
||||
@ -40,16 +40,10 @@ enum {
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
enum {
|
||||
SYMBOL_INDEX_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
typedef struct _EekElementPrivate
|
||||
{
|
||||
gchar *name;
|
||||
EekBounds bounds;
|
||||
EekElement *parent;
|
||||
} EekElementPrivate;
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekElement, eek_element, G_TYPE_OBJECT)
|
||||
@ -155,54 +149,6 @@ eek_element_init (EekElement *self)
|
||||
(void)self;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_element_set_parent:
|
||||
* @element: an #EekElement
|
||||
* @parent: (allow-none): an #EekElement or %NULL
|
||||
*
|
||||
* Set the parent of @element to @parent.
|
||||
*/
|
||||
void
|
||||
eek_element_set_parent (EekElement *element,
|
||||
EekElement *parent)
|
||||
{
|
||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||
g_return_if_fail (parent == NULL || EEK_IS_ELEMENT(parent));
|
||||
|
||||
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||
|
||||
if (priv->parent == parent)
|
||||
return;
|
||||
|
||||
if (priv->parent != NULL) {
|
||||
/* release self-reference acquired when setting parent */
|
||||
g_object_unref (element);
|
||||
}
|
||||
|
||||
if (parent != NULL) {
|
||||
g_object_ref (element);
|
||||
}
|
||||
|
||||
priv->parent = parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_element_get_parent:
|
||||
* @element: an #EekElement
|
||||
*
|
||||
* Get the parent of @element.
|
||||
* Returns: an #EekElement if the parent is set
|
||||
*/
|
||||
EekElement *
|
||||
eek_element_get_parent (EekElement *element)
|
||||
{
|
||||
g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
|
||||
|
||||
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||
|
||||
return priv->parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_element_set_name:
|
||||
* @element: an #EekElement
|
||||
@ -280,31 +226,6 @@ eek_element_get_bounds (EekElement *element,
|
||||
memcpy (bounds, &priv->bounds, sizeof(EekBounds));
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_element_get_absolute_position:
|
||||
* @element: an #EekElement
|
||||
* @x: pointer where the X coordinate of @element will be stored
|
||||
* @y: pointer where the Y coordinate of @element will be stored
|
||||
*
|
||||
* Compute the absolute position of @element.
|
||||
*/
|
||||
void
|
||||
eek_element_get_absolute_position (EekElement *element,
|
||||
gdouble *x,
|
||||
gdouble *y)
|
||||
{
|
||||
EekBounds bounds;
|
||||
gdouble ax = 0.0, ay = 0.0;
|
||||
|
||||
do {
|
||||
eek_element_get_bounds (element, &bounds);
|
||||
ax += bounds.x;
|
||||
ay += bounds.y;
|
||||
} while ((element = eek_element_get_parent (element)) != NULL);
|
||||
*x = ax;
|
||||
*y = ay;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_element_set_position:
|
||||
* @element: an #EekElement
|
||||
|
||||
@ -40,9 +40,6 @@ struct _EekElementClass
|
||||
|
||||
GType eek_element_get_type (void) G_GNUC_CONST;
|
||||
|
||||
void eek_element_set_parent (EekElement *element,
|
||||
EekElement *parent);
|
||||
EekElement *eek_element_get_parent (EekElement *element);
|
||||
void eek_element_set_name (EekElement *element,
|
||||
const gchar *name);
|
||||
|
||||
|
||||
@ -360,8 +360,8 @@ eek_renderer_apply_transformation_for_key (EekRenderer *self,
|
||||
gint angle;
|
||||
gdouble s;
|
||||
|
||||
eek_renderer_get_key_bounds (self, key, &bounds, FALSE);
|
||||
eek_renderer_get_key_bounds (self, key, &rotated_bounds, TRUE);
|
||||
eek_renderer_get_key_bounds (self, view, key, &bounds, FALSE);
|
||||
eek_renderer_get_key_bounds (self, view, key, &rotated_bounds, TRUE);
|
||||
|
||||
section = eek_keyboard_get_section(view, key);
|
||||
angle = eek_section_get_angle (section);
|
||||
@ -469,7 +469,7 @@ eek_renderer_real_render_key (EekRenderer *self,
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||
EekBounds bounds;
|
||||
|
||||
eek_renderer_get_key_bounds (self, key, &bounds, rotate);
|
||||
eek_renderer_get_key_bounds (self, view, key, &bounds, rotate);
|
||||
|
||||
cairo_save (cr);
|
||||
/* Because this function is called separately from the keyboard rendering
|
||||
@ -758,11 +758,12 @@ eek_renderer_get_size (EekRenderer *renderer,
|
||||
|
||||
void
|
||||
eek_renderer_get_key_bounds (EekRenderer *renderer,
|
||||
EekKeyboard *view,
|
||||
EekKey *key,
|
||||
EekBounds *bounds,
|
||||
gboolean rotate)
|
||||
{
|
||||
EekElement *section;
|
||||
EekSection *section = eek_keyboard_get_section(view, key);
|
||||
EekBounds section_bounds, keyboard_bounds;
|
||||
gint angle = 0;
|
||||
EekPoint points[4], min, max;
|
||||
@ -773,10 +774,8 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
||||
|
||||
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||
|
||||
section = eek_element_get_parent (EEK_ELEMENT(key));
|
||||
|
||||
eek_element_get_bounds (EEK_ELEMENT(key), bounds);
|
||||
eek_element_get_bounds (section, §ion_bounds);
|
||||
eek_element_get_bounds (EEK_ELEMENT(section), §ion_bounds);
|
||||
eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)),
|
||||
&keyboard_bounds);
|
||||
|
||||
|
||||
@ -74,7 +74,7 @@ void eek_renderer_set_allocation_size
|
||||
void eek_renderer_get_size (EekRenderer *renderer,
|
||||
gdouble *width,
|
||||
gdouble *height);
|
||||
void eek_renderer_get_key_bounds (EekRenderer *renderer,
|
||||
void eek_renderer_get_key_bounds (EekRenderer *renderer, EekKeyboard *view,
|
||||
EekKey *key,
|
||||
EekBounds *bounds,
|
||||
gboolean rotate);
|
||||
|
||||
Reference in New Issue
Block a user