bool canvas_t::set_background(const std::string &filename) { canvas_goocanvas *gcanvas = static_cast<canvas_goocanvas *>(this); GooCanvasItem *gr = gcanvas->group[CANVAS_GROUP_BG]; int n = goo_canvas_item_get_n_children(gr); if(n > 0) { assert_cmpnum(n, 1); goo_canvas_item_remove_child(gr, 0); } if(filename.empty()) return false; gcanvas->bg.pix.reset(gdk_pixbuf_new_from_file(filename.c_str(), nullptr)); if(!gcanvas->bg.pix) return false; float width = gdk_pixbuf_get_width(gcanvas->bg.pix.get()); float height = gdk_pixbuf_get_height(gcanvas->bg.pix.get()); /* calculate required scale factor */ gcanvas->bg.scale.x = (gcanvas->bounds.max.x - gcanvas->bounds.min.x) / width; gcanvas->bg.scale.y = (gcanvas->bounds.max.y - gcanvas->bounds.min.y) / height; GooCanvasItem *bg = goo_canvas_image_new(gr, gcanvas->bg.pix.get(), gcanvas->bounds.min.x / gcanvas->bg.scale.x - width / 2.0f, gcanvas->bounds.min.y / gcanvas->bg.scale.y - height / 2.0f, nullptr); goo_canvas_item_scale(bg, gcanvas->bg.scale.x, gcanvas->bg.scale.y); return true; }
static gint goo_canvas_item_accessible_get_n_children (AtkObject *accessible) { GooCanvasItem *item; GObject *object; g_return_val_if_fail (GOO_IS_CANVAS_ITEM_ACCESSIBLE (accessible), 0); object = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (accessible)); if (object == NULL) return 0; item = GOO_CANVAS_ITEM (object); return goo_canvas_item_get_n_children (item); }
/* * This does the moves of the game items on the play canvas * */ static gint planegame_move_items (GtkWidget *widget, gpointer data) { int i; /* Check collision with each cloud */ for(i = 0; i < goo_canvas_item_get_n_children(clouds_rootitem); i++) planegame_cloud_colision(goo_canvas_item_get_child(clouds_rootitem, i)); /* move the plane */ planegame_move_plane(planeitem); planemove_id = g_timeout_add (speed, (GtkFunction) planegame_move_items, NULL); return(FALSE); }