コード例 #1
0
/*
 * EventHandler: rubberband action is completed...
 * Call rubberband_finish() which calls the rubber 
 * band func.
 */
static void
rubberband_release(
    Widget widget,
    XtPointer client_data,
    XEvent *event,
    Boolean *cont_dispatch
)
{
    if (event->type != ButtonRelease)
        return;

    if (rband_in_progress)
    {
        XtUngrabPointer(widget, CurrentTime);
        XtRemoveEventHandler(widget, ButtonReleaseMask, False,
            rubberband_release, client_data);
        rband_in_progress = False;

	if (just_rbanded)
	{
            rubberband_finish(widget, event, client_data);
	    just_rbanded = False;
	    *cont_dispatch = False;
	}
    }
}
コード例 #2
0
ファイル: sheet.c プロジェクト: hriesz/oregano-old
int
sheet_event_callback (GtkWidget *widget, GdkEvent *event, Sheet *sheet)
{
	switch (event->type) {
		case GDK_3BUTTON_PRESS:
			// We don't not care about triple clicks on the sheet.
			return FALSE;
		case GDK_2BUTTON_PRESS:
			// The sheet does not care about double clicks, but invoke the
		 	// canvas event handler and see if an item picks up the event.
			if ((*GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)
			     ->button_press_event) (widget, (GdkEventButton *)event))
			return TRUE;
		else
			return FALSE;
		case GDK_BUTTON_PRESS:
			// If we are in the middle of something else, don't interfere
		 	// with that.
			if (sheet->state != SHEET_STATE_NONE) {
				return FALSE;
			}

			if ((* GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)
		         ->button_press_event) (widget, (GdkEventButton *) event)) {
				return TRUE;
			}

			if (event->button.button == 3) {
				run_context_menu (
					schematic_view_get_schematicview_from_sheet (sheet), 
			    	(GdkEventButton *) event);
				return TRUE;
			}

			if (event->button.button == 1) {
				if (!(event->button.state & GDK_SHIFT_MASK))
					sheet_select_all (sheet, FALSE);

				rubberband_start (sheet, event);
				return TRUE;
			}
			break;
		case GDK_BUTTON_RELEASE:
			if (event->button.button == 4 || event->button.button == 5)
				return TRUE;

			if (event->button.button == 1 && sheet->priv->rubberband_info->state == RUBBERBAND_ACTIVE) {
				rubberband_finish (sheet, event);
				return TRUE;
			}

			if (GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)->button_release_event != NULL) {
				return GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)
					->button_release_event (widget, (GdkEventButton *) event);
			}

			break;

		case GDK_SCROLL:
			if (((GdkEventScroll *)event)->direction == GDK_SCROLL_UP) {
				double zoom;
				sheet_get_zoom (sheet, &zoom);
				if (zoom < ZOOM_MAX)
					sheet_change_zoom (sheet, 1.1);
				} 
				else if (((GdkEventScroll *)event)->direction == GDK_SCROLL_DOWN) {
					double zoom;
				sheet_get_zoom (sheet, &zoom);
				if (zoom > ZOOM_MIN)
					sheet_change_zoom (sheet, 0.9);
				}
				break;
		case GDK_MOTION_NOTIFY:
			if (sheet->priv->rubberband_info->state == RUBBERBAND_ACTIVE) {
				rubberband_update (sheet, event);
				return TRUE;
			}
			if (GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)
			    ->motion_notify_event != NULL) {
				return GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)
						->motion_notify_event (widget, (GdkEventMotion *) event);		
			}
		case GDK_ENTER_NOTIFY:
			GTK_WIDGET_CLASS (sheet->priv->sheet_parent_class)
						->enter_notify_event (widget, (GdkEventCrossing *) event);
		case GDK_KEY_PRESS:
			switch (event->key.keyval) {
				case GDK_KEY_R:
				case GDK_KEY_r:
					if (sheet->state == SHEET_STATE_NONE)
						sheet_rotate_selection (sheet);
					break;
				case GDK_KEY_Home:
				case GDK_KEY_End:
					break;
				case GDK_KEY_Left:
					if (event->key.state & GDK_MOD1_MASK)
						sheet_scroll_pixel (sheet, -20, 0);
					break;
				case GDK_KEY_Up:
					if (event->key.state & GDK_MOD1_MASK)
						sheet_scroll_pixel (sheet, 0, -20);
					break;
				case GDK_KEY_Right:
					if (event->key.state & GDK_MOD1_MASK)
						sheet_scroll_pixel (sheet, 20, 0);
					break;
				case GDK_KEY_Down:
					if (event->key.state & GDK_MOD1_MASK)
						sheet_scroll_pixel (sheet, 0, 20);
					break;
				case GDK_KEY_Page_Up:
					if (event->key.state & GDK_MOD1_MASK)
						sheet_scroll_pixel (sheet, 0, -120);
					break;
				case GDK_KEY_Page_Down:
					if (event->key.state & GDK_MOD1_MASK)
						sheet_scroll_pixel (sheet, 0, 120);
					break;
				case GDK_KEY_Escape:
					g_signal_emit_by_name (G_OBJECT (sheet), "cancel");
					break;
				case GDK_KEY_Delete:
					sheet_delete_selection (sheet);
					break;
				default:
					return FALSE;
			}
		default:
			return FALSE;
	}

	return TRUE;
}