* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "main.h"
#include "image-overlay.h"
+#include <config.h>
+
+#include "collect.h"
+#include "debug.h"
#include "filedata.h"
#include "histogram.h"
+#include "image-load.h"
#include "image.h"
#include "img-view.h"
+#include "intl.h"
#include "layout.h"
+#include "main-defines.h"
#include "osd.h"
#include "pixbuf-renderer.h"
#include "pixbuf-util.h"
+#include "slideshow.h"
#include "ui-fileops.h"
-#include "image-load.h"
/*
*----------------------------------------------------------------------------
*/
-typedef struct _OverlayStateData OverlayStateData;
-struct _OverlayStateData {
+struct OverlayStateData {
ImageWindow *imd;
ImageState changed_states;
NotifyType notify;
};
-typedef struct _OSDIcon OSDIcon;
-struct _OSDIcon {
+struct OSDIcon {
gboolean reset; /* reset on new image */
gint x; /* x, y offset */
gint y;
};
static OSDIcon osd_icons[] = {
- { TRUE, 0, 0, NULL }, /* none */
- { TRUE, -10, -10, NULL }, /* auto rotated */
- { TRUE, -10, -10, NULL }, /* user rotated */
- { TRUE, -40, -10, NULL }, /* color embedded */
- { TRUE, -70, -10, NULL }, /* first image */
- { TRUE, -70, -10, NULL }, /* last image */
- { FALSE, -70, -10, NULL }, /* osd enabled */
- { FALSE, 0, 0, NULL }
+ { TRUE, 0, 0, nullptr }, /* none */
+ { TRUE, -10, -10, nullptr }, /* auto rotated */
+ { TRUE, -10, -10, nullptr }, /* user rotated */
+ { TRUE, -40, -10, nullptr }, /* color embedded */
+ { TRUE, -70, -10, nullptr }, /* first image */
+ { TRUE, -70, -10, nullptr }, /* last image */
+ { FALSE, -70, -10, nullptr }, /* osd enabled */
+ { FALSE, 0, 0, nullptr }
};
#define OSD_DATA "overlay-data"
-#define IMAGE_OSD_DEFAULT_DURATION 30
+enum {
+ IMAGE_OSD_DEFAULT_DURATION = 30
+};
-#define HISTOGRAM_HEIGHT 140
-#define HISTOGRAM_WIDTH 256
+enum {
+ HISTOGRAM_HEIGHT = 140,
+ HISTOGRAM_WIDTH = 256
+};
static void image_osd_timer_schedule(OverlayStateData *osd);
{
OverlayStateData *osd;
- if (!imd) return NULL;
+ if (!imd) return nullptr;
g_assert(imd->pr);
- osd = g_object_get_data(G_OBJECT(imd->pr), "IMAGE_OVERLAY_DATA");
+ osd = static_cast<OverlayStateData *>(g_object_get_data(G_OBJECT(imd->pr), "IMAGE_OVERLAY_DATA"));
return osd;
}
show = image_osd_get(imd);
if (show == OSD_SHOW_NOTHING)
{
- image_osd_set(imd, OSD_SHOW_INFO | OSD_SHOW_STATUS);
+ image_osd_set(imd, static_cast<OsdShowFlags>(OSD_SHOW_INFO | OSD_SHOW_STATUS));
return;
}
+
+ if (show & OSD_SHOW_HISTOGRAM)
+ {
+ image_osd_set(imd, OSD_SHOW_NOTHING);
+ }
else
{
- if (show & OSD_SHOW_HISTOGRAM)
- {
- image_osd_set(imd, OSD_SHOW_NOTHING);
- }
- else
- {
- image_osd_set(imd, show | OSD_SHOW_HISTOGRAM);
- }
+ image_osd_set(imd, static_cast<OsdShowFlags>(show | OSD_SHOW_HISTOGRAM));
}
}
static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
{
- GdkPixbuf *pixbuf = NULL;
- gint width, height;
+ GdkPixbuf *pixbuf = nullptr;
+ gint width;
+ gint height;
PangoLayout *layout;
const gchar *name;
gchar *text;
gboolean with_hist;
- const HistMap *histmap = NULL;
+ const HistMap *histmap = nullptr;
ImageWindow *imd = osd->imd;
FileData *fd = image_get_fd(imd);
PangoFontDescription *font_desc;
- if (!fd) return NULL;
+ if (!fd) return nullptr;
name = image_get_name(imd);
if (name)
{
- gint n, t;
+ gint n;
+ gint t;
CollectionData *cd;
CollectInfo *info;
GHashTable *vars;
- vars = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
+ vars = g_hash_table_new_full(g_str_hash, g_str_equal, nullptr, g_free);
cd = image_get_collection(imd, &info);
if (cd)
}
else
{
- t = layout_list_count(lw, NULL);
+ t = layout_list_count(lw, nullptr);
n = layout_list_get_index(lw, image_get_fd(lw->image)) + 1;
}
}
if (n < 1) n = 1;
if (t < 1) t = 1;
- osd_template_insert(vars, "collection", NULL, OSDT_NONE);
+ osd_template_insert(vars, "collection", nullptr, OSDT_NONE);
}
osd_template_insert(vars, "number", g_strdup_printf("%d", n), OSDT_NO_DUP);
osd_template_insert(vars, "total", g_strdup_printf("%d", t), OSDT_NO_DUP);
- osd_template_insert(vars, "name", (gchar *) name, OSDT_NONE);
- osd_template_insert(vars, "path", (gchar *) image_get_path(imd), OSDT_NONE);
- osd_template_insert(vars, "date", imd->image_fd ? ((gchar *) text_from_time(imd->image_fd->date)) : "", OSDT_NONE);
+ osd_template_insert(vars, "name", const_cast<gchar *>(name), OSDT_NONE);
+ osd_template_insert(vars, "path", const_cast<gchar *>(image_get_path(imd)), OSDT_NONE);
+ osd_template_insert(vars, "date", imd->image_fd ? (const_cast<gchar *>(text_from_time(imd->image_fd->date))) : "", OSDT_NONE);
osd_template_insert(vars, "size", imd->image_fd ? (text_from_size_abrev(imd->image_fd->size)) : g_strdup(""), OSDT_FREE);
osd_template_insert(vars, "zoom", image_zoom_get_as_text(imd), OSDT_FREE);
if (!imd->unknown)
{
- gint w, h;
+ gint w;
+ gint h;
GdkPixbuf *load_pixbuf = image_loader_get_pixbuf(imd->il);
if (imd->delay_flip &&
}
else
{
- osd_template_insert(vars, "width", NULL, OSDT_NONE);
- osd_template_insert(vars, "height", NULL, OSDT_NONE);
- osd_template_insert(vars, "res", NULL, OSDT_NONE);
+ osd_template_insert(vars, "width", nullptr, OSDT_NONE);
+ osd_template_insert(vars, "height", nullptr, OSDT_NONE);
+ osd_template_insert(vars, "res", nullptr, OSDT_NONE);
}
text = image_osd_mkinfo(options->image_overlay.template_string, imd->image_fd, vars);
if (active_marks > 0)
{
- GString *buf = g_string_sized_new(FILEDATA_MARKS_SIZE * 2);
+ GString *buf = g_string_sized_new(strlen(text) + 1 + FILEDATA_MARKS_SIZE * 2);
+
+ if (*text)
+ {
+ g_string_append_printf(buf, "%s\n", text);
+ }
for (mark = 0; mark < FILEDATA_MARKS_SIZE; mark++)
{
g_string_append_printf(buf, file_data_get_mark(fd, mark) ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + (mark < 9 ? mark : -1) );
}
- if (*text)
- text2 = g_strdup_printf("%s\n%s", text, buf->str);
- else
- text2 = g_strdup(buf->str);
- g_string_free(buf, TRUE);
g_free(text);
- text = text2;
+ text = g_string_free(buf, FALSE);
}
if (with_hist)
}
font_desc = pango_font_description_from_string(options->image_overlay.font);
- layout = gtk_widget_create_pango_layout(imd->pr, NULL);
+ layout = gtk_widget_create_pango_layout(imd->pr, nullptr);
pango_layout_set_font_description(layout, font_desc);
pango_layout_set_markup(layout, text, -1);
return pixbuf;
}
+/**
+ * @brief Create non-standard icons for the OSD
+ * @param flag
+ * @returns
+ *
+ * IMAGE_OSD_COLOR
+ * \image html image-osd-color.png
+ * IMAGE_OSD_FIRST
+ * \image html image-osd-first.png
+ * IMAGE_OSD_ICON
+ * \image html image-osd-icon.png
+ * IMAGE_OSD_LAST
+ * \image html image-osd-last.png
+ * IMAGE_OSD_ROTATE_AUTO
+ * \image html image-osd-rotate-auto.png
+ *
+ */
static GdkPixbuf *image_osd_icon_pixbuf(ImageOSDFlag flag)
{
- static GdkPixbuf **icons = NULL;
- GdkPixbuf *icon = NULL;
+ static GdkPixbuf **icons = nullptr;
+ GdkPixbuf *icon = nullptr;
if (!icons) icons = g_new0(GdkPixbuf *, IMAGE_OSD_COUNT);
if (icons[flag]) return icons[flag];
static gint image_overlay_add(ImageWindow *imd, GdkPixbuf *pixbuf, gint x, gint y,
OverlayRendererFlags flags)
{
- return pixbuf_renderer_overlay_add((PixbufRenderer *)imd->pr, pixbuf, x, y, flags);
+ return pixbuf_renderer_overlay_add(reinterpret_cast<PixbufRenderer *>(imd->pr), pixbuf, x, y, flags);
}
static void image_overlay_set(ImageWindow *imd, gint id, GdkPixbuf *pixbuf, gint x, gint y)
{
- pixbuf_renderer_overlay_set((PixbufRenderer *)imd->pr, id, pixbuf, x, y);
+ pixbuf_renderer_overlay_set(reinterpret_cast<PixbufRenderer *>(imd->pr), id, pixbuf, x, y);
}
static void image_overlay_remove(ImageWindow *imd, gint id)
{
- pixbuf_renderer_overlay_remove((PixbufRenderer *)imd->pr, id);
+ pixbuf_renderer_overlay_remove(reinterpret_cast<PixbufRenderer *>(imd->pr), id);
}
static void image_osd_icon_show(OverlayStateData *osd, ImageOSDFlag flag)
{
if (osd->icon_time[i] > 0)
{
- image_osd_icon_show(osd, i);
+ image_osd_icon_show(osd, static_cast<ImageOSDFlag>(i));
}
else
{
- image_osd_icon_hide(osd, i);
+ image_osd_icon_hide(osd, static_cast<ImageOSDFlag>(i));
}
}
}
for (i = 0; i < IMAGE_OSD_COUNT; i++)
{
- image_osd_icon_hide(osd, i);
+ image_osd_icon_hide(osd, static_cast<ImageOSDFlag>(i));
}
}
static gboolean image_osd_update_cb(gpointer data)
{
- OverlayStateData *osd = (OverlayStateData *)data;
+ auto osd = static_cast<OverlayStateData *>(data);
if (osd->show & OSD_SHOW_INFO)
{
}
osd->changed_states = IMAGE_STATE_NONE;
- osd->notify = 0;
+ osd->notify = static_cast<NotifyType>(0);
osd->idle_id = 0;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static void image_osd_update_schedule(OverlayStateData *osd, gboolean force)
{
- if (force) osd->changed_states |= IMAGE_STATE_IMAGE;
+ if (force) osd->changed_states = static_cast<ImageState>(osd->changed_states | IMAGE_STATE_IMAGE);
if (!osd->idle_id)
{
- osd->idle_id = g_idle_add_full(G_PRIORITY_HIGH, image_osd_update_cb, osd, NULL);
+ osd->idle_id = g_idle_add_full(G_PRIORITY_HIGH, image_osd_update_cb, osd, nullptr);
}
}
static gboolean image_osd_timer_cb(gpointer data)
{
- OverlayStateData *osd = (OverlayStateData *)data;
+ auto osd = static_cast<OverlayStateData *>(data);
gboolean done = TRUE;
gboolean changed = FALSE;
gint i;
}
}
-static void image_osd_state_cb(ImageWindow *UNUSED(imd), ImageState state, gpointer data)
+static void image_osd_state_cb(ImageWindow *, ImageState state, gpointer data)
{
- OverlayStateData *osd = (OverlayStateData *)data;
+ auto osd = static_cast<OverlayStateData *>(data);
- osd->changed_states |= state;
+ osd->changed_states = static_cast<ImageState>(osd->changed_states | state);
image_osd_update_schedule(osd, FALSE);
}
static void image_osd_notify_cb(FileData *fd, NotifyType type, gpointer data)
{
- OverlayStateData *osd = (OverlayStateData *)data;
+ auto osd = static_cast<OverlayStateData *>(data);
if ((type & (NOTIFY_HISTMAP)) && osd->imd && fd == osd->imd->image_fd)
{
DEBUG_1("Notify osd: %s %04x", fd->path, type);
- osd->notify |= type;
+ osd->notify = static_cast<NotifyType>(osd->notify | type);
image_osd_update_schedule(osd, FALSE);
}
}
if (osd->imd)
{
- image_set_osd_data(osd->imd, NULL);
+ image_set_osd_data(osd->imd, nullptr);
g_signal_handler_disconnect(osd->imd->pr, osd->destroy_id);
- image_set_state_func(osd->imd, NULL, NULL);
+ image_set_state_func(osd->imd, nullptr, nullptr);
image_osd_info_hide(osd);
image_osd_icons_hide(osd);
g_free(osd);
}
-static void image_osd_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
+static void image_osd_destroy_cb(GtkWidget *, gpointer data)
{
- OverlayStateData *osd = (OverlayStateData *)data;
+ auto osd = static_cast<OverlayStateData *>(data);
- osd->imd = NULL;
+ osd->imd = nullptr;
image_osd_free(osd);
}
{
OverlayStateData *osd = image_get_osd_data(imd);
- return osd ? osd->histogram : NULL;
+ return osd ? osd->histogram : nullptr;
}
void image_osd_copy_status(ImageWindow *src, ImageWindow *dest)
{
- Histogram *h_src, *h_dest;
+ Histogram *h_src;
+ Histogram *h_dest;
image_osd_set(dest, image_osd_get(src));
h_src = image_osd_get_histogram(src);