Example usage for com.google.gwt.user.client Event ONTOUCHCANCEL

List of usage examples for com.google.gwt.user.client Event ONTOUCHCANCEL

Introduction

In this page you can find the example usage for com.google.gwt.user.client Event ONTOUCHCANCEL.

Prototype

int ONTOUCHCANCEL

To view the source code for com.google.gwt.user.client Event ONTOUCHCANCEL.

Click Source Link

Document

Fired when the user cancels touching an element.

Usage

From source file:com.cgxlib.xq.client.plugins.MousePlugin.java

License:Apache License

private void bindOtherEvents(final Element element) {

    int moveEvent = touchSupported ? Event.ONTOUCHMOVE : Event.ONMOUSEMOVE;

    int endEvents = touchSupported ? Event.ONTOUCHEND : Event.ONMOUSEUP;

    $(document).as(Events).bind(moveEvent, getPluginName(), (Object) null, new Function() {
        @Override//w w w.j  av  a 2s.c  om
        public boolean f(Event e) {
            mouseMove(element, (XQEvent) XQEvent.create(e));
            return false;
        }
    }).bind(endEvents, getPluginName(), (Object) null, new Function() {
        @Override
        public boolean f(Event e) {
            mouseUp(element, (XQEvent) XQEvent.create(e));
            return false;
        }
    });

    // TODO Event.ONTOUCHEND | Event.ONTOUCHCANCEL don't work -> investigate
    if (touchSupported) {
        $(document).as(Events).bind(Event.ONTOUCHCANCEL, getPluginName(), (Object) null, new Function() {
            @Override
            public boolean f(Event e) {
                mouseUp(element, (XQEvent) XQEvent.create(e));
                return false;
            }
        });
    }
}

From source file:com.cgxlib.xq.client.plugins.MousePlugin.java

License:Apache License

private void unbindOtherEvents() {
    int events = touchSupported ? Event.ONTOUCHCANCEL | Event.ONTOUCHEND | Event.ONTOUCHMOVE
            : Event.ONMOUSEUP | Event.ONMOUSEMOVE;

    $(document).as(Events).unbind(events, getPluginName(), null);
}

From source file:com.haulmont.cuba.web.toolkit.ui.client.jqueryfileupload.CubaFileUploadProgressWindow.java

License:Apache License

private void onResizeEvent(Event event) {
    if (resizable && WidgetUtil.isTouchEventOrLeftMouseButton(event)) {
        switch (event.getTypeInt()) {
        case Event.ONMOUSEDOWN:
        case Event.ONTOUCHSTART:
            showResizingCurtain();/*from   ww w  .j a  va2  s.c  o m*/
            if (BrowserInfo.get().isIE()) {
                resizeBox.getStyle().setVisibility(Style.Visibility.HIDDEN);
            }
            resizing = true;
            startX = WidgetUtil.getTouchOrMouseClientX(event);
            startY = WidgetUtil.getTouchOrMouseClientY(event);
            origW = getElement().getOffsetWidth();
            origH = getElement().getOffsetHeight();
            DOM.setCapture(getElement());
            event.preventDefault();
            break;
        case Event.ONMOUSEUP:
        case Event.ONTOUCHEND:
            setSize(event);
        case Event.ONTOUCHCANCEL:
            DOM.releaseCapture(getElement());
        case Event.ONLOSECAPTURE:
            hideResizingCurtain();
            if (BrowserInfo.get().isIE()) {
                resizeBox.getStyle().clearVisibility();
            }
            resizing = false;
            break;
        case Event.ONMOUSEMOVE:
        case Event.ONTOUCHMOVE:
            if (resizing) {
                setSize(event);
                event.preventDefault();
            }
            break;
        default:
            event.preventDefault();
            break;
        }
    }
}

From source file:com.haulmont.cuba.web.toolkit.ui.client.jqueryfileupload.CubaFileUploadProgressWindow.java

License:Apache License

private void onDragEvent(Event event) {
    if (!WidgetUtil.isTouchEventOrLeftMouseButton(event)) {
        return;/*from   w ww.j  ava 2  s  . c  o  m*/
    }

    switch (DOM.eventGetType(event)) {
    case Event.ONTOUCHSTART:
        if (event.getTouches().length() > 1) {
            return;
        }
    case Event.ONMOUSEDOWN:
        beginMovingWindow(event);
        break;
    case Event.ONMOUSEUP:
    case Event.ONTOUCHEND:
    case Event.ONTOUCHCANCEL:
    case Event.ONLOSECAPTURE:
        stopMovingWindow();
        break;
    case Event.ONMOUSEMOVE:
    case Event.ONTOUCHMOVE:
        moveWindow(event);
        break;
    default:
        break;
    }
}

