📄 gseisviewtoolmagnify.c
字号:
} else if (GDK_SCROLL_DOWN == event->direction) { slow_size_data = (new_slow_end_data - new_slow_start_data) * zoom_rate; fast_size_data = (new_fast_end_data - new_fast_start_data) * zoom_rate; } new_slow_start_data -= (private->slow_end_data - private->slow_start_data - slow_size_data) / 2.0; new_slow_end_data += (private->slow_end_data - private->slow_start_data - slow_size_data) / 2.0; new_fast_start_data -= (private->fast_end_data - private->fast_start_data - fast_size_data) / 2.0; new_fast_end_data += (private->fast_end_data - private->fast_start_data - fast_size_data) / 2.0; if (new_slow_start_data < 0) new_slow_start_data = 0; if (new_slow_end_data > data_visibility->slow_size_data) new_slow_end_data = data_visibility->slow_size_data; if (new_fast_start_data < 0) new_fast_start_data = 0; if (new_fast_end_data > data_visibility->fast_size_data) new_fast_end_data = data_visibility->fast_size_data; if (private->data_mutex) g_mutex_lock (private->data_mutex); gboolean slow_start_changed = (private->slow_start_data != new_slow_start_data); gboolean slow_end_changed = (private->slow_end_data != new_slow_end_data); gboolean fast_start_changed = (private->fast_start_data != new_fast_start_data); gboolean fast_end_changed = (private->fast_end_data != new_fast_end_data); private->slow_start_data = new_slow_start_data; private->slow_end_data = new_slow_end_data; private->fast_start_data = new_fast_start_data; private->fast_end_data = new_fast_end_data; if (private->data_mutex) g_mutex_unlock (private->data_mutex); if (slow_start_changed) g_idle_add ((GSourceFunc)g_seis_view_tool_magnify_slow_start_notify_signal, (gpointer)G_SEIS_VIEW_TOOL_MAGNIFY (tool)); if (slow_end_changed) g_idle_add ((GSourceFunc)g_seis_view_tool_magnify_slow_end_notify_signal, (gpointer)G_SEIS_VIEW_TOOL_MAGNIFY (tool)); if (fast_start_changed) g_idle_add ((GSourceFunc)g_seis_view_tool_magnify_fast_start_notify_signal, (gpointer)G_SEIS_VIEW_TOOL_MAGNIFY (tool)); if (fast_end_changed) g_idle_add ((GSourceFunc)g_seis_view_tool_magnify_fast_end_notify_signal, (gpointer)G_SEIS_VIEW_TOOL_MAGNIFY (tool)); g_idle_add ((GSourceFunc)g_seis_view_tool_magnify_viewport_signal, (gpointer)G_SEIS_VIEW_TOOL_MAGNIFY (tool)); g_seis_view_tool_magnify_draw_rect (tool, seis_view_gl, data_visibility, FALSE); }}static void g_seis_view_tool_motion_event_int (GSeisViewTool *tool, GtkWidget *seis_view_gl, GdkEventMotion *event, GSeisViewDataVisibility *data_visibility) { GSeisViewToolMagnifyPrivate *private = G_SEIS_VIEW_TOOL_MAGNIFY_GET_PRIVATE (G_SEIS_VIEW_TOOL (tool)); gdouble slow_epsilon = 4.0 * data_visibility->slow_size_data / (gdouble)data_visibility->slow_size_screen; gdouble fast_epsilon = 4.0 * data_visibility->fast_size_data / (gdouble)data_visibility->fast_size_screen; gdouble upper_horiz_dist = data_visibility->fast_pointer_pos_data - private->fast_start_data; gdouble lower_horiz_dist = data_visibility->fast_pointer_pos_data - private->fast_end_data; gdouble vert_left_dist = data_visibility->slow_pointer_pos_data - private->slow_start_data; gdouble vert_right_dist = data_visibility->slow_pointer_pos_data - private->slow_end_data; if (private->dragging) { gdouble new_slow_start_data = private->slow_start_data, new_slow_end_data = private->slow_end_data; gdouble new_fast_start_data = private->fast_start_data, new_fast_end_data = private->fast_end_data; g_seis_view_tool_magnify_draw_rect (tool, seis_view_gl, data_visibility, FALSE); switch (private->rect_element) { case G_SEIS_VIEW_TOOL_RECT_INSIDE: new_slow_start_data = private->slow_start_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; new_slow_end_data = private->slow_end_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; new_fast_start_data = private->fast_start_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; new_fast_end_data = private->fast_end_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_slow_start_data < 0) { new_slow_start_data = 0; new_slow_end_data = private->slow_end_data - private->slow_start_data; } if (new_slow_end_data > data_visibility->slow_size_data) { new_slow_end_data = data_visibility->slow_size_data; new_slow_start_data = new_slow_end_data - (private->slow_end_data - private->slow_start_data); } if (new_fast_start_data < 0) { new_fast_start_data = 0; new_fast_end_data = private->fast_end_data - private->fast_start_data; } if (new_fast_end_data > data_visibility->fast_size_data) { new_fast_end_data = data_visibility->fast_size_data; new_fast_start_data = new_fast_end_data - (private->fast_end_data - private->fast_start_data); } break; case G_SEIS_VIEW_TOOL_RECT_UH: new_fast_start_data = private->fast_start_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_fast_start_data < 0) new_fast_start_data = 0; if (new_fast_start_data > (new_fast_end_data - 2 * fast_epsilon)) new_fast_start_data = new_fast_end_data - 2 * fast_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_LH: new_fast_end_data = private->fast_end_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_fast_end_data > data_visibility->fast_size_data) new_fast_end_data = data_visibility->fast_size_data; if (new_fast_end_data < (new_fast_start_data + 2 * fast_epsilon)) new_fast_end_data = new_fast_start_data + 2 * fast_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_VR: new_slow_end_data = private->slow_end_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; if (new_slow_end_data > data_visibility->slow_size_data) new_slow_end_data = data_visibility->slow_size_data; if (new_slow_end_data < (new_slow_start_data + 2 * slow_epsilon)) new_slow_end_data = new_slow_start_data + 2 * slow_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_VL: new_slow_start_data = private->slow_start_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; if (new_slow_start_data < 0) new_slow_start_data = 0; if (new_slow_start_data > (new_slow_end_data - 2 * slow_epsilon)) new_slow_start_data = new_slow_end_data - 2 * slow_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_UR: new_slow_end_data = private->slow_end_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; new_fast_start_data = private->fast_start_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_slow_end_data > data_visibility->slow_size_data) new_slow_end_data = data_visibility->slow_size_data; if (new_slow_end_data < (new_slow_start_data + 2 * slow_epsilon)) new_slow_end_data = new_slow_start_data + 2 * slow_epsilon; if (new_fast_start_data < 0) new_fast_start_data = 0; if (new_fast_start_data > (new_fast_end_data - 2 * fast_epsilon)) new_fast_start_data = new_fast_end_data - 2 * fast_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_UL: new_slow_start_data = private->slow_start_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; new_fast_start_data = private->fast_start_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_slow_start_data < 0) new_slow_start_data = 0; if (new_slow_start_data > (new_slow_end_data - 2 * slow_epsilon)) new_slow_start_data = new_slow_end_data - 2 * slow_epsilon; if (new_fast_start_data < 0) new_fast_start_data = 0; if (new_fast_start_data > (new_fast_end_data - 2 * fast_epsilon)) new_fast_start_data = new_fast_end_data - 2 * fast_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_LR: new_slow_end_data = private->slow_end_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; new_fast_end_data = private->fast_end_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_slow_end_data > data_visibility->slow_size_data) new_slow_end_data = data_visibility->slow_size_data; if (new_slow_end_data < (new_slow_start_data + 2 * slow_epsilon)) new_slow_end_data = new_slow_start_data + 2 * slow_epsilon; if (new_fast_end_data > data_visibility->fast_size_data) new_fast_end_data = data_visibility->fast_size_data; if (new_fast_end_data < (new_fast_start_data + 2 * fast_epsilon)) new_fast_end_data = new_fast_start_data + 2 * fast_epsilon; break; case G_SEIS_VIEW_TOOL_RECT_LL: new_slow_start_data = private->slow_start_data - private->slow_pointer_data + data_visibility->slow_pointer_pos_data; new_fast_end_data = private->fast_end_data - private->fast_pointer_data + data_visibility->fast_pointer_pos_data; if (new_slow_start_data < 0) new_slow_start_data = 0; if (new_slow_start_data > (new_slow_end_data - 2 * slow_epsilon)) new_slow_start_data = new_slow_end_data - 2 * slow_epsilon; if (new_fast_end_data > data_visibility->fast_size_data) new_fast_end_data = data_visibility->fast_size_data; if (new_fast_end_data < (new_fast_start_data + 2 * fast_epsilon)) new_fast_end_data = new_fast_start_data + 2 * fast_epsilon; break; default: break; } if (private->data_mutex) g_mutex_lock (private->data_mutex); private->slow_start_data = new_slow_start_data; private->slow_end_data = new_slow_end_data; private->fast_start_data = new_fast_start_data; private->fast_end_data = new_fast_end_data; if (private->data_mutex) g_mutex_unlock (private->data_mutex); g_idle_add ((GSourceFunc)g_seis_view_tool_magnify_viewport_signal, (gpointer)G_SEIS_VIEW_TOOL_MAGNIFY (tool)); private->slow_pointer_data = data_visibility->slow_pointer_pos_data; private->fast_pointer_data = data_visibility->fast_pointer_pos_data; g_seis_view_tool_magnify_draw_rect (tool, seis_view_gl, data_visibility, FALSE); } else { GdkCursor *new_cursor = NULL; GSeisViewToolRectElement new_rect_element = G_SEIS_VIEW_TOOL_RECT_OUTSIDE; if (upper_horiz_dist < 0) upper_horiz_dist = -upper_horiz_dist; if (lower_horiz_dist < 0) lower_horiz_dist = -lower_horiz_dist; if (vert_left_dist < 0) vert_left_dist = -vert_left_dist; if (vert_right_dist < 0) vert_right_dist = -vert_right_dist; if (upper_horiz_dist < fast_epsilon) { if (vert_left_dist < slow_epsilon) { new_cursor = private->ul_angle_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_UL; } else if (vert_right_dist < slow_epsilon) { new_cursor = private->ur_angle_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_UR; } else if (data_visibility->slow_pointer_pos_data > private->slow_start_data && data_visibility->slow_pointer_pos_data < private->slow_end_data) { new_cursor = private->horiz_scale_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_UH; } } else if (lower_horiz_dist < fast_epsilon) { if (vert_left_dist < slow_epsilon) { new_cursor = private->ll_angle_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_LL; } else if (vert_right_dist < slow_epsilon) { new_cursor = private->lr_angle_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_LR; } else if (data_visibility->slow_pointer_pos_data > private->slow_start_data && data_visibility->slow_pointer_pos_data < private->slow_end_data) { new_cursor = private->horiz_scale_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_LH; } } else if (vert_left_dist < slow_epsilon) { if (upper_horiz_dist < fast_epsilon) { new_cursor = private->ul_angle_cursor; new_rect_element = G_SEIS_VIEW_TOOL_RECT_UL; } else if (lower_horiz_dist < fast_epsilon) { new_cursor = private->ll_angle_cursor;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -