javafx.scene.input.*Event classes construction

Martin Sladecek martin.sladecek at oracle.com
Thu Jun 21 01:58:26 PDT 2012


Hi,
here's my proposal for new constructors and methods for events in 
javafx.scene.input package (for 3.0)

I changed all impl_*event factory methods to constructors and added a 
variant with (Object source, EventTarget target, ...), as Event, 
InputEvent, GestureEvent already had such constructors as part of public 
API. Usually, these constructors are used only when the target (or 
source) is known, so no copies must be made during the event dispatch 
process.

Because Event has a "copyFor" method that returns a copy of the current 
object, changing some properties to the values passed in, I used the 
same pattern for all the impl_copy methods. I also added copyFor(Object 
source, EvenTarget target, EventType type) to events that have multiple 
types.

Regarding the rest of @treatAsPrivate methods, I think all of them may 
be part of public API, as they don't expose any internal information or 
structures.

I also made most of the classes final.

*ContextMenuEvent*:

  * public ContextMenuEvent(Object source, EventTarget target,
    EventType<ContextMenuEvent> eventType, double x, double y, double
    screenX, double screenY, boolean keyboardTrigger)
  * public ContextMenuEvent(EventType<ContextMenuEvent> eventType,
    double x, double y, double screenX, double screenY, boolean
    keyboardTrigger)


*DragEvent*:

  * public DragEvent(Object source, EventTarget target,
    EventType<DragEvent> eventType, Dragboard dragboard, double x,
    double y, double screenX, double screenY, TransferMode transferMode,
    Object gestureSource, Object gestureTarget)
  * public DragEvent(EventType<DragEvent> eventType, Dragboard
    dragboard,double x, double y, double screenX, double screenY,
    TransferMode transferMode, Object gestureSource, Object gestureTarget)

  * public DragEvent copyFor(Object source, EventTarget target, Object
    gestureSource, Object gestureTarget, Dragboard dragboard)
  * public DragEvent copyFor(Object source, EventTarget target, Object
    gestureSource, Object gestureTarget, EventType<DragEvent> eventType)
  * public DragEvent copyFor(Object source, EventTarget target, Object
    gestureSource, Object gestureTarget, TransferMode transferMode,
    EventType<DragEvent> eventType)
  * public DragEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<DragEvent> type)
  * public Object getAcceptingObject() // source that accepted the drag


*GestureEvent*: (there were 2  protected constructors that were creating 
empty events, I'd like to make them deprecated)

  * protected GestureEvent(Object source, EventTarget target,
    EventType<? extends GestureEvent> eventType, double x, double y,
    double screenX, double screenY, boolean shiftDown, boolean
    controlDown, boolean altDown, boolean metaDown, boolean direct,
    boolean inertia)
  * protected GestureEvent(EventType<? extends GestureEvent> eventType,
    double x, double y, double screenX, double screenY, boolean
    shiftDown, boolean controlDown, boolean altDown, boolean metaDown,
    boolean direct, boolean inertia)


*InputMethodEvent*:

  * public InputMethodEvent(Object source, EventTarget target,
    EventType<InputMethodEvent> eventType, List<InputMethodTextRun>
    composed, String committed, int caretPosition)


*InputMethodTextRun*:

  * public InputMethodTextRun(String text, InputMethodHighlight highlight)


*KeyEvent*:

  * public KeyEvent(Object source, EventTarget target,
    EventType<KeyEvent> eventType, String character, String text, int
    code, boolean shiftDown, boolean controlDown, boolean altDown,
    boolean metaDown)
  * public KeyEvent(EventType<KeyEvent> eventType, String character,
    String text, int code, boolean shiftDown, boolean controlDown,
    boolean altDown, boolean metaDown)
  * public KeyEvent(EventType<KeyEvent> eventType, String character,
    String text, KeyCode code, boolean shiftDown, boolean controlDown,
    boolean altDown, boolean metaDown)

  * public KeyEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<KeyEvent> type)


*MouseEvent*:

  * public MouseEvent(EventType<? extends MouseEvent> eventType, double
    x, double y, double screenX, double screenY, MouseButton button,int
    clickCount, boolean shiftDown, boolean controlDown, boolean altDown,
    boolean metaDown,  boolean primaryButtonDown, boolean
    middleButtonDown, boolean secondaryButtonDown, boolean synthesized,
    boolean popupTrigger)
  * public MouseEvent(EventType<? extends MouseEvent> eventType, double
    x, double y, double screenX, double screenY, MouseButton button,int
    clickCount, boolean shiftDown, boolean controlDown, boolean altDown,
    boolean metaDown,  boolean primaryButtonDown, boolean
    middleButtonDown, boolean secondaryButtonDown, boolean synthesized,
    boolean popupTrigger, boolean stillSincePress)
  * public MouseEvent(Object source, EventTarget target, EventType<?
    extends MouseEvent> eventType, double x, double y, double screenX,
    double screenY, MouseButton button,int clickCount, boolean
    shiftDown, boolean controlDown, boolean altDown, boolean metaDown, 
    boolean primaryButtonDown, boolean middleButtonDown, boolean
    secondaryButtonDown, boolean synthesized, boolean popupTrigger,
    boolean stillSincePress)

  * public MouseEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<? extends MouseEvent> type)
  * public boolean isPopupTrigger() //This was impl_ before, but it's
    used in some controls, so it might be useful

  * public static MouseDragEvent copyForMouseDragEvent(MouseEvent e,
    Object newSource, EventTarget newTarget, EventType<MouseDragEvent>
    type, Object gestureSource) // this will do a copy of mouse event,
    creating a mouseDragEvent from it. It's used internally and it's
    just a convenience, so can it doesn't have to be added at all to the
    public API


