diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2023-03-08 10:47:38 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2023-03-16 12:26:28 +0000 |
commit | 8d92808992ecc6046179be9ab0395b88587b376b (patch) | |
tree | 800e8d75fc34a2fba4ae86b08aa30bd6385ff894 /src | |
parent | 42ee33c78383787a453b629836b6a434b9f38ec3 (diff) | |
download | gnome-calendar-8d92808992ecc6046179be9ab0395b88587b376b.tar.gz |
views/week: Operate on zoom levels
Instead of freely using heights and pixel sizes, operate on zoom
levels.
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/views/gcal-week-view.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/gui/views/gcal-week-view.c b/src/gui/views/gcal-week-view.c index 97c514e0..d911b57e 100644 --- a/src/gui/views/gcal-week-view.c +++ b/src/gui/views/gcal-week-view.c @@ -54,11 +54,13 @@ struct _GcalWeekView gint clicked_cell; gdouble gesture_zoom_center; - gint gesture_zoom_initial_height; gboolean pointer_position_valid; gdouble pointer_position_y; gdouble scroll_scale; + + gdouble initial_zoom_level; + gdouble zoom_level; }; static void schedule_position_scroll (GcalWeekView *self); @@ -81,12 +83,11 @@ G_DEFINE_TYPE_WITH_CODE (GcalWeekView, gcal_week_view, GTK_TYPE_BOX, G_IMPLEMENT_INTERFACE (GCAL_TYPE_TIMELINE_SUBSCRIBER, gcal_timeline_subscriber_interface_init)); -/* 60px * ⅓ * 48 rows + 1px * 47 lines = 1007px */ -#define HEIGHT_MIN 1007 /* 60px * 1 * 48 rows + 1px * 47 lines = 2927px */ #define HEIGHT_DEFAULT 2927 -/* 60px * 3 * 48 rows + 1px * 47 lines = 8687px */ -#define HEIGHT_MAX 8687 + +#define MIN_ZOOM_LEVEL 0.334 +#define MAX_ZOOM_LEVEL 3.0 /* Callbacks */ static void @@ -109,7 +110,8 @@ begin_zoom (GcalWeekView *self, height = gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_lower (vadjustment); self->gesture_zoom_center = center / height; - self->gesture_zoom_initial_height = gtk_widget_get_allocated_height (self->content); + + self->initial_zoom_level = self->zoom_level; } static void @@ -120,10 +122,13 @@ apply_zoom (GcalWeekView *self, GtkAdjustment *vadjustment; gdouble height; + self->zoom_level = CLAMP (self->initial_zoom_level + (scale - 1.0), + MIN_ZOOM_LEVEL, + MAX_ZOOM_LEVEL); + vadjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolled_window)); - height = self->gesture_zoom_initial_height * scale; - height = CLAMP (height, HEIGHT_MIN, HEIGHT_MAX); + height = HEIGHT_DEFAULT * self->zoom_level; gtk_widget_set_size_request (self->content, -1, height); gtk_adjustment_set_lower (vadjustment, 0); @@ -590,6 +595,8 @@ gcal_week_view_init (GcalWeekView *self) gtk_widget_init_template (GTK_WIDGET (self)); + self->zoom_level = 1.0; + gtk_widget_set_size_request (self->content, -1, HEIGHT_DEFAULT); size_group = gcal_week_header_get_sidebar_size_group (GCAL_WEEK_HEADER (self->header)); |