/**
* UI component that mouse is currently hovering over.
*/
- private MouseInteractionController currentMouseOverComponent;
+ private MouseInteractionController objectPreviouslyUnderMouseCursor;
public void prepareForNewFrameRendering(){
mouseEvent = null;
- objectUnderMouse = null;
+ currentObjectUnderMouseCursor = null;
}
/**
/**
* Item that user clicked on.
*/
- private MouseInteractionController objectUnderMouse;
+ private MouseInteractionController currentObjectUnderMouseCursor;
/**
* Called when given object was detected under mouse cursor, while processing {@link #mouseEvent}.
* Because objects are rendered back to front. The last method caller will set the top-most object, if
* there are multiple objects under mouse cursor.
*/
- public void setObjectUnderMouse(MouseInteractionController objectUnderMouse) {
- this.objectUnderMouse = objectUnderMouse;
+ public void setCurrentObjectUnderMouseCursor(MouseInteractionController currentObjectUnderMouseCursor) {
+ this.currentObjectUnderMouseCursor = currentObjectUnderMouseCursor;
}
public RenderingContext(final int width, final int height) {
/**
* @return <code>true</code> if view repaint is needed.
*/
- public boolean handleDetectedComponentMouseEvents() {
- if (objectUnderMouse != null) {
- if (mouseEvent.button == 0) {
- // mouse over
- if (currentMouseOverComponent == null) {
- currentMouseOverComponent = objectUnderMouse;
- return currentMouseOverComponent.mouseEntered();
- } else if (currentMouseOverComponent != objectUnderMouse) {
- boolean viewRepaintNeeded = currentMouseOverComponent.mouseExited();
- currentMouseOverComponent = objectUnderMouse;
- return viewRepaintNeeded | currentMouseOverComponent.mouseEntered();
- }
- } else {
- // mouse click
- return objectUnderMouse.mouseClicked();
- }
- } else if (currentMouseOverComponent != null) {
- boolean viewRepaintNeeded = currentMouseOverComponent.mouseExited();
- currentMouseOverComponent = null;
- return viewRepaintNeeded;
+ public boolean handlePossibleComponentMouseEvent() {
+ if (mouseEvent == null) return false;
+
+ boolean viewRepaintNeeded = false;
+
+ if (objectPreviouslyUnderMouseCursor != currentObjectUnderMouseCursor) {
+ // Mouse cursor has just entered or left component.
+ viewRepaintNeeded = objectPreviouslyUnderMouseCursor != null && objectPreviouslyUnderMouseCursor.mouseExited();
+ viewRepaintNeeded |= currentObjectUnderMouseCursor != null && currentObjectUnderMouseCursor.mouseEntered();
+ objectPreviouslyUnderMouseCursor = currentObjectUnderMouseCursor;
}
- return false;
+
+ if (mouseEvent.button != 0 && currentObjectUnderMouseCursor != null) {
+ // Mouse button was clicked on some component.
+ viewRepaintNeeded |= currentObjectUnderMouseCursor.mouseClicked(mouseEvent.button);
+ }
+
+ return viewRepaintNeeded;
}
}