private void handleEvent (NativeEvent e) { if (e.getType().equals("mousedown")) { if (!e.getEventTarget().equals(canvas) || pressedButtons.contains(getButton(e.getButton()))) { float mouseX = getRelativeX(e, canvas); float mouseY = getRelativeY(e, canvas); this.justTouched = true; this.touched[0] = true; this.pressedButtons.add(getButton(e.getButton())); this.deltaX[0] = 0; this.deltaY[0] = 0; if (processor != null) processor.touchDown(touchX[0], touchY[0], 0, getButton(e.getButton())); if (e.getType().equals("mousemove")) { if (isCursorCatched()) { this.deltaX[0] = (int)getMovementXJSNI(e); if (e.getType().equals("mouseup")) { if (!pressedButtons.contains(getButton(e.getButton()))) return; this.pressedButtons.remove(getButton(e.getButton())); this.touched[0] = pressedButtons.size > 0; if (isCursorCatched()) { if (processor != null) processor.touchUp(touchX[0], touchY[0], 0, getButton(e.getButton())); if (e.getType().equals(getMouseWheelEvent())) { if (processor != null) { processor.scrolled((int)getMouseWheelVelocity(e));
/** Kindly borrowed from PlayN. **/ protected int getRelativeX (NativeEvent e, CanvasElement target) { float xScaleRatio = target.getWidth() * 1f / target.getClientWidth(); // Correct for canvas CSS scaling return Math.round(xScaleRatio * (e.getClientX() - target.getAbsoluteLeft() + target.getScrollLeft() + target.getOwnerDocument().getScrollLeft())); }
/** Kindly borrowed from PlayN. **/ protected int getRelativeY (NativeEvent e, CanvasElement target) { float yScaleRatio = target.getHeight() * 1f / target.getClientHeight(); // Correct for canvas CSS scaling return Math.round(yScaleRatio * (e.getClientY() - target.getAbsoluteTop() + target.getScrollTop() + target.getOwnerDocument().getScrollTop())); }
/** * {@inheritDoc} * * <p> * If you override this method to add support for events, remember to pass the * event types that the cell expects into the constructor. * </p> */ public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { String eventType = event.getType(); // Special case the ENTER key for a unified user experience. if (BrowserEvents.KEYDOWN.equals(eventType) && event.getKeyCode() == KeyCodes.KEY_ENTER) { onEnterKeyDown(context, parent, value, event, valueUpdater); } }
@Override public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); if (CLICK.equals(event.getType())) { EventTarget eventTarget = event.getEventTarget(); if (!Element.is(eventTarget)) { return; } if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) { // Ignore clicks that occur outside of the main element. onEnterKeyDown(context, parent, value, event, valueUpdater); } } }
public SelectAction translateSelectionEvent(CellPreviewEvent<T> event) { // Handle the event. NativeEvent nativeEvent = event.getNativeEvent(); if (BrowserEvents.CLICK.equals(nativeEvent.getType())) { // Ignore if the event didn't occur in the correct column. if (column > -1 && column != event.getColumn()) { return SelectAction.IGNORE; } // Determine if we clicked on a checkbox. Element target = nativeEvent.getEventTarget().cast(); if ("input".equals(target.getTagName().toLowerCase(Locale.ROOT))) { final InputElement input = target.cast(); if ("checkbox".equals(input.getType().toLowerCase(Locale.ROOT))) { // Synchronize the checkbox with the current selection state. input.setChecked(event.getDisplay().getSelectionModel().isSelected( event.getValue())); return SelectAction.TOGGLE; } } return SelectAction.IGNORE; } // For keyboard events, do the default action. return SelectAction.DEFAULT; } }
private void editEvent(Context context, Element parent, String value, ViewData viewData, NativeEvent event, ValueUpdater<String> valueUpdater) { String type = event.getType(); boolean keyUp = KEYUP.equals(type); boolean keyDown = KEYDOWN.equals(type); if (keyUp || keyDown) { int keyCode = event.getKeyCode(); if (keyUp && keyCode == KeyCodes.KEY_ENTER) { EventTarget eventTarget = event.getEventTarget(); if (Element.is(eventTarget)) { Element target = Element.as(eventTarget); if ("input".equals(target.getTagName().toLowerCase(Locale.ROOT))) { commit(context, parent, viewData, valueUpdater);
@Override public void onCellPreview(CellPreviewEvent<T> event) { NativeEvent nativeEvent = event.getNativeEvent(); String eventType = event.getNativeEvent().getType(); if (BrowserEvents.KEYDOWN.equals(eventType) && !event.isCellEditing()) { switch (nativeEvent.getKeyCode()) { case KeyCodes.KEY_DOWN: nextRow(); Element target = Element.as(event.getNativeEvent().getEventTarget()); isFocusable = CellBasedWidgetImpl.get().isFocusable(target); display.setKeyboardSelectedRow(relRow, !isFocusable);
private static NativeEvent createMouseDownEvent(NativeEvent e) { return Document.get().createMouseDownEvent(0, e.getScreenX(), e.getScreenY(), e.getClientX(), e.getClientY(), e.getCtrlKey(), e.getAltKey(), e.getShiftKey(), e.getMetaKey(), e.getButton()); }
Element target = event.getEventTarget().cast(); if (!parent.getFirstChildElement().isOrHasChild(target)) { return; String eventType = event.getType(); if (CLICK.equals(eventType)) { event.preventDefault();
/** * Check whether or not an event occurred within the wrapper around the image * element. * * @param event the event * @param parent the parent element * @return true if the event targets the image */ private boolean eventOccurredOnImage(NativeEvent event, Element parent) { EventTarget eventTarget = event.getEventTarget(); if (!Element.is(eventTarget)) { return false; } Element target = eventTarget.cast(); // Make sure the target occurred within the div around the image. Element imgWrapper = parent.getFirstChildElement().getNextSiblingElement(); return imgWrapper.isOrHasChild(target); } }
@Override public void onPreviewNativeEvent(NativePreviewEvent event) { if (Event.ONCLICK == event.getTypeInt()) { Point clickPoint = new Point( event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY()); /* * In mobile browsers, when the user touches on the screen, drag * his finger across and take his finger off, the browser fires a * click event at the position where the touch start happen. This * click event is called "ghost click". This click is not intended by * the user and thus needs to be busted. * Also, while the panel is scrolling, if the user taps on the screen * we want to stop the scrolling and bust the click event that's fired * because the user probably didn't mean to click on something. */ if (isClickScrollTriggeringTouch(clickPoint) || isClickTouchPositionDuringMomentum(clickPoint)) { event.cancel(); event.getNativeEvent().stopPropagation(); event.getNativeEvent().preventDefault(); } } } });
@Override public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { // The loading indicator can fire its own load or error event, so we check // that the event actually occurred on the main image. String type = event.getType(); if (BrowserEvents.LOAD.equals(type) && eventOccurredOnImage(event, parent)) { // Remove the loading indicator. parent.getFirstChildElement().getStyle().setDisplay(Display.NONE); // Show the image. Element imgWrapper = parent.getChild(1).cast(); imgWrapper.getStyle().setProperty("height", "auto"); imgWrapper.getStyle().setProperty("width", "auto"); imgWrapper.getStyle().setProperty("overflow", "auto"); } else if (BrowserEvents.ERROR.equals(type) && eventOccurredOnImage(event, parent)) { // Replace the loading indicator with an error message. parent.getFirstChildElement().setInnerSafeHtml(errorRenderer.render(value)); } }
SelectAction action, MultiSelectionModel<? super T> selectionModel) { NativeEvent nativeEvent = event.getNativeEvent(); String type = nativeEvent.getType(); if (BrowserEvents.CLICK.equals(type)) { boolean shift = nativeEvent.getShiftKey(); boolean ctrlOrMeta = nativeEvent.getCtrlKey() || nativeEvent.getMetaKey(); boolean clearOthers = (translator == null) ? !ctrlOrMeta : translator.clearCurrentSelection(event); event.getValue(), action, shift, clearOthers); } else if (BrowserEvents.KEYUP.equals(type)) { int keyCode = nativeEvent.getKeyCode(); if (keyCode == 32) { boolean shift = nativeEvent.getShiftKey(); boolean clearOthers = (translator == null) ? false : translator.clearCurrentSelection(event);
/** * Gets the mouse x-position relative to a given element. * * @param target the element whose coordinate system is to be used * @return the relative x-position */ public int getRelativeX(Element target) { NativeEvent e = getNativeEvent(); return e.getClientX() - target.getAbsoluteLeft() + target.getScrollLeft() + target.getOwnerDocument().getScrollLeft(); }
@Override public void onPreviewNativeEvent(Event.NativePreviewEvent event) { NativeEvent nativeEvent = event.getNativeEvent(); if (nativeEvent.getEventTarget().cast() == bottomTabStop && nativeEvent.getKeyCode() == KeyCodes.KEY_TAB && !nativeEvent.getShiftKey()) { nativeEvent.preventDefault(); } if (nativeEvent.getEventTarget().cast() == bottomTabStop && nativeEvent.getKeyCode() == KeyCodes.KEY_BACKSPACE) { nativeEvent.preventDefault(); } } };
/** * Does the event target one of the partner elements? * * @param event the native event * @return true if the event targets a partner */ private boolean eventTargetsPartner(NativeEvent event) { if (autoHidePartners == null) { return false; } EventTarget target = event.getEventTarget(); if (Element.is(target)) { for (Element elem : autoHidePartners) { if (elem.isOrHasChild(Element.as(target))) { return true; } } } return false; }
@Override public void onPreviewNativeEvent(NativePreviewEvent e) { if (e.getTypeInt() == Event.getTypeInt(KeyDownEvent.getType().getName())) { NativeEvent nativeEvent = e.getNativeEvent(); if (nativeEvent.getKeyCode() == KeyCodes.KEY_ESCAPE) { nativeEvent.preventDefault(); } } } });
@Override public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); // Ignore events that don't target the input. Element target = event.getEventTarget().cast(); if (!getInputElement(parent).isOrHasChild(target)) { return; } String eventType = event.getType(); if (BrowserEvents.FOCUS.equals(eventType)) { focusedKey = context.getKey(); } else if (BrowserEvents.BLUR.equals(eventType)) { focusedKey = null; } }
@Override public void onKeyDown(KeyDownEvent keyDownEvent) { NativeEvent event = keyDownEvent.getNativeEvent(); // This is not used for Firefox if (BrowserInfo.get().isGecko()) { return; } if (!enabled) { // Cancel default keyboard events on a disabled Table // (prevents scrolling) event.preventDefault(); } else if (hasFocus()) { if (handleNavigation(event.getKeyCode(), event.getCtrlKey() || event.getMetaKey(), event.getShiftKey())) { navKeyDown = true; event.preventDefault(); } startScrollingVelocityTimer(); } } };