[gedit/wip/search-animation: 3/4] Make use of the floating occurrence
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/search-animation: 3/4] Make use of the floating occurrence
- Date: Sun, 19 Aug 2012 20:45:56 +0000 (UTC)
commit 04444dfade8ddff79642bc0d7c6a1e5ceeec1625
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Sun Aug 19 22:02:01 2012 +0200
Make use of the floating occurrence
gedit/gedit-floating-occurrence.c | 11 ++++++-
gedit/gedit-floating-occurrence.h | 7 +++-
gedit/gedit-view-frame.c | 59 +++++++++++++++++++++++++++++++++++++
3 files changed, 74 insertions(+), 3 deletions(-)
---
diff --git a/gedit/gedit-floating-occurrence.c b/gedit/gedit-floating-occurrence.c
index 78c1166..ab08220 100644
--- a/gedit/gedit-floating-occurrence.c
+++ b/gedit/gedit-floating-occurrence.c
@@ -296,7 +296,7 @@ gedit_floating_occurrence_init (GeditFloatingOccurrence *occurrence)
GTK_STYLE_PROVIDER (GEDIT_FLOATING_OCCURRENCE_GET_CLASS (occurrence)->priv->css),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- occurrence->priv->label = gtk_label_new ("Hello");
+ occurrence->priv->label = gtk_label_new ("");
gtk_widget_show (occurrence->priv->label);
gtk_container_add (GTK_CONTAINER (occurrence), occurrence->priv->label);
}
@@ -307,4 +307,13 @@ gedit_floating_occurrence_new (void)
return g_object_new (GEDIT_TYPE_FLOATING_OCCURRENCE, NULL);
}
+void
+gedit_floating_occurrence_set_text (GeditFloatingOccurrence *occurrence,
+ const gchar *text)
+{
+ g_return_if_fail (GEDIT_IS_FLOATING_OCCURRENCE (occurrence));
+
+ gtk_label_set_text (GTK_LABEL (occurrence->priv->label), text);
+}
+
/* ex:set ts=8 noet: */
diff --git a/gedit/gedit-floating-occurrence.h b/gedit/gedit-floating-occurrence.h
index f05de9c..451f99a 100644
--- a/gedit/gedit-floating-occurrence.h
+++ b/gedit/gedit-floating-occurrence.h
@@ -56,9 +56,12 @@ struct _GeditFloatingOccurrenceClass
GeditFloatingOccurrenceClassPrivate *priv;
};
-GType gedit_floating_occurrence_get_type (void) G_GNUC_CONST;
+GType gedit_floating_occurrence_get_type (void) G_GNUC_CONST;
-GtkWidget *gedit_floating_occurrence_new (void);
+GtkWidget *gedit_floating_occurrence_new (void);
+
+void gedit_floating_occurrence_set_text (GeditFloatingOccurrence *occurrence,
+ const gchar *text);
G_END_DECLS
diff --git a/gedit/gedit-view-frame.c b/gedit/gedit-view-frame.c
index 2b72967..279fc2d 100644
--- a/gedit/gedit-view-frame.c
+++ b/gedit/gedit-view-frame.c
@@ -30,6 +30,7 @@
#include "gedit-utils.h"
#include "gedit-animated-overlay.h"
#include "gedit-floating-slider.h"
+#include "gedit-floating-occurrence.h"
#include <gdk/gdkkeysyms.h>
#include <glib/gi18n.h>
@@ -74,6 +75,8 @@ struct _GeditViewFramePrivate
GtkWidget *go_up_button;
GtkWidget *go_down_button;
+ GtkWidget *search_occurrence;
+
guint typeselect_flush_timeout;
glong view_scroll_event_id;
glong search_entry_focus_out_id;
@@ -326,6 +329,12 @@ run_search (GeditViewFrame *frame,
gtk_text_buffer_move_mark_by_name (GTK_TEXT_BUFFER (doc),
"selection_bound", &match_end);
+ gtk_widget_show (frame->priv->search_occurrence);
+ gedit_floating_occurrence_set_text (GEDIT_FLOATING_OCCURRENCE (frame->priv->search_occurrence),
+ entry_text);
+ g_object_set (G_OBJECT (frame->priv->search_occurrence),
+ "animation-state", GEDIT_THEATRICS_ANIMATION_STATE_COMING,
+ NULL);
}
else if (typing)
{
@@ -1234,6 +1243,43 @@ view_frame_mount_operation_factory (GeditDocument *doc,
return gtk_mount_operation_new (GTK_WINDOW (window));
}
+static gboolean
+on_get_child_position (GtkOverlay *overlay,
+ GtkWidget *widget,
+ GdkRectangle *allocation,
+ GeditViewFrame *frame)
+{
+ if (widget == frame->priv->search_occurrence)
+ {
+ GtkTextBuffer *buf;
+ GtkTextIter start, end;
+ GdkRectangle location;
+ gint x, y;
+ gint width, height;
+
+ buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (frame->priv->view));
+ gtk_text_buffer_get_selection_bounds (buf, &start, &end);
+ gtk_text_view_get_iter_location (GTK_TEXT_VIEW (frame->priv->view),
+ &start, &location);
+ gtk_text_view_buffer_to_window_coords (GTK_TEXT_VIEW (frame->priv->view),
+ GTK_TEXT_WINDOW_TEXT,
+ location.x,
+ location.y,
+ &x, &y);
+
+ gtk_widget_get_preferred_width (widget, NULL, &width);
+ gtk_widget_get_preferred_height (widget, NULL, &height);
+
+ allocation->x = x;
+ allocation->y = y;
+ allocation->width = width;
+ allocation->height = height;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
gedit_view_frame_init (GeditViewFrame *frame)
{
@@ -1277,6 +1323,9 @@ gedit_view_frame_init (GeditViewFrame *frame)
gtk_widget_override_background_color (frame->priv->overlay, 0, &transparent);
gtk_widget_show (frame->priv->overlay);
+ g_signal_connect (frame->priv->overlay, "get-child-position",
+ G_CALLBACK (on_get_child_position), frame);
+
gtk_box_pack_start (GTK_BOX (frame), frame->priv->overlay, TRUE, TRUE, 0);
/* Add slider */
@@ -1302,6 +1351,16 @@ gedit_view_frame_init (GeditViewFrame *frame)
gedit_animated_overlay_add_animated_overlay (GEDIT_ANIMATED_OVERLAY (frame->priv->overlay),
GEDIT_ANIMATABLE (frame->priv->slider));
+
+ /* Add search occurrence */
+ frame->priv->search_occurrence = gedit_floating_occurrence_new ();
+ g_object_set (G_OBJECT (frame->priv->search_occurrence),
+ "easing", GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
+ "blocking", GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
+ NULL);
+
+ gedit_animated_overlay_add_animated_overlay (GEDIT_ANIMATED_OVERLAY (frame->priv->overlay),
+ GEDIT_ANIMATABLE (frame->priv->search_occurrence));
}
GeditViewFrame *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]