Sort headers using clang-tidy
[geeqie.git] / src / image-overlay.cc
index 97a8a14..7dfd5a7 100644 (file)
  * 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"
 
 /*
  *----------------------------------------------------------------------------
@@ -40,8 +46,7 @@
  */
 
 
-typedef struct _OverlayStateData OverlayStateData;
-struct _OverlayStateData {
+struct OverlayStateData {
        ImageWindow *imd;
        ImageState changed_states;
        NotifyType notify;
@@ -65,8 +70,7 @@ struct _OverlayStateData {
 };
 
 
-typedef struct _OSDIcon OSDIcon;
-struct _OSDIcon {
+struct OSDIcon {
        gboolean reset; /* reset on new image */
        gint x;         /* x, y offset */
        gint y;
@@ -74,22 +78,26 @@ struct _OSDIcon {
 };
 
 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);
 
@@ -119,11 +127,11 @@ static OverlayStateData *image_get_osd_data(ImageWindow *imd)
 {
        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;
 }
 
@@ -207,46 +215,46 @@ void image_osd_toggle(ImageWindow *imd)
        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)
@@ -278,7 +286,7 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
                                        }
                                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;
                                        }
                                }
@@ -295,20 +303,21 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
                        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 &&
@@ -330,9 +339,9 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
                        }
                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);
@@ -367,20 +376,20 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 
                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)
@@ -397,7 +406,7 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
        }
 
        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);
@@ -449,10 +458,27 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
        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];
@@ -513,17 +539,17 @@ static GdkPixbuf *image_osd_icon_pixbuf(ImageOSDFlag 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)
@@ -570,11 +596,11 @@ static void image_osd_icons_update(OverlayStateData *osd)
                {
                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));
                        }
                }
 }
@@ -585,7 +611,7 @@ static void image_osd_icons_hide(OverlayStateData *osd)
 
        for (i = 0; i < IMAGE_OSD_COUNT; i++)
                {
-               image_osd_icon_hide(osd, i);
+               image_osd_icon_hide(osd, static_cast<ImageOSDFlag>(i));
                }
 }
 
@@ -611,7 +637,7 @@ static void image_osd_info_hide(OverlayStateData *osd)
 
 static gboolean image_osd_update_cb(gpointer data)
 {
-       OverlayStateData *osd = (OverlayStateData *)data;
+       auto osd = static_cast<OverlayStateData *>(data);
 
        if (osd->show & OSD_SHOW_INFO)
                {
@@ -673,18 +699,18 @@ static gboolean image_osd_update_cb(gpointer data)
                }
 
        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);
                }
 }
 
@@ -699,7 +725,7 @@ void image_osd_update(ImageWindow *imd)
 
 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;
@@ -740,22 +766,22 @@ static void image_osd_timer_schedule(OverlayStateData *osd)
                }
 }
 
-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);
                }
 }
@@ -772,10 +798,10 @@ static void image_osd_free(OverlayStateData *osd)
 
        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);
@@ -786,11 +812,11 @@ static void image_osd_free(OverlayStateData *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);
 }
 
@@ -844,12 +870,13 @@ Histogram *image_osd_get_histogram(ImageWindow *imd)
 {
        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);