summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-08 10:47:38 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-16 12:26:28 +0000
commit8d92808992ecc6046179be9ab0395b88587b376b (patch)
tree800e8d75fc34a2fba4ae86b08aa30bd6385ff894 /src
parent42ee33c78383787a453b629836b6a434b9f38ec3 (diff)
downloadgnome-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.c23
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));