static void tile_drag_run (MnpClockTile *tile, int ypos, MnpClockArea *area) { /*ClutterActor *self = CLUTTER_ACTOR (area); ClutterActor *child = CLUTTER_ACTOR (tile); */ GPtrArray *tiles = area->priv->clock_tiles; int i, pos; int diff = tiles->len == 4 ? 80 : 110; g_object_ref (tile); pos = (ypos-diff) / 80; if (pos >= tiles->len) pos = tiles->len -1; g_ptr_array_remove (tiles, (gpointer) tile); insert_in_ptr_array (tiles, tile, pos); clutter_actor_set_depth ((ClutterActor *)tile, ((pos+1) * 0.05) - 0.01); for (i=tiles->len-1; i >= 0; i--) { clutter_actor_set_depth (tiles->pdata[i], (i + 1) * 0.05); } g_object_unref (tile); }
static void mnp_clock_area_drop (MxDroppable *droppable, MxDraggable *draggable, gfloat event_x, gfloat event_y, gint button, ClutterModifierType modifiers) { ClutterActor *self = CLUTTER_ACTOR (droppable); ClutterActor *child = CLUTTER_ACTOR (draggable); MnpClockTile *tile = (MnpClockTile *)draggable; MnpClockArea *area = (MnpClockArea *)droppable; GPtrArray *tiles = area->priv->clock_tiles; int i, pos; g_object_ref (draggable); pos = (event_y) / 80; if (pos >= tiles->len) pos = tiles->len -1; clutter_actor_reparent (child, self); g_ptr_array_remove (tiles, (gpointer) draggable); insert_in_ptr_array (tiles, draggable, pos); clutter_actor_set_depth ((ClutterActor *)draggable, ((pos+1) * 0.05) - 0.01); for (i=tiles->len-1; i >= 0; i--) { clutter_actor_set_depth (tiles->pdata[i], (i + 1) * 0.05); } area->priv->zone_reorder_func(mnp_clock_tile_get_location(tile), pos, area->priv->zone_reorder_data); g_object_unref (draggable); }
static void zone_reordered_cb (MnpZoneLocation *location, int new_pos, MnpWorldClock *clock) { MnpWorldClockPrivate *priv = GET_PRIVATE (clock); char *cloc = location->display; int i; for (i=0; i<priv->zones->len; i++) { MnpZoneLocation *loc = (MnpZoneLocation *)priv->zones->pdata[i]; if (strcmp(cloc, loc->display) == 0) { break; } } g_ptr_array_remove_index (priv->zones, i); insert_in_ptr_array (priv->zones, (gpointer) location, new_pos); mnp_save_zones (priv->zones); }