You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1563 lines
43 KiB

#include <config.h>
#ifndef GNOMELOCALEDIR
#define GNOMELOCALEDIR "/usr/share/locale"
#endif
#include <locale.h>
#ifdef ENABLE_NLS
# include <libintl.h>
# define _(String) gettext (String)
# ifdef gettext_noop
# define N_(String) gettext_noop (String)
# else
# define N_(String) (String)
# endif
#else
/* Stubs that do something close enough. */
# define textdomain(String) (String)
# define gettext(String) (String)
# define dgettext(Domain,Message) (Message)
# define dcgettext(Domain,Message,Type) (Message)
# define bindtextdomain(Domain,Directory) (Domain)
# define _(String) (String)
# define N_(String) (String)
#endif
#include <gdk/gdk.h>
#include <gdk_imlib.h>
#include <gtk/gtk.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/Xos.h>
#include <gdk/gdkprivate.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
GtkWidget *note = NULL;
GtkWidget *pg1 = NULL;
GtkWidget *pg2 = NULL;
GtkWidget *pg3 = NULL;
GtkWidget *pg4 = NULL;
GtkWidget *win = NULL;
GdkPixmap *brightness_pmap = NULL;
GdkPixmap *brightness_mask = NULL;
GdkPixmap *gamma_pmap = NULL;
GdkPixmap *gamma_mask = NULL;
GdkPixmap *contrast_pmap = NULL;
GdkPixmap *contrast_mask = NULL;
GtkWidget *list = NULL;
GtkWidget *filesel = NULL;
GtkWidget *pal_text = NULL;
GdkImlibImage *test_im = NULL;
GtkWidget *test_area = NULL;
int save;
int up;
int vis_num;
extern int testimg_x;
extern int testimg_y;
extern unsigned char testimg[];
extern unsigned char brightness_icon[];
extern unsigned char gamma_icon[];
extern unsigned char contrast_icon[];
struct _conf
{
char *palettefile;
char paletteoverride;
char dither;
char remap;
char highquality;
char mitshm;
char shmmax;
int shmmaxsize;
char sharedpixmap;
char fastrender;
char imagecache;
int imagecachesize;
char pixmapcache;
int pixmapcachesize;
char forcevisualid;
int visualid;
char fallback;
char ordered;
GdkImlibColorModifier mod, rmod, gmod, bmod;
}
conf;
struct _val
{
int *setting;
int value;
GtkWidget *text;
};
struct _vint
{
GtkObject *adj;
GtkWidget *range;
int *value;
};
struct _color
{
int number;
int color[256][3];
int cur_color;
char copy;
char spread;
char del;
char setlast;
GdkImlibImage *pal_im;
GdkPixmap *pmap;
GtkWidget *pal_widget;
GtkWidget *col_widget;
}
color;
struct _vis
{
int id;
int depth;
char *name;
}
*vislist;
GdkImlibImage *
make_pal_image()
{
GdkImlibImage *im;
unsigned char *dat;
dat = malloc(256 * 3);
im = gdk_imlib_create_image_from_data(dat, NULL, 16, 16);
free(dat);
return im;
}
void
make_test_image()
{
test_im = gdk_imlib_create_image_from_data(testimg, NULL, testimg_x, testimg_y);
}
void
kill_win(GtkWidget * widget, gpointer * data)
{
exit(0);
}
void
col_copy(GtkWidget * widget, gpointer * data)
{
color.copy = 1;
}
void
col_spread(GtkWidget * widget, gpointer * data)
{
color.spread = 1;
}
void
col_del(GtkWidget * widget, gpointer * data)
{
color.del = 1;
}
void
col_setlast(GtkWidget * widget, gpointer * data)
{
color.setlast = 1;
}
void
make_win()
{
GtkWidget *box1;
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(win), "delete_event",
GTK_SIGNAL_FUNC(kill_win), NULL);
gtk_container_set_border_width(GTK_CONTAINER(win), 4);
gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1);
gtk_window_set_title(GTK_WINDOW(win), _("Imlib Config Editor"));
gtk_window_set_wmclass(GTK_WINDOW(win), "Imlib Config Editor", "Config");
box1 = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(win), box1);
gtk_widget_show(box1);
list = box1;
}
void
toggle_onoff(GtkWidget * widget, char *value)
{
if (!up)
return;
if (*value)
*value = 0;
else
*value = 1;
}
void
redraw_palette(void)
{
int i, j;
unsigned char *ptr;
GdkGC *gc;
GdkColor clr;
GdkColormap *cmap;
if (color.pmap)
gdk_imlib_free_pixmap(color.pmap);
ptr = color.pal_im->rgb_data;
for (i = 0; i < 256; i++)
{
for (j = 0; j < 3; j++)
{
*ptr++ = color.color[i][j];
}
}
gdk_imlib_render(color.pal_im, 128, 128);
color.pmap = gdk_imlib_move_image(color.pal_im);
gdk_window_set_back_pixmap(color.pal_widget->window, color.pmap, FALSE);
gdk_imlib_changed_image(color.pal_im);
gdk_window_clear(color.pal_widget->window);
gc = gdk_gc_new(color.pal_widget->window);
cmap = gdk_colormap_get_system();
gdk_color_white(cmap, &clr);
gdk_gc_set_foreground(gc, &clr);
gdk_gc_set_function(gc, GDK_XOR);
gdk_draw_rectangle(color.pal_widget->window, gc, 0,
(color.cur_color % 16) * 8, (color.cur_color & 0xf0) / 2,
7, 7);
gdk_gc_destroy(gc);
gdk_flush();
}
void
change_col(GtkWidget * widget, GtkWidget * w)
{
gdouble col[4];
int r, g, b;
gtk_color_selection_get_color(GTK_COLOR_SELECTION(w), col);
if (color.cur_color >= 0)
{
r = (int)(col[0] * (gdouble) 255);
g = (int)(col[1] * (gdouble) 255);
b = (int)(col[2] * (gdouble) 255);
if ((r != color.color[color.cur_color][0]) ||
(g != color.color[color.cur_color][1]) ||
(b != color.color[color.cur_color][2]))
{
color.color[color.cur_color][0] = r;
color.color[color.cur_color][1] = g;
color.color[color.cur_color][2] = b;
}
}
redraw_palette();
}
void
update_test()
{
GdkPixmap *pmap;
gdk_imlib_set_image_modifier(test_im, &conf.mod);
gdk_imlib_set_image_red_modifier(test_im, &conf.rmod);
gdk_imlib_set_image_green_modifier(test_im, &conf.gmod);
gdk_imlib_set_image_blue_modifier(test_im, &conf.bmod);
gdk_imlib_render(test_im, testimg_x, testimg_y);
pmap = gdk_imlib_move_image(test_im);
gdk_window_set_back_pixmap(test_area->window, pmap, FALSE);
gdk_window_clear(test_area->window);
gdk_imlib_free_pixmap(pmap);
}
void
change_val(GtkWidget * widget, struct _val *v)
{
char s[256];
*(v->setting) = v->value;
g_snprintf(s, 256, "%i", *(v->setting));
gtk_entry_set_text(GTK_ENTRY(v->text), s);
}
void
enter_val(GtkWidget * widget, struct _val *v)
{
char *s;
s = gtk_entry_get_text(GTK_ENTRY(v->text));
*(v->setting) = atoi(s);
}
void
pal_press(GtkWidget * widget, GdkEventButton * event)
{
int x, y, n, nn, i, ii;
gdouble col[4];
unsigned char *ptr;
x = (event->x) / 8;
y = (event->y) / 8;
n = color.cur_color;
color.cur_color = (y * 16) + x;
if (color.copy)
{
color.color[color.cur_color][0] = color.color[n][0];
color.color[color.cur_color][1] = color.color[n][1];
color.color[color.cur_color][2] = color.color[n][2];
}
else if (color.spread)
{
if (n < color.cur_color)
{
nn = color.cur_color - n;
for (i = 0; i < nn; i++)
{
ii = n + i;
color.color[ii][0] = ((color.color[n][0] * (nn - i)) + (color.color[color.cur_color][0] * i)) / nn;
color.color[ii][1] = ((color.color[n][1] * (nn - i)) + (color.color[color.cur_color][1] * i)) / nn;
color.color[ii][2] = ((color.color[n][2] * (nn - i)) + (color.color[color.cur_color][2] * i)) / nn;
}
}
else
{
nn = n - color.cur_color;
for (i = 0; i < nn; i++)
{
ii = color.cur_color + i;
color.color[ii][0] = ((color.color[n][0] * i) + (color.color[color.cur_color][0] * (nn - i))) / nn;
color.color[ii][1] = ((color.color[n][1] * i) + (color.color[color.cur_color][1] * (nn - i))) / nn;
color.color[ii][2] = ((color.color[n][2] * i) + (color.color[color.cur_color][2] * (nn - i))) / nn;
}
}
}
else if (color.del)
{
ptr = color.pal_im->rgb_data;
for (i = color.cur_color; i < 255; i++)
{
color.color[i][0] = color.color[i + 1][0];
color.color[i][1] = color.color[i + 1][1];
color.color[i][2] = color.color[i + 1][2];
}
color.color[255][0] = 0;
color.color[255][1] = 0;
color.color[255][2] = 0;
color.number--;
if (color.number < 0)
color.number = 0;
}
else if (color.setlast)
{
color.number = color.cur_color + 1;
for (i = color.number; i < 256; i++)
{
color.color[i][0] = 0;
color.color[i][1] = 0;
color.color[i][2] = 0;
}
}
col[0] = ((gdouble) color.color[color.cur_color][0]) / 255;
col[1] = ((gdouble) color.color[color.cur_color][1]) / 255;
col[2] = ((gdouble) color.color[color.cur_color][2]) / 255;
col[3] = 0;
color.copy = 0;
color.setlast = 0;
color.spread = 0;
color.del = 0;
gtk_color_selection_set_color(GTK_COLOR_SELECTION(color.col_widget), col);
change_col(NULL, color.col_widget);
}
void
showhide(GtkWidget * widget, GtkWidget * w)
{
if (GTK_WIDGET_VISIBLE(w))
gtk_widget_hide(w);
else
{
gtk_window_set_position(GTK_WINDOW(w), GTK_WIN_POS_MOUSE);
gtk_widget_show(w);
}
}
void
change_str(GtkWidget * widget, GtkWidget * w)
{
char *s;
s = gtk_entry_get_text(GTK_ENTRY(w));
if (conf.palettefile)
free(conf.palettefile);
conf.palettefile = NULL;
conf.palettefile = strdup(s);
}
void
pal_load(GtkWidget * widget, GtkWidget * w)
{
if (conf.palettefile)
gtk_file_selection_set_filename(GTK_FILE_SELECTION(w), conf.palettefile);
showhide(NULL, w);
}
void
pal_save(GtkWidget * widget, GtkWidget * w)
{
save = 1;
if (conf.palettefile)
gtk_file_selection_set_filename(GTK_FILE_SELECTION(w), conf.palettefile);
showhide(NULL, w);
}
void
load_pal(char *f)
{
FILE *ff;
int r, g, b, i;
char s[1024];
setlocale(LC_ALL, "C");
ff = fopen(f, "r");
if (ff)
{
color.number = 0;
while (fgets(s, 256, ff))
{
sscanf(s, "%x %x %x", &r, &g, &b);
if (r < 0)
r = 0;
if (r > 255)
r = 255;
if (g < 0)
g = 0;
if (g > 255)
g = 255;
if (b < 0)
b = 0;
if (b > 255)
b = 255;
color.color[color.number][0] = r;
color.color[color.number][1] = g;
color.color[color.number][2] = b;
color.number++;
if (color.number > 255)
break;
}
fclose(ff);
}
for (i = color.number; i < 256; i++)
{
color.color[i][0] = 0;
color.color[i][1] = 0;
color.color[i][2] = 0;
}
setlocale(LC_ALL, "");
}
void
save_pal(char *f)
{
FILE *ff;
int i;
setlocale(LC_ALL, "C");
ff = fopen(f, "w");
if (ff)
{
for (i = 0; i < color.number; i++)
fprintf(ff, "0x%x 0x%x 0x%x\n", color.color[i][0], color.color[i][1], color.color[i][2]);
fclose(ff);
}
setlocale(LC_ALL, "");
}
void
read_imrc(FILE * f)
{
char s[2048];
char s1[1024], s2[1024];
if (!f)
return;
if (conf.palettefile)
free(conf.palettefile);
conf.palettefile = NULL;
conf.paletteoverride = 0;
conf.dither = 1;
conf.remap = 1;
conf.highquality = 0;
conf.mitshm = 1;
conf.shmmax = 0;
conf.shmmaxsize = 1000000;
conf.sharedpixmap = 0;
conf.fastrender = 1;
conf.imagecache = 1;
conf.imagecachesize = 4000000;
conf.pixmapcache = 1;
conf.pixmapcachesize = 40000000;
conf.forcevisualid = 0;
conf.visualid = -1;
conf.fallback = 1;
while (fgets(s, 2048, f))
{
if (s[0] != '#')
{
if (sscanf(s, "%1000s %1000s", s1, s2) != 2)
continue;
if (!strcasecmp(s1, "PaletteFile"))
{
conf.palettefile = strdup(s2);
}
if (!strcasecmp(s1, "PaletteOverride"))
{
if (!strcasecmp(s2, "yes"))
conf.paletteoverride = 1;
else
conf.paletteoverride = 0;
}
if (!strcasecmp(s1, "Dither"))
{
if (!strcasecmp(s2, "yes"))
conf.dither = 1;
else
conf.dither = 0;
}
if (!strcasecmp(s1, "Remap"))
{
if (!strcasecmp(s2, "fast"))
conf.remap = 1;
else
conf.remap = 0;
}
if (!strcasecmp(s1, "HighQuality"))
{
if (!strcasecmp(s2, "on"))
conf.highquality = 1;
else
conf.highquality = 0;
}
if (!strcasecmp(s1, "Mit-Shm"))
{
#ifdef HAVE_SHM
if (!strcasecmp(s2, "on"))
conf.mitshm = 1;
else
#endif
conf.mitshm = 0;
}
if (!strcasecmp(s1, "SharedPixmaps"))
{
#ifdef HAVE_SHM
if (!strcasecmp(s2, "on"))
conf.sharedpixmap = 1;
else
#endif
conf.sharedpixmap = 0;
}
if (!strcasecmp(s1, "FastRender"))
{
if (!strcasecmp(s2, "on"))
conf.fastrender = 1;
else
conf.fastrender = 0;
}
if (!strcasecmp(s1, "Shm_Max_Size"))
{
conf.shmmax = 1;
conf.shmmaxsize = atoi(s2);
}
if (!strcasecmp(s1, "Image_Cache"))
{
if (!strcasecmp(s2, "on"))
conf.imagecache = 1;
else
conf.imagecache = 0;
}
if (!strcasecmp(s1, "Image_Cache_Size"))
{
conf.imagecachesize = atoi(s2);
}
if (!strcasecmp(s1, "Pixmap_Cache"))
{
if (!strcasecmp(s2, "on"))
conf.pixmapcache = 1;
else
conf.pixmapcache = 0;
}
if (!strcasecmp(s1, "Pixmap_Cache_Size"))
{
conf.pixmapcachesize = atoi(s2);
}
if (!strcasecmp(s1, "ForceVisualID"))
{
conf.forcevisualid = 1;
conf.visualid = atoi(s2);
}
if (!strcasecmp(s1, "Fallback"))
{
if (!strcasecmp(s2, "on"))
conf.fallback = 1;
else
conf.fallback = 0;
}
if (!strcasecmp("Gamma", s1))
{
conf.mod.gamma = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Brightness", s1))
{
conf.mod.brightness = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Contrast", s1))
{
conf.mod.contrast = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Red_Gamma", s1))
{
conf.rmod.gamma = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Red_Brightness", s1))
{
conf.rmod.brightness = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Red_Contrast", s1))
{
conf.rmod.contrast = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Green_Gamma", s1))
{
conf.gmod.gamma = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Green_Brightness", s1))
{
conf.gmod.brightness = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Green_Contrast", s1))
{
conf.gmod.contrast = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Blue_Gamma", s1))
{
conf.bmod.gamma = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Blue_Brightness", s1))
{
conf.bmod.brightness = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Blue_Contrast", s1))
{
conf.bmod.contrast = (int)(256.0 * atof(s2));
}
if (!strcasecmp("Ordered_Dither", s1))
{
if (!strcasecmp(s2, "on"))
conf.ordered = 1;
else
conf.ordered = 0;
}
}
}
if (conf.palettefile)
load_pal(conf.palettefile);
fclose(f);
}
void
write_imrc(FILE * f)
{
if (!f)
return;
if (conf.palettefile)
fprintf(f, "PaletteFile %s\n", conf.palettefile);
if (conf.paletteoverride)
fprintf(f, "PaletteOverride yes\n");
else
fprintf(f, "PaletteOverride no\n");
if (conf.dither)
fprintf(f, "Dither yes\n");
else
fprintf(f, "Dither no\n");
if (conf.remap)
fprintf(f, "Remap fast\n");
else
fprintf(f, "Remap slow\n");
if (conf.highquality)
fprintf(f, "HighQuality on\n");
else
fprintf(f, "HighQuality off\n");
if (conf.mitshm)
fprintf(f, "Mit-Shm on\n");
else
fprintf(f, "Mit-Shm off\n");
if (conf.sharedpixmap)
fprintf(f, "SharedPixmaps on\n");
else
fprintf(f, "SharedPixmaps off\n");
if (conf.fastrender)
fprintf(f, "FastRender on\n");
else
fprintf(f, "FastRender off\n");
if (conf.shmmax)
fprintf(f, "Shm_Max_Size %i\n", conf.shmmaxsize);
if (conf.imagecache)
fprintf(f, "Image_Cache on\n");
else
fprintf(f, "Image_Cache off\n");
fprintf(f, "Image_Cache_Size %i\n", conf.imagecachesize);
if (conf.pixmapcache)
fprintf(f, "Pixmap_Cache on\n");
else
fprintf(f, "Pixmap_Cache off\n");
fprintf(f, "Pixmap_Cache_Size %i\n", conf.pixmapcachesize);
if (conf.forcevisualid)
fprintf(f, "ForceVisualID %x\n", conf.visualid);
if (conf.fallback)
fprintf(f, "Fallback on\n");
else
fprintf(f, "Fallback off\n");
fprintf(f, "Gamma %f\n", ((double)conf.mod.gamma) / 256.0);
fprintf(f, "Brightness %f\n", ((double)conf.mod.brightness) / 256.0);
fprintf(f, "Contrast %f\n", ((double)conf.mod.contrast) / 256.0);
fprintf(f, "Red_Gamma %f\n", ((double)conf.rmod.gamma) / 256.0);
fprintf(f, "Red_Brightness %f\n", ((double)conf.rmod.brightness) / 256.0);
fprintf(f, "Red_Contrast %f\n", ((double)conf.rmod.contrast) / 256.0);
fprintf(f, "Green_Gamma %f\n", ((double)conf.gmod.gamma) / 256.0);
fprintf(f, "Green_Brightness %f\n", ((double)conf.gmod.brightness) / 256.0);
fprintf(f, "Green_Contrast %f\n", ((double)conf.gmod.contrast) / 256.0);
fprintf(f, "Blue_Gamma %f\n", ((double)conf.bmod.gamma) / 256.0);
fprintf(f, "Blue_Brightness %f\n", ((double)conf.bmod.brightness) / 256.0);
fprintf(f, "Blue_Contrast %f\n", ((double)conf.bmod.contrast) / 256.0);
if (conf.ordered)
fprintf(f, "Ordered_Dither on\n");
else
fprintf(f, "Ordered_Dither off\n");
fclose(f);
if (conf.palettefile)
save_pal(conf.palettefile);
}
void
load_imrc()
{
char *h, s[2048];
FILE *f;
h = getenv("HOME");
g_snprintf(s, 2048, "%s/.imrc", h);
setlocale(LC_ALL, "C");
f = fopen(s, "r");
if (!f)
{
h = gdk_imlib_get_sysconfig();
f = fopen(h, "r");
free(h);
}
read_imrc(f);
setlocale(LC_ALL, "");
}
void
save_user(GtkWidget * widget, gpointer * data)
{
char *h, s[2048];
FILE *f;
h = getenv("HOME");
g_snprintf(s, 2048, "%s/.imrc", h);
f = fopen(s, "w");
setlocale(LC_ALL, "C");
write_imrc(f);
setlocale(LC_ALL, "");
}
void
save_sys(GtkWidget * widget, gpointer * data)
{
char *h;
FILE *f;
h = gdk_imlib_get_sysconfig();
f = fopen(h, "w");
free(h);
setlocale(LC_ALL, "C");
write_imrc(f);
setlocale(LC_ALL, "");
}
void
read_file(GtkWidget * widget, GtkWidget * w)
{
char *s;
s = gtk_file_selection_get_filename(GTK_FILE_SELECTION(w));
showhide(NULL, w);
if (save)
{
save_pal(s);
gtk_entry_set_text(GTK_ENTRY(pal_text), s);
}
else
{
load_pal(s);
gtk_entry_set_text(GTK_ENTRY(pal_text), s);
redraw_palette();
}
}
void
mod_int(GtkWidget * widget, struct _vint *v)
{
*(v->value) = (int)GTK_ADJUSTMENT(v->adj)->value;
update_test();
}
void
reset_int(GtkWidget * widget, struct _vint *v)
{
gtk_adjustment_set_value(GTK_ADJUSTMENT(v->adj), 256.0);
}
void
expose(GtkWidget * widget, gpointer * data)
{
update_test();
}
void
add_test(GtkWidget * w)
{
GtkWidget *box, *area, *contain;
make_test_image();
box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(w), box, FALSE, FALSE, 0);
gtk_widget_show(box);
contain = gtk_viewport_new(NULL, NULL);
gtk_widget_set_usize(contain, testimg_x + 4, testimg_y + 4);
gtk_box_pack_start(GTK_BOX(box), contain, TRUE, FALSE, 0);
gtk_widget_show(contain);
area = gtk_drawing_area_new();
gtk_drawing_area_size(GTK_DRAWING_AREA(area), testimg_x, testimg_y);
gtk_widget_set_usize(area, testimg_x, testimg_y);
gtk_container_add(GTK_CONTAINER(contain), area);
gtk_widget_show(area);
gtk_signal_connect(GTK_OBJECT(area), "expose_event", GTK_SIGNAL_FUNC(expose), NULL);
test_area = area;
}
void
add_slider(GtkWidget * w, int *value, GtkWidget * ic)
{
GtkObject *adj;
GtkWidget *range, *button, *box;
struct _vint *v;
box = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(w), box, FALSE, FALSE, 0);
gtk_widget_show(box);
adj = gtk_adjustment_new((gfloat) * value, 0.0, 1024.0, 1.0, 8.0, 0.0);
range = gtk_hscale_new(GTK_ADJUSTMENT(adj));
gtk_widget_set_usize(range, 200, 12);
gtk_range_set_update_policy(GTK_RANGE(range), GTK_UPDATE_CONTINUOUS);
gtk_scale_set_draw_value(GTK_SCALE(range), FALSE);
v = malloc(sizeof(struct _vint));
v->adj = adj;
v->range = range;
v->value = value;
gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(mod_int), v);
gtk_box_pack_start(GTK_BOX(box), range, FALSE, FALSE, 0);
gtk_widget_show(range);
button = gtk_button_new();
gtk_container_add(GTK_CONTAINER(button), ic);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(reset_int), v);
gtk_widget_show(button);
gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
}
void
make_icons()
{
GdkImlibImage *im;
GdkImlibColor icl;
icl.r = 255;
icl.g = 0;
icl.b = 255;
im = gdk_imlib_create_image_from_data(brightness_icon, NULL, 12, 12);
gdk_imlib_set_image_shape(im, &icl);
gdk_imlib_render(im, im->rgb_width, im->rgb_height);
brightness_pmap = gdk_imlib_move_image(im);
brightness_mask = gdk_imlib_move_mask(im);
gdk_imlib_kill_image(im);
im = gdk_imlib_create_image_from_data(contrast_icon, NULL, 12, 12);
gdk_imlib_set_image_shape(im, &icl);
gdk_imlib_render(im, im->rgb_width, im->rgb_height);
contrast_pmap = gdk_imlib_move_image(im);
contrast_mask = gdk_imlib_move_mask(im);
gdk_imlib_kill_image(im);
im = gdk_imlib_create_image_from_data(gamma_icon, NULL, 12, 12);
gdk_imlib_set_image_shape(im, &icl);
gdk_imlib_render(im, im->rgb_width, im->rgb_height);
gamma_pmap = gdk_imlib_move_image(im);
gamma_mask = gdk_imlib_move_mask(im);
gdk_imlib_kill_image(im);
}
void
add_sliders(GtkWidget * w)
{
GtkWidget *frame, *box, *box0, *box1, *i1, *i2, *i3;
make_icons();
box0 = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(w), box0);
gtk_widget_show(box0);
box1 = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(box0), box1);
gtk_widget_show(box1);
i1 = gtk_pixmap_new(gamma_pmap, gamma_mask);
gtk_widget_show(i1);
i2 = gtk_pixmap_new(brightness_pmap, brightness_mask);
gtk_widget_show(i2);
i3 = gtk_pixmap_new(contrast_pmap, contrast_mask);
gtk_widget_show(i3);
frame = gtk_aspect_frame_new(_("Base Levels"), 0.5, 0.5, 0.0, TRUE);
gtk_box_pack_start(GTK_BOX(box1), frame, FALSE, FALSE, 4);
/* gtk_widget_show(frame); */
box = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(frame), box);
gtk_widget_show(box);
add_slider(box, &conf.mod.gamma, i1);
add_slider(box, &conf.mod.brightness, i2);
add_slider(box, &conf.mod.contrast, i3);
i1 = gtk_pixmap_new(gamma_pmap, gamma_mask);
gtk_widget_show(i1);
i2 = gtk_pixmap_new(brightness_pmap, brightness_mask);
gtk_widget_show(i2);
i3 = gtk_pixmap_new(contrast_pmap, contrast_mask);
gtk_widget_show(i3);
frame = gtk_aspect_frame_new(_("Red Levels"), 0.5, 0.5, 0.0, TRUE);
gtk_box_pack_start(GTK_BOX(box1), frame, FALSE, FALSE, 4);
gtk_widget_show(frame);
box = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(frame), box);
gtk_widget_show(box);
add_slider(box, &conf.rmod.gamma, i1);
add_slider(box, &conf.rmod.brightness, i2);
add_slider(box, &conf.rmod.contrast, i3);
i1 = gtk_pixmap_new(gamma_pmap, gamma_mask);
gtk_widget_show(i1);
i2 = gtk_pixmap_new(brightness_pmap, brightness_mask);
gtk_widget_show(i2);
i3 = gtk_pixmap_new(contrast_pmap, contrast_mask);
gtk_widget_show(i3);
frame = gtk_aspect_frame_new(_("Green Levels"), 0.5, 0.5, 0.0, TRUE);
gtk_box_pack_start(GTK_BOX(box1), frame, FALSE, FALSE, 4);
gtk_widget_show(frame);
box = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(frame), box);
gtk_widget_show(box);
add_slider(box, &conf.gmod.gamma, i1);
add_slider(box, &conf.gmod.brightness, i2);
add_slider(box, &conf.gmod.contrast, i3);
i1 = gtk_pixmap_new(gamma_pmap, gamma_mask);
gtk_widget_show(i1);
i2 = gtk_pixmap_new(brightness_pmap, brightness_mask);
gtk_widget_show(i2);
i3 = gtk_pixmap_new(contrast_pmap, contrast_mask);
gtk_widget_show(i3);
frame = gtk_aspect_frame_new(_("Blue Levels"), 0.5, 0.5, 0.0, TRUE);
gtk_box_pack_start(GTK_BOX(box1), frame, FALSE, FALSE, 4);
gtk_widget_show(frame);
box = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(frame), box);
gtk_widget_show(box);
add_slider(box, &conf.bmod.gamma, i1);
add_slider(box, &conf.bmod.brightness, i2);
add_slider(box, &conf.bmod.contrast, i3);
add_test(box0);
}
void
inbuilt_pal(GtkWidget *widget, char *p)
{
char s[4096], *def;
int i;
def = gdk_imlib_get_sysconfig();
for (i = strlen(def) - 1; ((i >= 0) && (def[i] != '/')); def[i--] = 0);
g_snprintf(s, sizeof(s), "%s%s", def, p);
free(def);
load_pal(s);
gtk_entry_set_text(GTK_ENTRY(pal_text), s);
redraw_palette();
}
void
add_palsel(GtkWidget * w, char *title, char **value)
{
GtkWidget *button, *box, *box2, *box3, *text, *filesel, *colsel,
*pals, *contain;
box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(w), box, TRUE, TRUE, 0);
gtk_widget_show(box);
box2 = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
gtk_widget_show(box2);
button = gtk_button_new_with_label(_("Small colour set"));
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(inbuilt_pal), "im_palette-tiny.pal");
button = gtk_button_new_with_label(_("Medium colour set"));
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(inbuilt_pal), "im_palette-small.pal");
button = gtk_button_new_with_label(_("Large colour set"));
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(inbuilt_pal), "im_palette.pal");
box2 = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
gtk_widget_show(box2);
filesel = gtk_file_selection_new(_("Select Palette File"));
gtk_signal_connect(GTK_OBJECT(filesel), "destroy",
GTK_SIGNAL_FUNC(showhide), filesel);
gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
"clicked", GTK_SIGNAL_FUNC(showhide),
GTK_OBJECT(filesel));
gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button),
"clicked", GTK_SIGNAL_FUNC(read_file), filesel);
button = gtk_button_new_with_label(_("Select"));
gtk_box_pack_start(GTK_BOX(box2), button, FALSE, FALSE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pal_load), filesel);
text = gtk_entry_new_with_max_length(1024);
gtk_box_pack_start(GTK_BOX(box2), text, TRUE, TRUE, 2);
gtk_widget_show(text);
if (*value)
gtk_entry_set_text(GTK_ENTRY(text), *value);
else
gtk_entry_set_text(GTK_ENTRY(text), "");
gtk_signal_connect(GTK_OBJECT(text), "changed", GTK_SIGNAL_FUNC(change_str), text);
pal_text = text;
button = gtk_button_new_with_label(_("Save"));
gtk_box_pack_start(GTK_BOX(box2), button, FALSE, FALSE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pal_save), filesel);
box2 = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
gtk_widget_show(box2);
box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box2), box, FALSE, FALSE, 0);
gtk_widget_show(box);
contain = gtk_viewport_new(NULL, NULL);
gtk_widget_set_usize(contain, 132, 132);
gtk_box_pack_start(GTK_BOX(box), contain, FALSE, FALSE, 0);
gtk_widget_show(contain);
pals = gtk_drawing_area_new();
gtk_drawing_area_size(GTK_DRAWING_AREA(pals), 128, 128);
gtk_widget_set_usize(pals, 128, 128);
gtk_container_add(GTK_CONTAINER(contain), pals);
gtk_widget_show(pals);
color.pal_widget = pals;
color.pal_im = make_pal_image();
gtk_signal_connect(GTK_OBJECT(pals), "button_press_event", GTK_SIGNAL_FUNC(pal_press), NULL);
gtk_widget_set_events(pals, GDK_BUTTON_PRESS_MASK);
box3 = gtk_hbox_new(TRUE, 2);
gtk_box_pack_start(GTK_BOX(box), box3, TRUE, TRUE, 2);
gtk_widget_show(box3);
button = gtk_button_new_with_label(_("Copy To"));
gtk_box_pack_start(GTK_BOX(box3), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(col_copy), NULL);
button = gtk_button_new_with_label(_("Spread To"));
gtk_box_pack_start(GTK_BOX(box3), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(col_spread), NULL);
box3 = gtk_hbox_new(TRUE, 2);
gtk_box_pack_start(GTK_BOX(box), box3, TRUE, TRUE, 2);
gtk_widget_show(box3);
button = gtk_button_new_with_label(_("Set Last"));
gtk_box_pack_start(GTK_BOX(box3), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(col_setlast), NULL);
button = gtk_button_new_with_label(_("Delete"));
gtk_box_pack_start(GTK_BOX(box3), button, TRUE, TRUE, 2);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(col_del), NULL);
colsel = gtk_color_selection_new();
gtk_box_pack_start(GTK_BOX(box2), colsel, FALSE, FALSE, 0);
gtk_widget_show(colsel);
gtk_signal_connect(GTK_OBJECT(colsel), "color_changed", GTK_SIGNAL_FUNC(change_col), colsel);
color.col_widget = colsel;
}
void
add_note(char *p1, char *p2, char *p3, char *p4)
{
GtkWidget *label, *box, *box2;
note = gtk_notebook_new();
gtk_widget_show(note);
box = gtk_vbox_new(FALSE, 0);
box2 = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, FALSE, FALSE, 0);
pg1 = box2;
label = gtk_label_new(p1);
gtk_widget_show(box);
gtk_widget_show(box2);
gtk_widget_show(label);
gtk_notebook_append_page(GTK_NOTEBOOK(note), box, label);
box = gtk_vbox_new(FALSE, 0);
box2 = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, FALSE, FALSE, 0);
pg2 = box2;
label = gtk_label_new(p2);
gtk_widget_show(box);
gtk_widget_show(box2);
gtk_widget_show(label);
gtk_notebook_append_page(GTK_NOTEBOOK(note), box, label);
box = gtk_vbox_new(FALSE, 0);
box2 = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
pg3 = box2;
label = gtk_label_new(p3);
gtk_widget_show(box);
gtk_widget_show(box2);
gtk_widget_show(label);
gtk_notebook_append_page(GTK_NOTEBOOK(note), box, label);
box = gtk_vbox_new(FALSE, 0);
box2 = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, FALSE, FALSE, 0);
pg4 = box2;
label = gtk_label_new(p4);
gtk_widget_show(box);
gtk_widget_show(box2);
gtk_widget_show(label);
gtk_notebook_append_page(GTK_NOTEBOOK(note), box, label);
gtk_box_pack_start(GTK_BOX(list), note, TRUE, TRUE, 0);
}
void
add_onoff(GtkWidget * w, char *title, char *value)
{
GtkWidget *check;
check = gtk_check_button_new_with_label(title);
gtk_box_pack_start(GTK_BOX(w), check, FALSE, FALSE, 2);
gtk_widget_show(check);
gtk_signal_connect(GTK_OBJECT(check), "clicked", GTK_SIGNAL_FUNC(toggle_onoff), value);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), (gint) * value);
}
void
add_onoff_value(GtkWidget * w, char *title, char *value, int *setting,
char *pre1str, int pre1,
char *pre2str, int pre2,
char *pre3str, int pre3,
char *pre4str, int pre4,
char *pre5str, int pre5,
char *pre6str, int pre6)
{
struct _val *v;
GtkWidget *check, *button, *box, *box2, *text;
char s[256];
box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(w), box, TRUE, TRUE, 0);
gtk_widget_show(box);
check = gtk_check_button_new_with_label(title);
gtk_box_pack_start(GTK_BOX(box), check, FALSE, FALSE, 2);
gtk_widget_show(check);
gtk_signal_connect(GTK_OBJECT(check), "clicked", GTK_SIGNAL_FUNC(toggle_onoff), value);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), (gint) * value);
box2 = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
gtk_widget_show(box2);
text = gtk_entry_new_with_max_length(11);
gtk_box_pack_start(GTK_BOX(box2), text, FALSE, FALSE, 0);
gtk_widget_show(text);
v = malloc(sizeof(struct _val));
v->value = pre1;
v->setting = setting;
v->text = text;
g_snprintf(s, 256, "%i", *setting);
gtk_entry_set_text(GTK_ENTRY(text), s);
gtk_signal_connect(GTK_OBJECT(text), "changed", GTK_SIGNAL_FUNC(enter_val), v);
button = gtk_button_new_with_label(pre1str);
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
gtk_widget_show(button);
v = malloc(sizeof(struct _val));
v->value = pre1;
v->setting = setting;
v->text = text;
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(change_val), v);
button = gtk_button_new_with_label(pre2str);
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
gtk_widget_show(button);
v = malloc(sizeof(struct _val));
v->value = pre2;
v->setting = setting;
v->text = text;
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(change_val), v);
button = gtk_button_new_with_label(pre3str);
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
gtk_widget_show(button);
v = malloc(sizeof(struct _val));
v->value = pre3;
v->setting = setting;
v->text = text;
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(change_val), v);
button = gtk_button_new_with_label(pre4str);
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
gtk_widget_show(button);
v = malloc(sizeof(struct _val));
v->value = pre4;
v->setting = setting;
v->text = text;
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(change_val), v);
button = gtk_button_new_with_label(pre5str);
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
gtk_widget_show(button);
v = malloc(sizeof(struct _val));
v->value = pre5;
v->setting = setting;
v->text = text;
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(change_val), v);
button = gtk_button_new_with_label(pre6str);
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
gtk_widget_show(button);
v = malloc(sizeof(struct _val));
v->value = pre6;
v->setting = setting;
v->text = text;
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(change_val), v);
}
void
click_list(GtkWidget * widget, gint row)
{
conf.visualid = vislist[row].id;
}
void
add_onoff_visual(GtkWidget * w, char *title)
{
GtkWidget *check, *box, *box2, *clist, *scrolled_win;
char s[256], *ss[3];
const char *titles[] =
{
"Visual Type",
"Depth",
"ID"
};
int i;
box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(w), box, FALSE, FALSE, 0);
gtk_widget_show(box);
check = gtk_check_button_new_with_label(title);
gtk_box_pack_start(GTK_BOX(box), check, FALSE, FALSE, 2);
gtk_widget_show(check);
gtk_signal_connect(GTK_OBJECT(check), "clicked", GTK_SIGNAL_FUNC(toggle_onoff), &conf.forcevisualid);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), conf.forcevisualid);
box2 = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(w), box2, TRUE, TRUE, 0);
gtk_widget_show(box2);
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
clist = gtk_clist_new_with_titles(3, (char **)titles);
gtk_box_pack_start(GTK_BOX(w), scrolled_win, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_win), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC);
gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(click_list), NULL);
gtk_clist_freeze(GTK_CLIST(clist));
for (i = 0; i < vis_num; i++)
{
ss[0] = strdup(vislist[i].name);
g_snprintf(s, 256, "%i\n", vislist[i].depth);
ss[1] = strdup(s);
g_snprintf(s, 256, "0x%x\n", vislist[i].id);
ss[2] = strdup(s);
gtk_clist_append(GTK_CLIST(clist), ss);
free(ss[0]);
free(ss[1]);
free(ss[2]);
}
gtk_clist_thaw(GTK_CLIST(clist));
gtk_widget_show(clist);
}
void
add_loadsave()
{
GtkWidget *button, *box2;
box2 = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(list), box2, FALSE, FALSE, 8);
gtk_widget_show(box2);
button = gtk_button_new_with_label(_("Save User Config"));
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 32);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_user), NULL);
if (getuid() == 0)
{
button = gtk_button_new_with_label(_("Save System Config"));
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 32);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_sys), NULL);
}
button = gtk_button_new_with_label(_("Close"));
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 32);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(kill_win), NULL);
}
void
ready()
{
gdouble col[4];
unsigned char *ptr;
int i, j;
gtk_widget_show(win);
col[0] = ((gdouble) color.color[color.cur_color][0]) / 255;
col[1] = ((gdouble) color.color[color.cur_color][1]) / 255;
col[2] = ((gdouble) color.color[color.cur_color][2]) / 255;
col[3] = 0;
if (color.pmap)
gdk_imlib_free_pixmap(color.pmap);
ptr = color.pal_im->rgb_data;
for (i = 0; i < 256; i++)
{
for (j = 0; j < 3; j++)
{
*ptr++ = color.color[i][j];
}
}
gdk_imlib_render(color.pal_im, 128, 128);
color.pmap = gdk_imlib_move_image(color.pal_im);
gdk_window_set_back_pixmap(color.pal_widget->window, color.pmap, FALSE);
gdk_imlib_changed_image(color.pal_im);
gdk_window_clear(color.pal_widget->window);
/* update_test(); */
}
void
init_conf()
{
conf.palettefile = NULL;
conf.paletteoverride = 0;
conf.dither = 1;
conf.remap = 1;
conf.highquality = 0;
#ifdef HAVE_SHM
conf.mitshm = 1;
#else
conf.mitshm = 0;
#endif
conf.shmmax = 0;
conf.shmmaxsize = 1000000;
conf.sharedpixmap = 0;
conf.fastrender = 1;
conf.imagecache = 1;
conf.imagecachesize = 4000000;
conf.pixmapcache = 1;
conf.pixmapcachesize = 40000000;
conf.forcevisualid = 0;
conf.forcevisualid = 0;
conf.visualid = -1;
conf.fallback = 1;
conf.mod.gamma = 256;
conf.mod.brightness = 256;
conf.mod.contrast = 256;
conf.rmod.gamma = 256;
conf.rmod.brightness = 256;
conf.rmod.contrast = 256;
conf.gmod.gamma = 256;
conf.gmod.brightness = 256;
conf.gmod.contrast = 256;
conf.bmod.gamma = 256;
conf.bmod.brightness = 256;
conf.bmod.contrast = 256;
conf.ordered = 1;
}
void
list_vis()
{
int num, i;
XVisualInfo xvi, *xvir;
xvir = XGetVisualInfo(gdk_display, 0, &xvi, &num);
vislist = malloc(num * sizeof(struct _vis));
for (i = 0; i < num; i++)
{
vislist[i].id = xvir[i].visualid;
vislist[i].depth = xvir[i].depth;
switch (xvir[i].class)
{
case StaticGray:
vislist[i].name = strdup("StaticGray");
break;
case GrayScale:
vislist[i].name = strdup("GrayScale");
break;
case StaticColor:
vislist[i].name = strdup("StaticColor");
break;
case PseudoColor:
vislist[i].name = strdup("PseudoColor");
break;
case TrueColor:
vislist[i].name = strdup("TrueColor");
break;
case DirectColor:
vislist[i].name = strdup("DirectColor");
break;
default:
break;
}
}
vis_num = num;
XFree(xvir);
}
int
main(int argc, char **argv)
{
gtk_set_locale();
gtk_init(&argc, &argv);
gdk_imlib_init();
list_vis();
gtk_widget_push_visual(gdk_imlib_get_visual());
gtk_widget_push_colormap(gdk_imlib_get_colormap());
color.pmap = NULL;
color.cur_color = 0;
color.copy = 0;
color.spread = 0;
color.setlast = 0;
color.del = 0;
up = 0;
init_conf();
load_imrc();
make_win();
add_note(_("Colors"), _("Rendering"), _("Display"), _("Color Correction"));
add_palsel(pg1, _("Select Palette"), &conf.palettefile);
add_onoff(pg1, _("Force Palette"), &conf.paletteoverride);
add_onoff(pg1, _("Dither in Palette Mode"), &conf.dither);
add_onoff(pg1, _("Fast Remapping in Palette Mode"), &conf.remap);
add_onoff(pg2, _("High Quality in 15/16bpp"), &conf.highquality);
add_onoff_value(pg2, _("Limit Maximum Shared memory Size (bytes)"),
&conf.shmmax, &conf.shmmaxsize,
_("256 Kb"), 256 * 1024,
_("512 Kb"), 512 * 1024,
_("1 Mb"), 1 * 1024 * 1024,
_("2 Mb"), 2 * 1024 * 1024,
_("3 Mb"), 3 * 1024 * 1024,
_("4 Mb"), 4 * 1024 * 1024);
add_onoff(pg2, _("Use Ordered Dithering (Faster)"), &conf.ordered);
add_onoff(pg2, _("MIT-SHM Shared Memory Enabled"), &conf.mitshm);
add_onoff(pg2, _("Shared Pixmaps"), &conf.sharedpixmap);
add_onoff(pg2, _("Fast Render"), &conf.fastrender);
add_onoff(pg2, _("Imagemagick & NETPBM Fallback"), &conf.fallback);
add_onoff_value(pg2, _("Image Cache (bytes)"),
&conf.imagecache, &conf.imagecachesize,
_("512 Kb"), 512 * 1024,
_("1 Mb"), 1024 * 1024,
_("2 Mb"), 2 * 1024 * 1024,
_("4 Mb"), 4 * 1024 * 1024,
_("6 Mb"), 6 * 1024 * 1024,
_("10 Mb"), 10 * 1024 * 1024);
add_onoff_value(pg2, _("Pixmap Cache (bits)"),
&conf.pixmapcache, &conf.pixmapcachesize,
_("5120 Kbits"), 5120 * 1024,
_("10 Mbits"), 10240 * 1024,
_("20 Mbits"), 20 * 1024 * 1024,
_("40 Mbits"), 40 * 1024 * 1024,
_("60 Mbits"), 60 * 1024 * 1024,
_("100 Mbits"), 100 * 1024 * 1024);
add_onoff_visual(pg3, _("Force Visual ID"));
add_sliders(pg4);
add_loadsave();
ready();
up = 1;
gtk_main();
return 0;
}