void draw_qw_skin (GtkWidget *preview, guchar *data, int top, int bottom) { guchar buf[320*3]; guchar colormap[256]; guchar *ptr; int i, j, k; int fixed_top_color = fix_qw_player_color (top); int fixed_bottom_color = fix_qw_player_color (bottom); if (data) { for (i = 0; i < 256; i++) colormap[i] = i; if (fixed_top_color != 1) { for (i = 0; i<16; i++) colormap[16*1 + i] = fixed_top_color*16 + ((fixed_top_color <= 7)? i : 15 - i); } if (fixed_bottom_color != 6) { for (i = 0; i<16; i++) colormap[16*6 + i] = fixed_bottom_color*16 + ((fixed_bottom_color <= 7)? i : 15 - i); } for (i = 0; i < 200; i++) { ptr = buf; for (j = 0; j < 320; j++) { *ptr++ = quake_pallete[colormap[*data] * 3 + 0]; *ptr++ = quake_pallete[colormap[*data] * 3 + 1]; *ptr++ = quake_pallete[colormap[*data] * 3 + 2]; data++; } gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 320); } } else { for (j = 0, k = NOSKIN_WCOLOR; j < 200; j += 40) { i = k; for (ptr = buf; ptr < buf+320*3; ptr += 40*3) { memset (ptr, i, 40*3); i = (NOSKIN_WCOLOR + NOSKIN_BCOLOR) - i; } for (i = 0; i < 40; i++) { gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, j+i, 320); } k = (NOSKIN_WCOLOR + NOSKIN_BCOLOR) - k; } } gtk_widget_draw (preview, NULL); }
void draw_q2_skin (GtkWidget *preview, guchar *data, int scale) { guchar *buf; guchar *ptr; int i, j, k; buf = g_malloc (32*scale*3); if (data) { for (i = 0; i < 32*scale;) { ptr = buf; for (j = 0; j < 32; j++) { for (k = 0; k < scale; k++) { *ptr++ = quake2_pallete[*data * 3 + 0]; *ptr++ = quake2_pallete[*data * 3 + 1]; *ptr++ = quake2_pallete[*data * 3 + 2]; } data++; } for (k = 0; k < scale; k++) { gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i++, 32*scale); } } } else { for (j = 0, k = NOSKIN_WCOLOR; j < 32*scale; j += 32) { i = k; for (ptr = buf; ptr < buf+32*scale*3; ptr += 32*3) { memset (ptr, i, 32*3); i = (NOSKIN_WCOLOR + NOSKIN_BCOLOR) - i; } for (i = 0; i < 32; i++) { gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, j+i, 32*scale); } k = (NOSKIN_WCOLOR + NOSKIN_BCOLOR) - k; } } g_free (buf); gtk_widget_draw (preview, NULL); }
static int about_dialog_load_logo(GtkWidget * window) { GtkWidget *preview; GdkGC *gc; char buf[1024]; char *c; unsigned char *pixelrow; FILE *fp; int count; int i; if (logo_pixmap) return TRUE; snprintf(buf, sizeof(buf), "%s/aube_logo.ppm", DATADIR); fp = fopen(buf, "rb"); if (!fp) return FALSE; c = fgets(buf, 1024, fp); if (!c || strcmp(buf, "P6\n") != 0) goto out_err; if (!fgets(buf, 1024, fp)) goto out_err; if (!fgets(buf, 1024, fp)) goto out_err; sscanf(buf, "%d %d", &logo_width, &logo_height); if (!fgets(buf, 1024, fp)) goto out_err; if (strcmp(buf, "255\n") != 0) goto out_err; preview = gtk_preview_new(GTK_PREVIEW_COLOR); gtk_preview_size(GTK_PREVIEW(preview), logo_width, logo_height); pixelrow = g_new(guchar, logo_width * 3); for (i = 0; i < logo_height; i++) { count = fread(pixelrow, sizeof(unsigned char), logo_width * 3, fp); if (count != (logo_width * 3)) { gtk_widget_destroy(preview); g_free(pixelrow); goto out_err; } gtk_preview_draw_row(GTK_PREVIEW(preview), pixelrow, 0, i, logo_width); } gtk_widget_realize(window); logo_pixmap = gdk_pixmap_new(window->window, logo_width, logo_height, gtk_preview_get_visual()->depth); gc = gdk_gc_new(logo_pixmap); gtk_preview_put(GTK_PREVIEW(preview), logo_pixmap, gc, 0, 0, 0, 0, logo_width, logo_height); gdk_gc_destroy(gc); gtk_widget_unref(preview); g_free(pixelrow); fclose(fp); return TRUE; out_err: fclose(fp); return FALSE; }