From source file:com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.VLayoutDragDropMouseHandler.java

License:Apache License

/**
 * Initiates the drag only on the first move event
 *
 * @param originalEvent/*ww  w.  j a  v  a2s  . com*/
 *            the original Mouse Down event. Only events on elements are
 *            passed in here (Element.as() is safe without check here)
 */
protected void initiateDragOnMove(final NativeEvent originalEvent) {
    EventTarget eventTarget = originalEvent.getEventTarget();

    boolean stopEventPropagation = false;

    Element targetElement = Element.as(eventTarget);
    Widget target = WidgetUtil.findWidget(targetElement, null);
    Widget targetParent = target.getParent();

    // Stop event propagation and prevent default behaviour if
    // - target is *not* a VTabsheet.TabCaption or
    // - drag mode is caption mode and widget is caption
    boolean isTabCaption = targetParent instanceof VTabsheet.TabCaption;
    boolean isCaption = VDragDropUtil.isCaptionOrCaptionless(targetParent);

    if (dragMode == LayoutDragMode.CLONE && isTabCaption == false) {

        stopEventPropagation = true;

        // overwrite stopEventPropagation flag again if
        // - root implements VHasDragFilter but
        // - target is not part of its drag filter and
        // - target is not a GWT Label based widget
        if (root instanceof VHasDragFilter) {
            if (((VHasDragFilter) root).getDragFilter().isDraggable(target) == false
                    && (target instanceof LabelBase) == false) {
                stopEventPropagation = false;
            }
        }

        if (root instanceof VHasGrabFilter) {
            VGrabFilter grabFilter = ((VHasGrabFilter) root).getGrabFilter();
            if (grabFilter != null && !grabFilter.canBeGrabbed(root, target)) {
                return;
            }
        }
    }

    if (dragMode == LayoutDragMode.CAPTION && isCaption) {
        stopEventPropagation = true;
    }

    if (isElementNotDraggable(targetElement)) {
        stopEventPropagation = false;
    }

    if (stopEventPropagation) {
        originalEvent.stopPropagation();
        originalEvent.preventDefault();

        // Manually focus as preventDefault() will also cancel focus
        targetElement.focus();
    }

    mouseDownHandlerReg = Event.addNativePreviewHandler(new NativePreviewHandler() {

        @Override
        public void onPreviewNativeEvent(NativePreviewEvent event) {
            int type = event.getTypeInt();
            if (type == Event.ONMOUSEUP || type == Event.ONTOUCHCANCEL || type == Event.ONTOUCHEND) {
                mouseDownHandlerReg.removeHandler();
                mouseDownHandlerReg = null;

            } else if (type == Event.ONMOUSEMOVE || type == Event.ONTOUCHMOVE) {
                mouseDownHandlerReg.removeHandler();
                mouseDownHandlerReg = null;
                initiateDrag(originalEvent);
            }
        }
    });
}

From source file:com.haulmont.cuba.web.widgets.client.addons.dragdroplayouts.ui.VLayoutDragDropMouseHandler.java

License:Apache License

/**
 * Called when the dragging a component should be initiated by both a mouse
 * down event as well as a touch start event
 *
 * FIXME This method is a BIG hack to circumvent Vaadin's very poor client
 * side API's. This will break often. Refactor once Vaadin gets a grip.
 *
 * @param event/*w  w w  .j a  v  a  2  s .co m*/
 */
protected void initiateDrag(NativeEvent event) {
    // Check that dragging is enabled
    if (dragMode == LayoutDragMode.NONE) {
        return;
    }

    // Dragging can only be done with left mouse button and no modifier keys
    if (!isMouseDragEvent(event) && !Util.isTouchEvent(event)) {
        return;
    }

    // Get target widget
    EventTarget eventTarget = event.getEventTarget();
    Element targetElement = Element.as(eventTarget);
    Widget target = WidgetUtil.findWidget(targetElement, null);

    if (isEventOnScrollBar(event)) {
        return;
    }

    // do not drag close button of TabSheet tab
    if (isElementNotDraggable(targetElement)) {
        VDragAndDropManager.get().interruptDrag();
        return;
    }

    // Abort if drag mode is caption mode and widget is not a caption
    boolean isPanelCaption = target instanceof VPanel
            && targetElement.getParentElement().getClassName().contains("v-panel-caption");
    boolean isCaption = isPanelCaption || VDragDropUtil.isCaptionOrCaptionless(target);

    if (dragMode == LayoutDragMode.CAPTION && !isCaption) {
        /*
         * Ensure target is a caption in caption mode
         */
        return;
    }

    if (dragMode == LayoutDragMode.CAPTION && isCaption) {

        /*
         * Ensure that captions in nested layouts don't get accepted if in
         * caption mode
         */

        Widget w = VDragDropUtil.getTransferableWidget(target);
        ComponentConnector c = Util.findConnectorFor(w);
        ComponentConnector parent = (ComponentConnector) c.getParent();
        if (parent.getWidget() != root) {
            return;
        }
    }

    // Create the transfarable
    VTransferable transferable = VDragDropUtil.createLayoutTransferableFromMouseDown(event, root, target);

    // Are we trying to drag the root layout
    if (transferable == null) {
        VConsole.log("Creating transferable on mouse down returned null");
        return;
    }

    // Resolve the component
    final Widget w;
    ComponentConnector c = null, parent = null;

    if (target instanceof TabCaption) {
        TabCaption tabCaption = (TabCaption) target;
        Tab tab = tabCaption.getTab();
        int tabIndex = ((ComplexPanel) tab.getParent()).getWidgetIndex(tab);
        VTabsheet tabsheet = tab.getTabsheet();

        w = tab;
        c = tabsheet.getTab(tabIndex);
        parent = Util.findConnectorFor(tabsheet);

    } else if (root instanceof VDDAccordion) {
        w = target;
        parent = Util.findConnectorFor(root);

        StackItem tab = WidgetUtil.findWidget(targetElement, StackItem.class);
        if (tab != null && root.getElement().isOrHasChild(tab.getElement())) {
            c = ((VDDAccordion) root).getTab(((VDDAccordion) root).getTabPosition(tab));
        }

    } else if (transferable.getData(Constants.TRANSFERABLE_DETAIL_COMPONENT) != null) {

        ComponentConnector connector = (ComponentConnector) transferable
                .getData(Constants.TRANSFERABLE_DETAIL_COMPONENT);
        w = connector.getWidget();
        c = Util.findConnectorFor(w);
        parent = (ComponentConnector) c.getParent();

    } else {
        // Failsafe if no widget was found
        w = root;
        c = Util.findConnectorFor(w);
        parent = (ComponentConnector) c.getParent();
        VConsole.log("Could not resolve component, using root as component");
    }

    VConsole.log("Dragging widget: " + w);
    VConsole.log(" in parent: " + parent);

    // Ensure component is draggable
    if (!VDragDropUtil.isDraggingEnabled(parent, w)) {
        VConsole.log("Dragging disabled for " + w.getClass().getName() + " in "
                + parent.getWidget().getClass().getName());
        VDragAndDropManager.get().interruptDrag();
        return;
    }

    // Announce drag start to listeners
    for (DragStartListener dl : dragStartListeners) {
        if (!dl.dragStart(w, dragMode)) {
            VDragAndDropManager.get().interruptDrag();
            return;
        }
    }

    currentDraggedWidget = w;

    // Announce to handler that we are starting a drag operation
    VDragEvent currentDragEvent = VDragAndDropManager.get().startDrag(transferable, event, true);

    /*
     * Create the drag image
     */
    boolean hasDragCaption = false;

    com.google.gwt.dom.client.Element dragImageElement = null;
    if (root instanceof VHasDragCaptionProvider) {
        VDragCaptionProvider dragCaptionProvider = ((VHasDragCaptionProvider) root).getDragCaptionProvider();
        if (dragCaptionProvider != null) {
            hasDragCaption = true;
            dragImageElement = dragCaptionProvider.getDragCaptionElement(currentDraggedWidget);
        }
    }

    if (!hasDragCaption && dragImageProvider != null) {
        dragImageElement = dragImageProvider.getDragImageElement(w);
    }

    if (dragImageElement != null) {

        // Set stylename to proxy component as well
        if (hasDragCaption) {
            dragImageElement.addClassName(ACTIVE_DRAG_CUSTOM_IMAGE_STYLENAME);
        } else {
            dragImageElement.addClassName(ACTIVE_DRAG_SOURCE_STYLENAME);
        }

    } else if (root instanceof VCssLayout) {
        /*
         * CSS Layout does not have an enclosing div so we just use the
         * component div
         */
        dragImageElement = w.getElement();

    } else if (root instanceof VTabsheet) {
        /*
         * Tabsheet should use the dragged tab as a drag image
         */
        dragImageElement = targetElement;

    } else if (root instanceof VAccordion) {
        /*
         * Accordion should use the dragged tab as a drag image
         */
        dragImageElement = targetElement;

    } else if (root instanceof VFormLayout) {
        /*
         * Dragging a component in a form layout should include the caption
         * and error indicator as well
         */
        Element rowElement = (Element) VDDFormLayout
                .getRowFromChildElement((com.google.gwt.dom.client.Element) w.getElement().cast(),
                        (com.google.gwt.dom.client.Element) root.getElement().cast())
                .cast();

        dragImageElement = rowElement;

    } else {
        /*
         * For other layouts we just use the target element;
         */
        dragImageElement = w.getElement();
    }

    Element clone;
    if (hasDragCaption) {
        currentDragEvent.setDragImage(dragImageElement);
        clone = dragImageElement;
    } else {
        currentDragEvent.createDragImage(dragImageElement, true);
        clone = currentDragEvent.getDragImage();
    }

    assert (clone != null);

    // Lock drag image dimensions
    if (!hasDragCaption) {
        clone.getStyle().setWidth(dragImageElement.getOffsetWidth(), Style.Unit.PX);
        clone.getStyle().setHeight(dragImageElement.getOffsetHeight(), Style.Unit.PX);
    }

    if (c != null && c.delegateCaptionHandling() && !(root instanceof VTabsheet)
            && !(root instanceof VAccordion)) {
        /*
         * Captions are not being dragged with the widget since they are
         * separate. Manually add a clone of the caption to the drag image.
         */
        if (target instanceof VCaption) {
            clone.insertFirst(targetElement.cloneNode(true));
        }
    }

    if (BrowserInfo.get().isIE()) {
        // Fix IE not aligning the drag image correctly when dragging
        // layouts
        clone.getStyle().setPosition(Position.ABSOLUTE);
    }

    currentDraggedWidget.addStyleName(ACTIVE_DRAG_SOURCE_STYLENAME);

    // Listen to mouse up for cleanup
    mouseUpHandlerReg = Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
        @Override
        public void onPreviewNativeEvent(NativePreviewEvent event) {
            if (event.getTypeInt() == Event.ONMOUSEUP || event.getTypeInt() == Event.ONTOUCHEND
                    || event.getTypeInt() == Event.ONTOUCHCANCEL) {
                if (mouseUpHandlerReg != null) {
                    mouseUpHandlerReg.removeHandler();
                    if (currentDraggedWidget != null) {

                        currentDraggedWidget.removeStyleName(ACTIVE_DRAG_SOURCE_STYLENAME);

                        if (dragImageProvider != null) {
                            com.google.gwt.dom.client.Element dragImageElement = dragImageProvider
                                    .getDragImageElement(currentDraggedWidget);
                            if (dragImageElement != null) {
                                dragImageElement.removeClassName(ACTIVE_DRAG_SOURCE_STYLENAME);
                            }
                        }

                        currentDraggedWidget = null;
                    }
                }

                // Ensure capturing is turned off at mouse up
                Event.releaseCapture(RootPanel.getBodyElement());
            }
        }
    });

}

From source file:com.sencha.gxt.cell.core.client.form.ComboBoxCell.java

License:sencha.com license

protected void init(ListStore<T> store) {
    listContainer = new VerticalLayoutContainer();
    listContainer.getElement().makePositionable(true);
    listContainer.setBorders(true);/*  ww w .jav a 2s .c om*/
    listContainer.setShadow(true);
    listContainer.add(listView, new VerticalLayoutData(1, -1));

    bindStore(store);

    final TapGestureRecognizer previewTapGestureRecognizer = new TapGestureRecognizer() {

        @Override
        protected void onTap(TouchData touchData) {
            NativeEvent event = touchData.getLastNativeEvent();
            Element target = touchData.getStartElement().asElement();
            if (listContainer.getElement().isOrHasChild(target)) {
                if (pagingToolBar == null || (!pagingToolBar.getElement().isOrHasChild(target))) {
                    onViewClick(lastParent, event, true, false);
                    event.preventDefault();
                }
            } else {
                collapseIf(target.<XElement>cast());
            }
            super.onTap(touchData);
        }
    };

    eventPreview = new BaseEventPreview() {
        protected boolean onPreview(NativePreviewEvent pe) {
            Element target = pe.getNativeEvent().getEventTarget().cast();

            // pointer event MOUSEDOWN conflicts with scrolling
            if (PointerEventsSupport.impl.isSupported()) {
                previewTapGestureRecognizer.handle(pe.getNativeEvent());
                return true;
            }

            switch (pe.getTypeInt()) {
            case Event.ONSCROLL:
            case Event.ONMOUSEWHEEL:
                collapseIf(pe);
                break;
            case Event.ONMOUSEDOWN:
                if (listContainer.getElement().isOrHasChild(target)) {
                    if (pagingToolBar == null || (!pagingToolBar.getElement().isOrHasChild(target))) {
                        onViewClick(lastParent, pe.getNativeEvent(), true, false);
                        pe.getNativeEvent().preventDefault();
                    }
                } else {
                    collapseIf(pe);
                }
                break;
            case Event.ONTOUCHSTART:
            case Event.ONTOUCHMOVE:
            case Event.ONTOUCHEND:
            case Event.ONTOUCHCANCEL:
                previewTapGestureRecognizer.handle(pe.getNativeEvent());
                break;
            }

            NativeEvent e = pe.getNativeEvent();

            if (pe.getTypeInt() == KeyNav.getKeyEvent() && expanded) {
                if (e.getKeyCode() == KeyCodes.KEY_ENTER) {
                    if (pagingToolBar != null && pagingToolBar.getElement().isOrHasChild(target)) {
                        return true;
                    }
                    e.stopPropagation();
                    e.preventDefault();

                    if (GXT.isIE()) {
                        ignoreNextEnter = true;
                    }

                    onViewClick(lastParent, e, false, true);
                }
            }
            return true;
        }
    };
    eventPreview.setAutoHide(false);

    dqTask = new DelayedTask() {

        @Override
        public void onExecute() {
            doQuery(lastContext, lastParent, lastValueUpdater, lastValue, getText(lastParent), false);
        }
    };

}

From source file:com.sencha.gxt.widget.core.client.CollapsePanel.java

License:sencha.com license

/**
 * Expands a collapsed {@link CollapsePanel}, optionally animating it so that
 * it appears to expand from the direction of its associated region. Has no
 * effect if the panel is not collapsed.
 *//*from  www  .  j  a  v  a  2s.  co m*/
public void expand() {
    if (panelData.isFloatable() && !expanded) {
        SplitBar bar = panel.getData("splitBar");
        if (bar != null) {
            bar.getElement().getStyle().setDisplay(Display.NONE);
        }

        for (Widget w : panel.getHeader().getTools()) {
            w.getElement().getStyle().setVisibility(Visibility.HIDDEN);
        }
        panel.getElement().updateZIndex(0);
        panel.getElement().setVisible(true);
        RootPanel.get().add(panel);

        SplitBar collapseBar = getData("splitBar");
        if (bar != null) {
            collapseBar.getElement().getStyle().setDisplay(Display.NONE);
        }

        Direction d = Direction.RIGHT;
        AnchorAlignment align = new AnchorAlignment(Anchor.TOP_LEFT, Anchor.TOP_RIGHT);
        switch (region) {
        case EAST:
            d = Direction.LEFT;
            align = new AnchorAlignment(Anchor.TOP_RIGHT, Anchor.TOP_LEFT);
            break;
        case SOUTH:
            align = new AnchorAlignment(Anchor.BOTTOM_LEFT, Anchor.TOP_LEFT);
            d = Direction.UP;
            break;
        case NORTH:
            d = Direction.DOWN;
            align = new AnchorAlignment(Anchor.TOP_LEFT, Anchor.BOTTOM_LEFT);
            break;
        case WEST:
        case CENTER:
            // do nothing
        }
        panel.getElement().alignTo(getElement(), align, 0, 0);

        if (animate && !disableAnimations) {
            Fx fx = new Fx();
            fx.addAfterAnimateHandler(new AfterAnimateHandler() {
                @Override
                public void onAfterAnimate(AfterAnimateEvent event) {
                    expanded = true;
                }
            });
            panel.getElement().<FxElement>cast().slideIn(d, fx);
        } else {
            expanded = true;
        }

        final TapGestureRecognizer previewTapGestureRecognizer = new TapGestureRecognizer() {
            @Override
            public boolean handleEnd(NativeEvent endEvent) {
                super.handleEnd(endEvent);
                XElement target = endEvent.getEventTarget().cast();
                if (!panel.getElement().isOrHasChild(target) && !(getElement().isOrHasChild(target))) {
                    collapse();
                    return false;
                }
                return true;
            }
        };

        preview = new BaseEventPreview() {
            @Override
            protected boolean onPreview(NativePreviewEvent pe) {
                switch (pe.getTypeInt()) {
                case Event.ONCLICK:
                case Event.ONMOUSEDOWN:
                    XElement target = pe.getNativeEvent().getEventTarget().cast();
                    if (!panel.getElement().isOrHasChild(target) && !(getElement().isOrHasChild(target))) {
                        collapse();
                        remove();
                    }

                    break;
                case Event.ONTOUCHSTART:
                case Event.ONTOUCHMOVE:
                case Event.ONTOUCHCANCEL:
                    previewTapGestureRecognizer.handle(pe.getNativeEvent());
                    break;
                case Event.ONTOUCHEND:
                    if (!previewTapGestureRecognizer.handle(pe.getNativeEvent())) {
                        remove();
                    }
                }
                return true;
            }
        };
        CompositeElement comp = new CompositeElement();
        comp.add(panel.getElement());
        preview.setIgnoreList(comp);
        preview.add();
    }
}

