static gboolean preview_expose(GtkWidget *widget, GdkEventExpose *event) { cairo_t *cr; gint width = preview_get_width (widget); gint height = preview_get_height (widget); cr = gdk_cairo_create (event->window); gdk_cairo_region (cr, event->region); cairo_clip (cr); cairo_set_line_width (cr, 1.); draw_grid (cr, width, height); draw_shapes (cr); if (_tmp_obj) { /* this is a bit of a hack */ gdouble dash = 4.; _tmp_obj->selected |= 4; cairo_set_source_rgb (cr, 1., 0., 1.); cairo_set_dash (cr, &dash, 1, dash); object_draw (_tmp_obj, cr); } cairo_destroy (cr); return FALSE; }
internal void render_all(SDL_Renderer *renderer, SDL_Texture *screen, PT_Console *console) { PT_ConsoleClear(console); // Render the map for (u32 y = 0; y < MAP_HEIGHT; y++) { for (u32 x = 0; x < MAP_WIDTH; x++) { if (map[x][y].blockSight) { PT_ConsolePutCharAt(console, '#', x, y, COLOR_DARK_WALL, 0x000000ff); } else { PT_ConsolePutCharAt(console, '.', x, y, COLOR_DARK_FLOOR, 0x000000ff); } } } object_list_item *item = gameObjects.first; while (item != NULL) { object_draw(console, item->object); item = item->next; } SDL_UpdateTexture(screen, NULL, console->pixels, console->width * sizeof(u32)); SDL_RenderClear(renderer); SDL_RenderCopy(renderer, screen, NULL, NULL); SDL_RenderPresent(renderer); }