*MouseDragEvent*:

  * public MouseDragEvent(Object source, EventTarget target,
    EventType<MouseDragEvent> eventType, double x, double y, double
    screenX, double screenY,  MouseButton button, int clickCount, 
    boolean shiftDown, boolean controlDown, boolean altDown, boolean
    metaDown,  boolean primaryButtonDown, boolean middleButtonDown,
    boolean secondaryButtonDown, boolean synthesized, boolean
    popupTrigger, Object gestureSource)
  * public MouseDragEvent( EventType<MouseDragEvent> eventType, double
    x, double y, double screenX, double screenY,  MouseButton button,
    int clickCount,  boolean shiftDown, boolean controlDown, boolean
    altDown, boolean metaDown,  boolean primaryButtonDown, boolean
    middleButtonDown, boolean secondaryButtonDown, boolean synthesized,
    boolean popupTrigger, Object gestureSource)

*RotateEvent*:

  * public RotateEvent(Object source, EventTarget target,
    EventType<RotateEvent> eventType, double x, double y, double
    screenX, double screenY, boolean shiftDown, boolean controlDown, 
    boolean altDown,  boolean metaDown, boolean direct, boolean inertia,
    double angle, double totalAngle)
  * public RotateEvent(EventType<RotateEvent> eventType, double x,
    double y, double screenX, double screenY, boolean shiftDown, boolean
    controlDown,  boolean altDown,  boolean metaDown, boolean direct,
    boolean inertia, double angle, double totalAngle)

  * public RotateEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<RotateEvent> type)


*ScrollEvent*:

  * public ScrollEvent(Object source, EventTarget target,
    EventType<ScrollEvent> eventType, double x, double y, double
    screenX, double screenY,  boolean shiftDown,  boolean controlDown,
    boolean altDown,  boolean metaDown, boolean direct,  boolean
    inertia, double deltaX, double deltaY, double gestureDeltaX, double
    gestureDeltaY, HorizontalTextScrollUnits textDeltaXUnits, double
    textDeltaX, VerticalTextScrollUnits textDeltaYUnits, double
    textDeltaY, int touchCount)
  * public ScrollEvent(EventType<ScrollEvent> eventType, double x,
    double y, double screenX, double screenY,  boolean shiftDown, 
    boolean controlDown, boolean altDown,  boolean metaDown, boolean
    direct,  boolean inertia, double deltaX, double deltaY, double
    gestureDeltaX, double gestureDeltaY, HorizontalTextScrollUnits
    textDeltaXUnits, double textDeltaX, VerticalTextScrollUnits
    textDeltaYUnits, double textDeltaY, int touchCount)


  * public ScrollEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<ScrollEvent> type)


*SwipeEvent*:

  * public SwipeEvent(Object source, EventTarget target,
    EventType<SwipeEvent> eventType, double x, double y, double screenX,
    double screenY, boolean shiftDown,  boolean controlDown, boolean
    altDown, boolean metaDown, boolean direct, int touchCount)
  * public SwipeEvent(EventType<SwipeEvent> eventType, double x, double
    y, double screenX, double screenY, boolean shiftDown,  boolean
    controlDown, boolean altDown, boolean metaDown, boolean direct, int
    touchCount)


  * public SwipeEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<SwipeEvent> type)


*ZoomEvent*:

  * public ZoomEvent(Object source, EventTarget target,
    EventType<ZoomEvent> eventType, double x, double y, double screenX,
    double screenY, boolean shiftDown, boolean controlDown, boolean
    altDown, boolean metaDown,  boolean direct, boolean inertia, double
    zoomFactor, double totalZoomFactor)
  * public ZoomEvent(EventType<ZoomEvent> eventType, double x, double y,
    double screenX, double screenY, boolean shiftDown, boolean
    controlDown, boolean altDown, boolean metaDown,  boolean direct,
    boolean inertia, double zoomFactor, double totalZoomFactor)

  * public ZoomEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<ZoomEvent> type)


*TouchEvent*:

  * public TouchEvent(Object source, EventTarget target,
    EventType<TouchEvent> eventType, TouchPoint touchPoint,
    List<TouchPoint> touchPoints, int eventSetId, boolean shiftDown,
    boolean controlDown, boolean altDown,  boolean metaDown, boolean direct)
  * public TouchEvent(EventType<TouchEvent> eventType, TouchPoint
    touchPoint, List<TouchPoint> touchPoints, int eventSetId, boolean
    shiftDown, boolean controlDown, boolean altDown,  boolean metaDown,
    boolean direct)

  * public TouchEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<TouchEvent> type)
  * public boolean isDirect() // was impl_ because (according to a
    comment in code) there are no indirect events yet, but GestureEvent
    already has this public.

*javafx.stage.WindowEvent*:

  * public WindowEvent copyFor(Object newSource, EventTarget newTarget,
    EventType<WindowEvent> type)


-Martin

On 06/15/2012 11:44 PM, Richard Bair wrote:
>>> As for the approach, I think you do the constructors with all params (since events are immutable you have no choice really -- static factory or constructor and I prefer in this case a constructor) + builder (auto generated).
>> And what do you think about impl_copy methods? Personally I think we should remove them completely and turn them to some internal utility methods.
> My initial thought was a copy constructor.
>
>> Also, some events are not 100% immutable, as they are modified during the Scene processing through some impl_methods, like MouseEvent.impl_setClickParam. We'd either need to make some/all of the Event fields protected and do this modifications through subclasses or create some "accessor" in javafx.scene.input package for calling these methods from javafx.scene package.
> Good question, I guess we can revisit these in context of the other impl_ method removal things we're working on.
>
> Richard



More information about the openjfx-dev mailing list