⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gseisviewtoolmotion.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 2 页
字号:
            if (NULL == private->cursor_window)                private->cursor_window = seis_view_gl->window;            if (private->is_threaded) {                g_idle_add ((GSourceFunc)g_seis_view_tool_cursor_view_drag_idle,                            (gpointer)tool);            } else {                gdk_window_set_cursor (seis_view_gl->window, private->view_drag_cursor);                gdk_flush ();            }        } else if (GDK_BUTTON_RELEASE == event->type) {            tool->show_cross = TRUE;            if (private->is_threaded) {                g_idle_add ((GSourceFunc)g_seis_view_tool_cursor_default_idle,                            (gpointer)tool);            } else {                gdk_window_set_cursor (seis_view_gl->window, NULL);                gdk_flush ();            }            private->zoom_rect_is_drawn = FALSE;        }    }}static void g_seis_view_tool_scroll_event_int (GSeisViewTool *tool, GtkWidget *seis_view_gl, GdkEventScroll *event,                                               GSeisViewDataVisibility *data_visibility) {    GtkSeisViewGl *seis_view = GTK_SEIS_VIEW_GL (seis_view_gl);    GSeisViewToolMotionPrivate *private = G_SEIS_VIEW_TOOL_MOTION_GET_PRIVATE (G_SEIS_VIEW_TOOL (tool));    gdouble slow_start_data, slow_size_data;    gdouble fast_start_data, fast_size_data;    gdouble zoom_rate = 0.9;    guint slow_num, fast_num;    if (FALSE == private->drawing_zoom_rect) {        g_object_get (G_OBJECT (seis_view_gl), "slow_num", &slow_num, "fast_num", &fast_num, NULL);        if (GDK_SCROLL_UP == event->direction) {            slow_size_data = data_visibility->slow_size_data / zoom_rate;            fast_size_data = data_visibility->fast_size_data / zoom_rate;            if (slow_size_data < (1.0 / (gdouble)slow_num)) {                slow_start_data = data_visibility->slow_start_data;                slow_size_data = 1.0 / (gdouble)slow_num;            } else                slow_start_data = data_visibility->slow_start_data - (slow_size_data - data_visibility->slow_size_data) / 2.0;            if (fast_size_data < (1.0 / (gdouble)fast_num)) {                fast_start_data = data_visibility->fast_start_data;                fast_size_data = 1.0 / (gdouble)fast_num;            } else                fast_start_data = data_visibility->fast_start_data - (fast_size_data - data_visibility->fast_size_data) / 2.0;        } else if (GDK_SCROLL_DOWN == event->direction) {            slow_size_data = data_visibility->slow_size_data * zoom_rate;            fast_size_data = data_visibility->fast_size_data * zoom_rate;            if (slow_size_data < (1.0 / (gdouble)slow_num)) {                slow_start_data = data_visibility->slow_start_data;                slow_size_data = 1.0 / (gdouble)slow_num;            } else                slow_start_data = data_visibility->slow_start_data + (data_visibility->slow_size_data - slow_size_data) / 2.0;            if (fast_size_data < (1.0 / (gdouble)fast_num)) {                fast_start_data = data_visibility->fast_start_data;                fast_size_data = 1.0 / (gdouble)fast_num;            } else                fast_start_data = data_visibility->fast_start_data + (data_visibility->fast_size_data - fast_size_data) / 2.0;        }        gtk_seis_view_gl_set_data_viewport (seis_view, slow_start_data, slow_size_data,                                            fast_start_data, fast_size_data);        gtk_seis_view_gl_redraw (seis_view);    }}static void g_seis_view_tool_motion_event_int (GSeisViewTool *tool, GtkWidget *seis_view_gl, GdkEventMotion *event,                                               GSeisViewDataVisibility *data_visibility) {    GSeisViewToolMotionPrivate *private = G_SEIS_VIEW_TOOL_MOTION_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);    GtkSeisViewGl *seis_view = GTK_SEIS_VIEW_GL (seis_view_gl);    gdouble slow_start_data, fast_start_data;    if (private->drawing_zoom_rect) {        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->zoom_rect_is_drawn) {                glBegin (GL_LINE_LOOP);                glVertex2f (private->slow_start_object, private->fast_start_object);                glVertex2f (private->slow_end_object, private->fast_start_object);                glVertex2f (private->slow_end_object, private->fast_end_object);                glVertex2f (private->slow_start_object, private->fast_end_object);                glEnd ();            }            private->slow_end_object = data_visibility->slow_pointer_pos_object;            private->fast_end_object = data_visibility->fast_pointer_pos_object;            private->slow_end_data = data_visibility->slow_pointer_pos_data;            private->fast_end_data = data_visibility->fast_pointer_pos_data;            glBegin (GL_LINE_LOOP);            glVertex2f (private->slow_start_object, private->fast_start_object);            glVertex2f (private->slow_end_object, private->fast_start_object);            glVertex2f (private->slow_end_object, private->fast_end_object);            glVertex2f (private->slow_start_object, private->fast_end_object);            glEnd ();            glLogicOp (GL_SET);            glDisable (GL_COLOR_LOGIC_OP);            glDrawBuffer (GL_BACK);            glFlush ();            gdk_gl_drawable_gl_end (gl_drawable);            private->zoom_rect_is_drawn = TRUE;        }        if (private->is_threaded)            gdk_threads_leave ();    } else if (event->state & GDK_BUTTON1_MASK) {        private->slow_end_data = data_visibility->slow_pointer_pos_data;        private->fast_end_data = data_visibility->fast_pointer_pos_data;        slow_start_data = data_visibility->slow_start_data + private->slow_start_data - private->slow_end_data;        fast_start_data = data_visibility->fast_start_data + private->fast_start_data - private->fast_end_data;        if (slow_start_data < 0)            private->slow_start_data -= slow_start_data;        if ((slow_start_data + data_visibility->slow_size_data) > 1.0)            private->slow_start_data += (1.0 - slow_start_data - data_visibility->slow_size_data);        if (fast_start_data < 0)            private->fast_start_data -= fast_start_data;        if ((fast_start_data + data_visibility->fast_size_data) > 1.0)            private->fast_start_data += (1.0 - fast_start_data - data_visibility->fast_size_data);        gtk_seis_view_gl_set_data_viewport (seis_view, slow_start_data, data_visibility->slow_size_data,                                            fast_start_data, data_visibility->fast_size_data);        gtk_seis_view_gl_redraw (seis_view);    }}static void g_seis_view_tool_motion_init (GSeisViewToolMotion *self) {    GSeisViewToolMotionPrivate *private = G_SEIS_VIEW_TOOL_MOTION_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_zoom_rect = FALSE;    private->zoom_rect_is_drawn = FALSE;    private->cursor_window = NULL;    private->zoom_rect_cursor = gdk_cursor_new (GDK_LR_ANGLE);    private->view_drag_cursor = gdk_cursor_new (GDK_FLEUR);    private->is_threaded = FALSE;#ifdef DEBUG    g_print ("<GSeisViewToolMotion is inited>\n");#endif}static void g_seis_view_tool_motion_finalize (GObject *object) {    GSeisViewToolMotionPrivate *private = G_SEIS_VIEW_TOOL_MOTION_GET_PRIVATE (G_SEIS_VIEW_TOOL_MOTION (object));    if (private->zoom_rect_cursor)        gdk_cursor_unref (private->zoom_rect_cursor);    if (private->view_drag_cursor)        gdk_cursor_unref (private->view_drag_cursor);#ifdef DEBUG    g_print ("<GSeisViewToolMotion is finalized>\n");#endif    if (G_OBJECT_CLASS (g_seis_view_tool_motion_parent_class)->finalize)        G_OBJECT_CLASS (g_seis_view_tool_motion_parent_class)->finalize (object);}static void g_seis_view_tool_motion_class_init (GSeisViewToolMotionClass *klass) {    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);    GSeisViewToolClass *tool_class = G_SEIS_VIEW_TOOL_CLASS (klass);    gobject_class->finalize = g_seis_view_tool_motion_finalize;    g_type_class_add_private (klass, sizeof (GSeisViewToolMotionPrivate));    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;#ifdef DEBUG    g_print ("<GSeisViewToolMotion class is inited>\n");#endif}GSeisViewToolMotion* g_seis_view_tool_motion_new () {    return g_object_new (G_SEIS_TYPE_VIEW_TOOL_MOTION, NULL);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -