Zoom rework.

This commit is contained in:
sergiotarxz 2021-11-23 22:18:03 +01:00
parent 78cc873530
commit 665206c32e

View File

@ -43,23 +43,31 @@ go_next (GtkButton *next,
gpointer user_data); gpointer user_data);
static void static void
set_image_dimensions (GtkWidget *picture, set_image_dimensions (GtkWidget *picture,
ChapterVisorData *chapter_visor_data); ChapterVisorData *chapter_visor_data,
gdouble scale);
static void
zoom_end (GtkGesture *zoom,
GdkEventSequence *sequence,
gpointer user_data);
static void static void
image_page_show (GtkWidget *picture, gpointer user_data) { image_page_show (GtkWidget *picture, gpointer user_data) {
ChapterVisorData *chapter_visor_data = (ChapterVisorData *) user_data; ChapterVisorData *chapter_visor_data = (ChapterVisorData *) user_data;
chapter_visor_data->zoom = 1; chapter_visor_data->zoom = 1;
set_image_dimensions (picture, chapter_visor_data); set_image_dimensions (picture, chapter_visor_data, 1);
} }
static void static void
set_image_dimensions (GtkWidget *picture, set_image_dimensions (GtkWidget *picture,
ChapterVisorData *chapter_visor_data) { ChapterVisorData *chapter_visor_data,
gdouble scale) {
double final_width = 0; double final_width = 0;
double final_height = 0; double final_height = 0;
GdkPaintable *paintable = gtk_picture_get_paintable (GTK_PICTURE (picture)); GdkPaintable *paintable = gtk_picture_get_paintable (GTK_PICTURE (picture));
GtkWidget *views_leaflet = GTK_WIDGET (chapter_visor_data->views_leaflet); GtkWidget *views_leaflet = GTK_WIDGET (chapter_visor_data->views_leaflet);
gdouble scale_factor = log (scale) / 10 + log (chapter_visor_data->zoom);
chapter_visor_data->zoom = pow (M_E, scale_factor);
guint width = gtk_widget_get_allocated_width guint width = gtk_widget_get_allocated_width
(views_leaflet) * chapter_visor_data->zoom; (views_leaflet) * chapter_visor_data->zoom;
gdk_paintable_compute_concrete_size ( gdk_paintable_compute_concrete_size (
@ -178,6 +186,7 @@ set_zoomable_picture_container_properties (
gtk_widget_add_controller (GTK_WIDGET (zoomable_picture_container), gtk_widget_add_controller (GTK_WIDGET (zoomable_picture_container),
GTK_EVENT_CONTROLLER (zoom_controller)); GTK_EVENT_CONTROLLER (zoom_controller));
g_signal_connect (G_OBJECT (zoom_controller), "scale-changed", G_CALLBACK (fire_zoom), chapter_visor_data); g_signal_connect (G_OBJECT (zoom_controller), "scale-changed", G_CALLBACK (fire_zoom), chapter_visor_data);
g_signal_connect (G_OBJECT (zoom_controller), "end", G_CALLBACK (zoom_end), chapter_visor_data);
} }
@ -200,8 +209,17 @@ fire_zoom (GtkGestureZoom *zoom,
gdouble scale, gdouble scale,
gpointer user_data) { gpointer user_data) {
ChapterVisorData *chapter_visor_data = (ChapterVisorData *) user_data; ChapterVisorData *chapter_visor_data = (ChapterVisorData *) user_data;
set_image_dimensions (GTK_WIDGET (chapter_visor_data->current_picture),
chapter_visor_data, scale);
}
static void
zoom_end (GtkGesture *zoom,
GdkEventSequence *sequence,
gpointer user_data) {
ChapterVisorData *chapter_visor_data = (ChapterVisorData *) user_data;
gdouble scale = gtk_gesture_zoom_get_scale_delta
(GTK_GESTURE_ZOOM (zoom));
gdouble scale_factor = log (scale) / 10 + log (chapter_visor_data->zoom); gdouble scale_factor = log (scale) / 10 + log (chapter_visor_data->zoom);
chapter_visor_data->zoom = pow (M_E, scale_factor); chapter_visor_data->zoom = pow (M_E, scale_factor);
set_image_dimensions (GTK_WIDGET (chapter_visor_data->current_picture),
chapter_visor_data);
} }