📄 gseisviewtoolhlight.c
字号:
} if (1 == event->button && FALSE == private->drawing_rubberband && GDK_BUTTON_RELEASE == event->type) { gtk_seis_view_gl_set_highlight_area (GTK_SEIS_VIEW_GL (seis_view_gl), data_visibility->slow_pointer_pos_data, 0.0); gtk_seis_view_gl_redraw (seis_view); }}static void g_seis_view_tool_scroll_event_int (GSeisViewTool *tool, GtkWidget *seis_view_gl, GdkEventScroll *event, GSeisViewDataVisibility *data_visibility) { GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (G_SEIS_VIEW_TOOL (tool)); if (FALSE == private->drawing_rubberband) { if (GDK_SCROLL_UP == event->direction) g_idle_add ((GSourceFunc)g_seis_view_tool_highlight_scroll_up_signal, (gpointer)G_SEIS_VIEW_TOOL_HIGHLIGHT (tool)); else if (GDK_SCROLL_DOWN == event->direction) g_idle_add ((GSourceFunc)g_seis_view_tool_highlight_scroll_down_signal, (gpointer)G_SEIS_VIEW_TOOL_HIGHLIGHT (tool)); }}static void g_seis_view_tool_motion_event_int (GSeisViewTool *tool, GtkWidget *seis_view_gl, GdkEventMotion *event, GSeisViewDataVisibility *data_visibility) { GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (G_SEIS_VIEW_TOOL (tool)); GdkGLContext *gl_context = gtk_widget_get_gl_context (seis_view_gl); GdkGLDrawable *gl_drawable = gtk_widget_get_gl_drawable (seis_view_gl); if (private->drawing_rubberband) { if (private->is_threaded) gdk_threads_enter (); if (gdk_gl_drawable_gl_begin (gl_drawable, gl_context)) { glDrawBuffer (GL_FRONT); glEnable (GL_COLOR_LOGIC_OP); glLogicOp (GL_XOR); glColor3f (1, 1, 1); if (private->rubberband_is_drawn) { glBegin (GL_LINE_STRIP); glVertex2f (private->rubberband_slow_start_object, private->rubberband_fast_start_object); glVertex2f (private->rubberband_slow_end_object, private->rubberband_fast_end_object); glEnd (); } private->hlight_area_end = data_visibility->slow_pointer_pos_data; private->rubberband_slow_end_object = data_visibility->slow_pointer_pos_object; private->rubberband_fast_end_object = data_visibility->fast_pointer_pos_object; glBegin (GL_LINE_STRIP); glVertex2f (private->rubberband_slow_start_object, private->rubberband_fast_start_object); glVertex2f (private->rubberband_slow_end_object, private->rubberband_fast_end_object); glEnd (); glLogicOp (GL_SET); glDisable (GL_COLOR_LOGIC_OP); glDrawBuffer (GL_BACK); glFlush (); gdk_gl_drawable_gl_end (gl_drawable); private->rubberband_is_drawn = TRUE; } if (private->is_threaded) gdk_threads_leave (); }}void g_seis_view_tool_highlight_set_rubberband_selection (GSeisViewToolHighlight *self, gboolean on) { GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (self); if (private->data_mutex) g_mutex_lock (private->data_mutex); private->rubberband_selection = on; g_idle_add ((GSourceFunc)g_seis_view_tool_highlight_rb_selection_notify_signal, (gpointer)self); if (private->data_mutex) g_mutex_unlock (private->data_mutex);}static void g_seis_view_tool_highlight_init (GSeisViewToolHighlight *self) { GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (self); (G_SEIS_VIEW_TOOL (self))->event_mask |= G_SEIS_VIEW_TOOL_MOTION_EVENT | G_SEIS_VIEW_TOOL_BUTTON_EVENT | G_SEIS_VIEW_TOOL_SCROLL_EVENT; (G_SEIS_VIEW_TOOL (self))->show_cross = TRUE; private->drawing_rubberband = FALSE; private->rubberband_is_drawn = FALSE; private->cursor_window = NULL; private->hand1_cursor = gdk_cursor_new (GDK_HAND1); private->hand2_cursor = gdk_cursor_new (GDK_HAND2); private->is_threaded = FALSE; private->data_mutex = NULL; private->rubberband_selection = TRUE;#ifdef DEBUG g_print ("<GSeisViewToolHighlight is inited>\n");#endif}static void g_seis_view_tool_highlight_finalize (GObject *object) { GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (G_SEIS_VIEW_TOOL_HIGHLIGHT (object)); if (private->hand1_cursor) gdk_cursor_unref (private->hand1_cursor); if (private->hand2_cursor) gdk_cursor_unref (private->hand2_cursor); if (private->data_mutex) g_mutex_free (private->data_mutex);#ifdef DEBUG g_print ("<GSeisViewToolHighlight is finalized>\n");#endif if (G_OBJECT_CLASS (g_seis_view_tool_highlight_parent_class)->finalize) G_OBJECT_CLASS (g_seis_view_tool_highlight_parent_class)->finalize (object);}enum { PROP_0, PROP_RUBBERBAND_SELECTION};static void g_seis_view_tool_highlight_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GSeisViewToolHighlight *self = G_SEIS_VIEW_TOOL_HIGHLIGHT (object); GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (self); if (private->data_mutex) g_mutex_lock (private->data_mutex); switch (prop_id) { case PROP_RUBBERBAND_SELECTION: g_seis_view_tool_highlight_set_rubberband_selection (self, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } if (private->data_mutex) g_mutex_unlock (private->data_mutex);}static void g_seis_view_tool_highlight_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GSeisViewToolHighlight *self = G_SEIS_VIEW_TOOL_HIGHLIGHT (object); GSeisViewToolHighlightPrivate *private = G_SEIS_VIEW_TOOL_HIGHLIGHT_GET_PRIVATE (self); if (private->data_mutex) g_mutex_lock (private->data_mutex); switch (prop_id) { case PROP_RUBBERBAND_SELECTION: g_value_set_boolean (value, private->rubberband_selection); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } if (private->data_mutex) g_mutex_unlock (private->data_mutex);}static void g_seis_view_tool_highlight_class_init (GSeisViewToolHighlightClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GSeisViewToolClass *tool_class = G_SEIS_VIEW_TOOL_CLASS (klass); gobject_class->finalize = g_seis_view_tool_highlight_finalize; gobject_class->set_property = g_seis_view_tool_highlight_set_property; gobject_class->get_property = g_seis_view_tool_highlight_get_property; g_type_class_add_private (klass, sizeof (GSeisViewToolHighlightPrivate)); tool_class->view_attach_notify = g_seis_view_tool_attach_notify_int; tool_class->view_detach_notify = g_seis_view_tool_detach_notify_int; tool_class->view_button_event = g_seis_view_tool_button_event_int; tool_class->view_scroll_event = g_seis_view_tool_scroll_event_int; tool_class->view_motion_event = g_seis_view_tool_motion_event_int; klass->highlight_scroll_up = NULL; klass->highlight_scroll_down = NULL; klass->highlight_scroll_up_id = g_signal_new ("highlight_scroll_up", G_TYPE_FROM_CLASS ((gpointer)G_OBJECT_CLASS (klass)), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GSeisViewToolHighlightClass, highlight_scroll_up), NULL, NULL, gtkseisviewgl_marshal_VOID__VOID, G_TYPE_NONE, 0); klass->highlight_scroll_down_id = g_signal_new ("highlight_scroll_down", G_TYPE_FROM_CLASS ((gpointer)G_OBJECT_CLASS (klass)), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GSeisViewToolHighlightClass, highlight_scroll_down), NULL, NULL, gtkseisviewgl_marshal_VOID__VOID, G_TYPE_NONE, 0); g_object_class_install_property (gobject_class, PROP_RUBBERBAND_SELECTION, g_param_spec_boolean ("rubberband_selection", "RubberbandSelection", "If TRUE then MB3 drag performs the highlight selection with the rubberband", TRUE, G_PARAM_READWRITE));#ifdef DEBUG g_print ("<GSeisViewToolHighlight class is inited>\n");#endif}GSeisViewToolHighlight* g_seis_view_tool_highlight_new () { return g_object_new (G_SEIS_TYPE_VIEW_TOOL_HIGHLIGHT, NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -