static int draw_building_and_count(GdkGC * gc, GtkWidget * area, gint offset, Polygon * poly, gint num) { GdkRectangle rect; char buff[10]; gint width, height; PangoLayout *layout; poly_bound_rect(poly, 0, &rect); poly_offset(poly, offset - rect.x, area->allocation.height - 5 - rect.y - rect.height); poly_draw(area->window, gc, FALSE, poly); offset += 5 + rect.width; sprintf(buff, "%d", num); layout = gtk_widget_create_pango_layout(area, buff); pango_layout_get_pixel_size(layout, &width, &height); gdk_draw_layout(area->window, gc, offset, area->allocation.height - height - 5, layout); g_object_unref(layout); offset += 5 + width; return offset; }
int main() { polygon p = {4, { {1,1}, {1,5}, {4,5}, {4,1} } }; clrscr(); poly_draw(p); gotoxy(MAXROW,MAXCOL); return 0; }
static void show_die(GdkGC * gc, GtkWidget * area, gint x_offset, gint num) { static GdkPoint die_points[4] = { {0, 0}, {30, 0}, {30, 30}, {0, 30} }; static Polygon die_shape = { die_points, G_N_ELEMENTS(die_points) }; static GdkPoint dot_pos[7] = { {7, 7}, {22, 7}, {7, 15}, {15, 15}, {22, 15}, {7, 22}, {22, 22} }; static gint draw_list[6][7] = { {0, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 1, 0, 0, 1}, {1, 1, 0, 0, 0, 1, 1}, {1, 1, 0, 1, 0, 1, 1}, {1, 1, 1, 0, 1, 1, 1} }; gint y_offset = (area->allocation.height - 30) / 2; gint *list = draw_list[num - 1]; gint idx; poly_offset(&die_shape, x_offset, y_offset); gdk_gc_set_foreground(gc, &white); poly_draw(area->window, gc, TRUE, &die_shape); gdk_gc_set_foreground(gc, &black); poly_draw(area->window, gc, FALSE, &die_shape); poly_offset(&die_shape, -x_offset, -y_offset); gdk_gc_set_foreground(gc, &black); for (idx = 0; idx < 7; idx++) { if (list[idx] == 0) continue; gdk_draw_arc(area->window, gc, TRUE, x_offset + dot_pos[idx].x - 3, y_offset + dot_pos[idx].y - 3, 7, 7, 0, 360 * 64); } }