From source file:com.sencha.gxt.widget.core.client.Component.java

License:sencha.com license

@Override
public void onBrowserEvent(Event event) {
    switch (event.getTypeInt()) {
    case Event.ONFOCUS:
        onFocus(event);/*from  w ww  .j av  a  2 s. c o m*/
        break;
    case Event.ONBLUR:
        onBlur(event);
        break;
    case Event.ONCONTEXTMENU:
        if (disableContextMenu) {
            event.preventDefault();
        }
        onRightClick(event);
        break;
    case Event.ONTOUCHSTART:
    case Event.ONTOUCHMOVE:
    case Event.ONTOUCHCANCEL:
    case Event.ONTOUCHEND:
        onTouch(event);
        break;
    }
    if (PointerEventsSupport.impl.isSupported() && PointerEventsSupport.impl.isPointerEvent(event)) {
        onTouch(event);
    }

    int type = event.getTypeInt();
    // specialized support for mouse overs
    if (overElements != null && (type == Event.ONMOUSEOVER || type == Event.ONMOUSEOUT)) {
        XElement target = event.getEventTarget().cast();
        if (target != null) {
            String style = overElements.get(target.getId());
            if (style != null) {
                target.setClassName(style, type == Event.ONMOUSEOVER);
            }
        }
    }

    // we are not calling super so must fire dom events
    DomEvent.fireNativeEvent(event, this, this.getElement());
}

From source file:com.smartgwt.mobile.client.widgets.form.fields.SliderItem.java

License:Open Source License

@Override
public void onBrowserEvent(Event event) {
    if (!isEnabled() || _isReadOnly()) {
        return;/*ww  w  .  j  av  a2s  . co m*/
    }
    Element target = event.getEventTarget().cast();
    if (target != null && getElement().isOrHasChild(target)) {
        switch (event.getTypeInt()) {
        case Event.ONMOUSEDOWN:
            if (!touched) {
                _onStart(event, null);
            }
            break;
        case Event.ONTOUCHSTART:
        case Event.ONGESTURESTART:
            touched = true;
            _onStart(event, null);
            break;
        case Event.ONMOUSEMOVE:
            if (!touched) {
                onMove(event);
            }
            break;
        case Event.ONTOUCHMOVE:
        case Event.ONGESTURECHANGE:
            onMove(event);
            break;
        case Event.ONMOUSEUP:
            if (!touched) {
                _onEnd(event);
            }
            break;
        case Event.ONTOUCHEND:
        case Event.ONTOUCHCANCEL:
        case Event.ONGESTUREEND:
            _onEnd(event);
            break;
        }
    }
}