container: Drop parent reference

This commit is contained in:
Dorota Czaplejewicz
2019-08-14 17:01:48 +00:00
parent fc683de434
commit 0c83101b3f
5 changed files with 7 additions and 92 deletions

View File

@ -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);
}

View File

@ -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

View File

@ -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);

View File

@ -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, &section_bounds);
eek_element_get_bounds (EEK_ELEMENT(section), &section_bounds);
eek_element_get_bounds (EEK_ELEMENT(level_keyboard_current(priv->keyboard)),
&keyboard_bounds);

View File

@ -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);