Mercurial > geeqie
changeset 1329:1fc356f629fe
Clean up histogram stuff: options saving/restoring, osd histogram separation, tidy up.
author | zas_ |
---|---|
date | Thu, 26 Feb 2009 20:50:36 +0000 |
parents | fb7708d359ea |
children | 8b6e2a47adc7 |
files | src/bar_histogram.c src/histogram.c src/image-overlay.c src/options.c src/options.h src/rcfile.c src/typedefs.h |
diffstat | 7 files changed, 60 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- a/src/bar_histogram.c Thu Feb 26 17:34:14 2009 +0000 +++ b/src/bar_histogram.c Thu Feb 26 20:50:36 2009 +0000 @@ -40,8 +40,6 @@ Histogram *histogram; gint histogram_width; gint histogram_height; - gint histogram_channel; - gint histogram_logmode; GdkPixbuf *pixbuf; FileData *fd; }; @@ -91,8 +89,8 @@ indent++; WRITE_CHAR(*phd, pane.title); WRITE_BOOL(*phd, pane.expanded); - WRITE_INT(*phd, histogram_channel); - WRITE_INT(*phd, histogram_logmode); + WRITE_INT(*phd->histogram, histogram_channel); + WRITE_INT(*phd->histogram, histogram_mode); indent--; WRITE_STRING("/>\n"); } @@ -167,7 +165,6 @@ if (channel == histogram_get_channel(phd->histogram)) return; histogram_set_channel(phd->histogram, channel); - phd->histogram_channel = channel; bar_pane_histogram_update(phd); } @@ -186,7 +183,6 @@ if (logmode == histogram_get_mode(phd->histogram)) return; histogram_set_mode(phd->histogram, logmode); - phd->histogram_logmode = logmode; bar_pane_histogram_update(phd); } @@ -294,7 +290,7 @@ } -GtkWidget *bar_pane_histogram_new(const gchar *title, gint height, gint expanded, gint histogram_channel, gint histogram_logmode) +GtkWidget *bar_pane_histogram_new(const gchar *title, gint height, gint expanded, gint histogram_channel, gint histogram_mode) { PaneHistogramData *phd; @@ -308,7 +304,7 @@ phd->histogram = histogram_new(); histogram_set_channel(phd->histogram, histogram_channel); - histogram_set_mode(phd->histogram, histogram_logmode); + histogram_set_mode(phd->histogram, histogram_mode); phd->widget = gtk_vbox_new(FALSE, PREF_PAD_GAP); @@ -345,7 +341,7 @@ gboolean expanded = TRUE; gint height = 80; gint histogram_channel = HCHAN_RGB; - gint histogram_logmode = 0; + gint histogram_mode = 0; while (*attribute_names) { @@ -355,13 +351,13 @@ if (READ_CHAR_FULL("pane.title", title)) continue; if (READ_BOOL_FULL("pane.expanded", expanded)) continue; if (READ_INT_FULL("histogram_channel", histogram_channel)) continue; - if (READ_INT_FULL("histogram_logmode", histogram_logmode)) continue; + if (READ_INT_FULL("histogram_mode", histogram_mode)) continue; DEBUG_1("unknown attribute %s = %s", option, value); } - return bar_pane_histogram_new(title, height, expanded, histogram_channel, histogram_logmode); + return bar_pane_histogram_new(title, height, expanded, histogram_channel, histogram_mode); }
--- a/src/histogram.c Thu Feb 26 17:34:14 2009 +0000 +++ b/src/histogram.c Thu Feb 26 20:50:36 2009 +0000 @@ -32,27 +32,14 @@ gulong max[HISTMAP_SIZE]; }; -struct _Histogram { - gint channel_mode; /* drawing mode for histogram */ - gint log_mode; /* logarithmical or not */ - guint vgrid; /* number of vertical divisions, 0 for none */ - guint hgrid; /* number of horizontal divisions, 0 for none */ - struct { - int R; /* red */ - int G; /* green */ - int B; /* blue */ - int A; /* alpha */ - } grid_color; /* grid color */ - -}; Histogram *histogram_new(void) { Histogram *histogram; histogram = g_new0(Histogram, 1); - histogram->channel_mode = options->histogram.last_channel_mode; - histogram->log_mode = options->histogram.last_log_mode; + histogram->histogram_channel = HCHAN_RGB; + histogram->histogram_mode = 0; /* grid */ histogram->vgrid = 5; @@ -74,27 +61,27 @@ gint histogram_set_channel(Histogram *histogram, gint chan) { if (!histogram) return 0; - options->histogram.last_channel_mode = histogram->channel_mode = chan; + histogram->histogram_channel = chan; return chan; } gint histogram_get_channel(Histogram *histogram) { if (!histogram) return 0; - return histogram->channel_mode; + return histogram->histogram_channel; } gint histogram_set_mode(Histogram *histogram, gint mode) { if (!histogram) return 0; - options->histogram.last_log_mode = histogram->log_mode = mode; + histogram->histogram_mode = mode; return mode; } gint histogram_get_mode(Histogram *histogram) { if (!histogram) return 0; - return histogram->log_mode; + return histogram->histogram_mode; } gint histogram_toggle_channel(Histogram *histogram) @@ -115,8 +102,8 @@ if (!histogram) return NULL; - if (histogram->log_mode) - switch (histogram->channel_mode) + if (histogram->histogram_mode) + switch (histogram->histogram_channel) { case HCHAN_R: t1 = _("logarithmical histogram on red"); break; case HCHAN_G: t1 = _("logarithmical histogram on green"); break; @@ -125,7 +112,7 @@ case HCHAN_MAX: t1 = _("logarithmical histogram on max value"); break; } else - switch (histogram->channel_mode) + switch (histogram->histogram_channel) { case HCHAN_R: t1 = _("linear histogram on red"); break; case HCHAN_G: t1 = _("linear histogram on green"); break; @@ -277,15 +264,13 @@ for (j = 0; j < 4; j++) { - gint k; - gint chanmax = 0; + gint chanmax = HCHAN_R; - for (k = 1; k < 3; k++) - if (v[k] > v[chanmax]) - chanmax = k; + if (v[HCHAN_G] > v[HCHAN_R]) chanmax = HCHAN_G; + if (v[HCHAN_B] > v[HCHAN_G]) chanmax = HCHAN_B; - if (histogram->channel_mode >= HCHAN_RGB - || chanmax == histogram->channel_mode) + if (histogram->histogram_channel >= HCHAN_RGB + || chanmax == histogram->histogram_channel) { gulong pt; gint r = rplus; @@ -294,28 +279,28 @@ switch (chanmax) { - case 0: rplus = r = 255; break; - case 1: gplus = g = 255; break; - case 2: bplus = b = 255; break; + case HCHAN_R: rplus = r = 255; break; + case HCHAN_G: gplus = g = 255; break; + case HCHAN_B: bplus = b = 255; break; } - switch (histogram->channel_mode) + switch (histogram->histogram_channel) { case HCHAN_RGB: if (r == 255 && g == 255 && b == 255) { - r = 0; b = 0; g = 0; + r = 0; b = 0; g = 0; } break; - case HCHAN_R: b = 0; g = 0; break; - case HCHAN_G: r = 0; b = 0; break; - case HCHAN_B: r = 0; g = 0; break; - case HCHAN_MAX: r = 0; b = 0; g = 0; break; + case HCHAN_R: b = 0; g = 0; break; + case HCHAN_G: r = 0; b = 0; break; + case HCHAN_B: r = 0; g = 0; break; + case HCHAN_MAX: r = 0; b = 0; g = 0; break; } if (v[chanmax] == 0) pt = 0; - else if (histogram->log_mode) + else if (histogram->histogram_mode) pt = ((gdouble)log(v[chanmax])) / logmax * (height - 1); else pt = ((gdouble)v[chanmax]) / max * (height - 1);
--- a/src/image-overlay.c Thu Feb 26 17:34:14 2009 +0000 +++ b/src/image-overlay.c Thu Feb 26 20:50:36 2009 +0000 @@ -131,6 +131,7 @@ if (!osd || !osd->histogram) return; histogram_toggle_channel(osd->histogram); + options->image_overlay.common.histogram_channel = histogram_get_channel(osd->histogram); image_osd_update(imd); } @@ -141,6 +142,7 @@ if (!osd || !osd->histogram) return; histogram_toggle_mode(osd->histogram); + options->image_overlay.common.histogram_mode = histogram_get_mode(osd->histogram); image_osd_update(imd); } @@ -1020,7 +1022,11 @@ } if (show & OSD_SHOW_HISTOGRAM) + { osd->histogram = histogram_new(); + histogram_set_channel(osd->histogram, options->image_overlay.common.histogram_channel); + histogram_set_mode(osd->histogram, options->image_overlay.common.histogram_mode); + } else if (osd->histogram) { histogram_free(osd->histogram);
--- a/src/options.c Thu Feb 26 17:34:14 2009 +0000 +++ b/src/options.c Thu Feb 26 20:50:36 2009 +0000 @@ -59,8 +59,8 @@ options->fullscreen.disable_saver = TRUE; options->fullscreen.screen = -1; - options->histogram.last_channel_mode = HCHAN_RGB; - options->histogram.last_log_mode = 1; + options->image_overlay.common.histogram_channel = HCHAN_RGB; + options->image_overlay.common.histogram_mode = 1; memset(&options->image.border_color, 0, sizeof(options->image.border_color)); options->image.dither_quality = GDK_RGB_DITHER_NORMAL;
--- a/src/options.h Thu Feb 26 17:34:14 2009 +0000 +++ b/src/options.h Thu Feb 26 20:50:36 2009 +0000 @@ -138,12 +138,6 @@ gboolean above; } fullscreen; - /* histogram */ - struct { - guint last_channel_mode; - guint last_log_mode; - } histogram; - /* image overlay */ struct { struct { @@ -152,6 +146,8 @@ gchar *template_string; gint x; gint y; + gint histogram_channel; + gint histogram_mode; } common; } image_overlay;
--- a/src/rcfile.c Thu Feb 26 17:34:14 2009 +0000 +++ b/src/rcfile.c Thu Feb 26 20:50:36 2009 +0000 @@ -371,15 +371,12 @@ WRITE_BOOL(*options, fullscreen.above); -// WRITE_SUBTITLE("Histogram Options"); - WRITE_UINT(*options, histogram.last_channel_mode); - WRITE_UINT(*options, histogram.last_log_mode); - - // WRITE_SUBTITLE("Image Overlay Options"); WRITE_UINT(*options, image_overlay.common.state); WRITE_BOOL(*options, image_overlay.common.show_at_startup); WRITE_CHAR(*options, image_overlay.common.template_string); + WRITE_INT(*options, image_overlay.common.histogram_channel); + WRITE_INT(*options, image_overlay.common.histogram_mode); WRITE_SEPARATOR(); // g_string_append_printf(outstr, "# these are relative positions:\n"); @@ -674,14 +671,12 @@ if (READ_BOOL(*options, fullscreen.disable_saver)) continue; if (READ_BOOL(*options, fullscreen.above)) continue; - /* histogram */ - if (READ_UINT(*options, histogram.last_channel_mode)) continue; - if (READ_UINT(*options, histogram.last_log_mode)) continue; - /* image overlay */ if (READ_UINT(*options, image_overlay.common.state)) continue; if (READ_BOOL(*options, image_overlay.common.show_at_startup)) continue; if (READ_CHAR(*options, image_overlay.common.template_string)) continue; + if (READ_INT(*options, image_overlay.common.histogram_channel)) continue; + if (READ_INT(*options, image_overlay.common.histogram_mode)) continue; if (READ_INT(*options, image_overlay.common.x)) continue; if (READ_INT(*options, image_overlay.common.y)) continue;
--- a/src/typedefs.h Thu Feb 26 17:34:14 2009 +0000 +++ b/src/typedefs.h Thu Feb 26 20:50:36 2009 +0000 @@ -211,6 +211,21 @@ typedef struct _CommandLine CommandLine; +struct _Histogram { + gint histogram_channel; /* drawing mode for histogram */ + gint histogram_mode; /* logarithmical or not */ + guint vgrid; /* number of vertical divisions, 0 for none */ + guint hgrid; /* number of horizontal divisions, 0 for none */ + struct { + int R; /* red */ + int G; /* green */ + int B; /* blue */ + int A; /* alpha */ + } grid_color; /* grid color */ + +}; + + struct _EditorDescription { gchar *key; /* desktop file name, not including path, including extension */ gchar *name; /* Name, localized name presented to user */