summaryrefslogtreecommitdiff
path: root/src/viewer.h
blob: bc4fb632ebd38d54798ebf4ebf207c50c8a4af96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef GGAZE_VIEWER_H
#define GGAZE_VIEWER_H

/*:*
 * ggaze — large single-image viewer
 *
 * GgazeViewer : GtkWidget is the custom large-view canvas (decision #31, not
 * GtkPicture). It owns a GdkTexture plus zoom/pan/fit state and draws via GTK4
 * render nodes. Zoom is cursor-centered (mouse/pinch) or window-centered
 * (keys); panning clamps so the image can't drift off-screen. See
 * docs/ui-and-interactions.md "Zoom behavior" and docs/architecture.md
 * "Responsibilities / viewer".
 *
 * Copyright (c) 2026 ggaze contributors
 * SPDX-License-Identifier: GPL-3.0-or-later
 *:*/

#include <gdk/gdk.h>
#include <gtk/gtk.h>

G_BEGIN_DECLS

#define GGAZE_TYPE_VIEWER (ggaze_viewer_get_type())
G_DECLARE_FINAL_TYPE(GgazeViewer, ggaze_viewer, GGAZE, VIEWER, GtkWidget)

GtkWidget *ggaze_viewer_new(void);

/* Take p_texture (refs it; the caller still owns its own ref and should unref
 * when done). Resets to fit-to-window, clears pan. NULL clears the display. */
void ggaze_viewer_set_texture(GgazeViewer *p_viewer, GdkTexture *p_texture);
GdkTexture *
ggaze_viewer_get_texture(GgazeViewer *p_viewer); /* (transfer none) */

/* Zoom + pan actions (also reachable via the on-widget controllers). */
void ggaze_viewer_zoom_in(GgazeViewer *p_viewer);
void ggaze_viewer_zoom_out(GgazeViewer *p_viewer);
void ggaze_viewer_toggle_fit_100(GgazeViewer *p_viewer);
void ggaze_viewer_fit(GgazeViewer *p_viewer);
void ggaze_viewer_pan(GgazeViewer *p_viewer, gdouble d_dx, gdouble d_dy);

G_END_DECLS

#endif /* GGAZE_VIEWER_H */