[gnome-builder] sourceview: add IdeSourceScrollAlign
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] sourceview: add IdeSourceScrollAlign
- Date: Wed, 22 Nov 2017 00:55:39 +0000 (UTC)
commit dbbdc8af37c1856f7ee8a95788dc27b366aeba4c
Author: Christian Hergert <chergert redhat com>
Date: Tue Nov 21 16:41:13 2017 -0800
sourceview: add IdeSourceScrollAlign
This flags-like enum is created to allow choosing to scroll
X, Y, or both X and Y.
It does not follow the typical mask-style of flags because we
want it to stay compatible with TRUE/FALSE as the parameter
original provided. So we just use a simple macro to determine
if X or Y should be scrolled.
src/libide/sourceview/ide-source-view-movements.c | 4 +-
src/libide/sourceview/ide-source-view.c | 47 +++++++++++---------
src/libide/sourceview/ide-source-view.h | 14 +++++-
3 files changed, 40 insertions(+), 25 deletions(-)
---
diff --git a/src/libide/sourceview/ide-source-view-movements.c
b/src/libide/sourceview/ide-source-view-movements.c
index 7e2f258..f4102a3 100644
--- a/src/libide/sourceview/ide-source-view-movements.c
+++ b/src/libide/sourceview/ide-source-view-movements.c
@@ -45,6 +45,7 @@ typedef struct
*/
guint *target_column;
IdeSourceViewMovement type; /* Type of movement */
+ IdeSourceScrollAlign scroll_align; /* How to align the post-movement scroll */
GtkTextIter insert; /* Current insert cursor location */
GtkTextIter selection; /* Current selection cursor location */
gint count; /* Repeat count for movement */
@@ -1994,6 +1995,7 @@ _ide_source_view_apply_movement (IdeSourceView *self,
mv.self = self;
mv.target_column = target_column;
mv.type = movement;
+ mv.scroll_align = IDE_SOURCE_SCROLL_BOTH;
mv.extend_selection = extend_selection;
mv.exclusive = exclusive;
mv.count = count;
@@ -2334,7 +2336,7 @@ _ide_source_view_apply_movement (IdeSourceView *self,
ide_source_view_get_visual_position (mv.self, &line, target_column);
if (!mv.ignore_scroll_to_insert)
- ide_source_view_scroll_mark_onscreen (self, insert, TRUE, xalign, 0.5);
+ ide_source_view_scroll_mark_onscreen (self, insert, mv.scroll_align, xalign, 0.5);
/* Emit a jump if we moved more than JUMP_THRESHOLD lines */
gtk_text_buffer_get_iter_at_mark (buffer, &after_insert, insert);
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index 7808c25..7c61578 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -88,6 +88,11 @@
IDE_TRACE_MSG ("%s = Rectangle(x=%d, y=%d, width=%d, height=%d)", \
name, (rect)->x, (rect)->y, (rect)->width, (rect)->height)
+#define SCROLL_X(align) \
+ (((align) == IDE_SOURCE_SCROLL_BOTH) || ((align) == IDE_SOURCE_SCROLL_X))
+#define SCROLL_Y(align) \
+ (((align) == IDE_SOURCE_SCROLL_BOTH) || ((align) == IDE_SOURCE_SCROLL_Y))
+
typedef struct
{
IdeBuffer *buffer;
@@ -7381,11 +7386,11 @@ ide_source_view_get_visible_rect (IdeSourceView *self,
}
void
-ide_source_view_scroll_mark_onscreen (IdeSourceView *self,
- GtkTextMark *mark,
- gboolean use_align,
- gdouble alignx,
- gdouble aligny)
+ide_source_view_scroll_mark_onscreen (IdeSourceView *self,
+ GtkTextMark *mark,
+ IdeSourceScrollAlign use_align,
+ gdouble alignx,
+ gdouble aligny)
{
GtkTextView *text_view = (GtkTextView *)self;
GtkTextBuffer *buffer;
@@ -7497,13 +7502,13 @@ ide_source_view__vadj_animation_completed (IdeSourceView *self)
* https://developer.gnome.org/gtk3/stable/GtkTextView.html#gtk-text-view-scroll-to-iter
*/
void
-ide_source_view_scroll_to_iter (IdeSourceView *self,
- const GtkTextIter *iter,
- gdouble within_margin,
- gboolean use_align,
- gdouble xalign,
- gdouble yalign,
- gboolean animate_scroll)
+ide_source_view_scroll_to_iter (IdeSourceView *self,
+ const GtkTextIter *iter,
+ gdouble within_margin,
+ IdeSourceScrollAlign use_align,
+ gdouble xalign,
+ gdouble yalign,
+ gboolean animate_scroll)
{
IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
GtkTextView *text_view = (GtkTextView *)self;
@@ -7580,7 +7585,7 @@ ide_source_view_scroll_to_iter (IdeSourceView *self,
/* Vertical alignment */
scroll_dest = current_y_scroll;
- if (use_align)
+ if (SCROLL_Y (use_align))
{
scroll_dest = rect.y + (rect.height * yalign) - (screen.height * yalign);
@@ -7629,7 +7634,7 @@ ide_source_view_scroll_to_iter (IdeSourceView *self,
/* Horizontal alignment */
scroll_dest = current_x_scroll;
- if (use_align)
+ if (SCROLL_X (use_align))
{
scroll_dest = rect.x + (rect.width * xalign) - (screen.width * xalign);
@@ -7724,13 +7729,13 @@ ignore_animation:
}
void
-ide_source_view_scroll_to_mark (IdeSourceView *self,
- GtkTextMark *mark,
- gdouble within_margin,
- gboolean use_align,
- gdouble xalign,
- gdouble yalign,
- gboolean animate_scroll)
+ide_source_view_scroll_to_mark (IdeSourceView *self,
+ GtkTextMark *mark,
+ gdouble within_margin,
+ IdeSourceScrollAlign use_align,
+ gdouble xalign,
+ gdouble yalign,
+ gboolean animate_scroll)
{
GtkTextBuffer *buffer;
GtkTextIter iter;
diff --git a/src/libide/sourceview/ide-source-view.h b/src/libide/sourceview/ide-source-view.h
index d083963..9a11133 100644
--- a/src/libide/sourceview/ide-source-view.h
+++ b/src/libide/sourceview/ide-source-view.h
@@ -226,6 +226,14 @@ typedef enum
IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_MATCH_SEARCH_CHAR,
} IdeSourceViewMovement;
+typedef enum
+{
+ IDE_SOURCE_SCROLL_NONE = 0,
+ IDE_SOURCE_SCROLL_BOTH = 1,
+ IDE_SOURCE_SCROLL_X = 1 << 1,
+ IDE_SOURCE_SCROLL_Y = 1 << 2,
+} IdeSourceScrollAlign;
+
struct _IdeSourceViewClass
{
GtkSourceViewClass parent_class;
@@ -466,14 +474,14 @@ void ide_source_view_clear_search (IdeSource
IDE_AVAILABLE_IN_ALL
void ide_source_view_scroll_mark_onscreen (IdeSourceView *self,
GtkTextMark *mark,
- gboolean use_align,
+ IdeSourceScrollAlign use_align,
gdouble alignx,
gdouble aligny);
IDE_AVAILABLE_IN_ALL
void ide_source_view_scroll_to_mark (IdeSourceView *self,
GtkTextMark *mark,
gdouble
within_margin,
- gboolean use_align,
+ IdeSourceScrollAlign use_align,
gdouble xalign,
gdouble yalign,
gboolean
animate_scroll);
@@ -481,7 +489,7 @@ IDE_AVAILABLE_IN_ALL
void ide_source_view_scroll_to_iter (IdeSourceView *self,
const GtkTextIter *iter,
gdouble
within_margin,
- gboolean use_align,
+ IdeSourceScrollAlign use_align,
gdouble xalign,
gdouble yalign,
gboolean
animate_scroll);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]