Browse Source

Changed some methods that were using (x, y) parameters to use Point objects instead.

tags/2021-05-28
Julian Storer 15 years ago
parent
commit
06c63c63aa
45 changed files with 1253 additions and 1586 deletions
  1. +478
    -686
      juce_amalgamated.cpp
  2. +198
    -169
      juce_amalgamated.h
  3. +4
    -10
      src/gui/components/buttons/juce_Button.cpp
  4. +4
    -11
      src/gui/components/controls/juce_ListBox.cpp
  5. +1
    -1
      src/gui/components/controls/juce_ListBox.h
  6. +10
    -12
      src/gui/components/controls/juce_Slider.cpp
  7. +1
    -4
      src/gui/components/controls/juce_TableHeaderComponent.cpp
  8. +1
    -4
      src/gui/components/controls/juce_TableListBox.cpp
  9. +1
    -2
      src/gui/components/controls/juce_TextEditor.cpp
  10. +2
    -7
      src/gui/components/controls/juce_TreeView.cpp
  11. +97
    -142
      src/gui/components/juce_Component.cpp
  12. +12
    -9
      src/gui/components/juce_Component.h
  13. +18
    -37
      src/gui/components/juce_Desktop.cpp
  14. +7
    -7
      src/gui/components/juce_Desktop.h
  15. +1
    -2
      src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp
  16. +5
    -8
      src/gui/components/layout/juce_ComponentMovementWatcher.cpp
  17. +1
    -1
      src/gui/components/layout/juce_ComponentMovementWatcher.h
  18. +5
    -8
      src/gui/components/menus/juce_MenuBarComponent.cpp
  19. +39
    -53
      src/gui/components/menus/juce_PopupMenu.cpp
  20. +8
    -13
      src/gui/components/mouse/juce_ComponentDragger.cpp
  21. +1
    -1
      src/gui/components/mouse/juce_ComponentDragger.h
  22. +41
    -59
      src/gui/components/mouse/juce_DragAndDropContainer.cpp
  23. +45
    -35
      src/gui/components/mouse/juce_MouseEvent.cpp
  24. +41
    -14
      src/gui/components/mouse/juce_MouseEvent.h
  25. +3
    -4
      src/gui/components/mouse/juce_MouseHoverDetector.cpp
  26. +4
    -5
      src/gui/components/special/juce_BubbleComponent.cpp
  27. +14
    -14
      src/gui/components/special/juce_MagnifierComponent.cpp
  28. +26
    -27
      src/gui/components/special/juce_MidiKeyboardComponent.cpp
  29. +3
    -3
      src/gui/components/special/juce_MidiKeyboardComponent.h
  30. +2
    -3
      src/gui/components/special/juce_OpenGLComponent.cpp
  31. +36
    -54
      src/gui/components/windows/juce_ComponentPeer.cpp
  32. +4
    -7
      src/gui/components/windows/juce_ComponentPeer.h
  33. +1
    -2
      src/gui/components/windows/juce_ResizableWindow.cpp
  34. +11
    -16
      src/gui/components/windows/juce_TooltipWindow.cpp
  35. +2
    -1
      src/gui/components/windows/juce_TooltipWindow.h
  36. +5
    -6
      src/gui/components/windows/juce_TopLevelWindow.cpp
  37. +9
    -1
      src/gui/graphics/geometry/juce_Point.h
  38. +18
    -0
      src/gui/graphics/geometry/juce_Rectangle.h
  39. +35
    -46
      src/native/linux/juce_linux_Windowing.cpp
  40. +8
    -10
      src/native/mac/juce_iphone_UIViewComponentPeer.mm
  41. +4
    -5
      src/native/mac/juce_mac_MiscUtilities.mm
  42. +3
    -4
      src/native/mac/juce_mac_NSViewComponent.mm
  43. +14
    -31
      src/native/mac/juce_mac_NSViewComponentPeer.mm
  44. +8
    -11
      src/native/windows/juce_win32_ActiveXComponent.cpp
  45. +22
    -41
      src/native/windows/juce_win32_Windowing.cpp

+ 478
- 686
juce_amalgamated.cpp
File diff suppressed because it is too large
View File


+ 198
- 169
juce_amalgamated.h View File

@@ -9299,16 +9299,154 @@ private:
/*** End of inlined file: juce_ModifierKeys.h ***/



/*** Start of inlined file: juce_Point.h ***/
#ifndef __JUCE_POINT_JUCEHEADER__
#define __JUCE_POINT_JUCEHEADER__


/*** Start of inlined file: juce_AffineTransform.h ***/
#ifndef __JUCE_AFFINETRANSFORM_JUCEHEADER__
#define __JUCE_AFFINETRANSFORM_JUCEHEADER__

class JUCE_API AffineTransform
{
public:

AffineTransform() throw();

AffineTransform (const AffineTransform& other) throw();

AffineTransform (const float mat00, const float mat01, const float mat02,
const float mat10, const float mat11, const float mat12) throw();

const AffineTransform& operator= (const AffineTransform& other) throw();

bool operator== (const AffineTransform& other) const throw();

bool operator!= (const AffineTransform& other) const throw();

static const AffineTransform identity;

void transformPoint (float& x,
float& y) const throw();

void transformPoint (double& x,
double& y) const throw();

const AffineTransform translated (const float deltaX,
const float deltaY) const throw();

static const AffineTransform translation (const float deltaX,
const float deltaY) throw();

const AffineTransform rotated (const float angleInRadians) const throw();

const AffineTransform rotated (const float angleInRadians,
const float pivotX,
const float pivotY) const throw();

static const AffineTransform rotation (const float angleInRadians) throw();

static const AffineTransform rotation (const float angleInRadians,
const float pivotX,
const float pivotY) throw();

const AffineTransform scaled (const float factorX,
const float factorY) const throw();

static const AffineTransform scale (const float factorX,
const float factorY) throw();

const AffineTransform sheared (const float shearX,
const float shearY) const throw();

const AffineTransform inverted() const throw();

const AffineTransform followedBy (const AffineTransform& other) const throw();

bool isIdentity() const throw();

bool isSingularity() const throw();

bool isOnlyTranslation() const throw();

float getTranslationX() const throw() { return mat02; }

float getTranslationY() const throw() { return mat12; }

juce_UseDebuggingNewOperator

float mat00, mat01, mat02;
float mat10, mat11, mat12;

private:

const AffineTransform followedBy (const float mat00, const float mat01, const float mat02,
const float mat10, const float mat11, const float mat12) const throw();
};

#endif // __JUCE_AFFINETRANSFORM_JUCEHEADER__
/*** End of inlined file: juce_AffineTransform.h ***/

template <typename ValueType>
class Point
{
public:

Point() throw() : x (0), y (0) {}

Point (const Point& other) throw() : x (other.x), y (other.y) {}

Point (const ValueType initialX, const ValueType initialY) throw() : x (initialX), y (initialY) {}

~Point() throw() {}

Point& operator= (const Point& other) throw() { x = other.x; y = other.y; return *this; }

inline ValueType getX() const throw() { return x; }

inline ValueType getY() const throw() { return y; }

inline bool operator== (const Point& other) const throw() { return x == other.x && y == other.y; }
inline bool operator!= (const Point& other) const throw() { return x != other.x || y != other.y; }

bool isOrigin() const throw() { return x == ValueType() && y == ValueType(); }

void setXY (const ValueType newX, const ValueType newY) throw() { x = newX; y = newY; }

void addXY (const ValueType xToAdd, const ValueType yToAdd) throw() { x += xToAdd; y += yToAdd; }

const Point operator+ (const Point& other) const throw() { return Point (x + other.x, y + other.y); }

Point& operator+= (const Point& other) throw() { x += other.x; y += other.y; return *this; }

const Point operator- (const Point& other) const throw() { return Point (x - other.x, y - other.y); }

Point& operator-= (const Point& other) throw() { x -= other.x; y -= other.y; return *this; }

ValueType getDistanceFrom (const Point& other) const throw() { return (ValueType) juce_hypot (x - other.x, y - other.y); }

void applyTransform (const AffineTransform& transform) throw() { transform.transformPoint (x, y); }

juce_UseDebuggingNewOperator

private:
ValueType x, y;
};

#endif // __JUCE_POINT_JUCEHEADER__
/*** End of inlined file: juce_Point.h ***/

class JUCE_API MouseEvent
{
public:

MouseEvent (const int x, const int y,
MouseEvent (const Point<int>& position,
const ModifierKeys& modifiers,
Component* const originator,
const Time& eventTime,
const int mouseDownX,
const int mouseDownY,
const Point<int> mouseDownPos,
const Time& mouseDownTime,
const int numberOfClicks,
const bool mouseWasDragged) throw();
@@ -9331,6 +9469,8 @@ public:

int getMouseDownY() const throw();

const Point<int> getMouseDownPosition() const throw();

int getDistanceFromDragStart() const throw();

int getDistanceFromDragStartX() const throw();
@@ -9343,13 +9483,19 @@ public:

int getLengthOfMousePress() const throw();

int getScreenX() const throw();
const Point<int> getPosition() const throw();

int getScreenX() const;

int getScreenY() const throw();
int getScreenY() const;

int getMouseDownScreenX() const throw();
const Point<int> getScreenPosition() const;

int getMouseDownScreenY() const throw();
int getMouseDownScreenX() const;

int getMouseDownScreenY() const;

const Point<int> getMouseDownScreenPosition() const;

const MouseEvent getEventRelativeTo (Component* const otherComponent) const throw();

@@ -9360,7 +9506,7 @@ public:
juce_UseDebuggingNewOperator

private:
int mouseDownX, mouseDownY;
Point<int> mouseDownPos;
Time mouseDownTime;
int numberOfClicks;
bool wasMovedSinceMouseDown;
@@ -9619,138 +9765,6 @@ public:
#define __JUCE_PATH_JUCEHEADER__


/*** Start of inlined file: juce_AffineTransform.h ***/
#ifndef __JUCE_AFFINETRANSFORM_JUCEHEADER__
#define __JUCE_AFFINETRANSFORM_JUCEHEADER__

class JUCE_API AffineTransform
{
public:

AffineTransform() throw();

AffineTransform (const AffineTransform& other) throw();

AffineTransform (const float mat00, const float mat01, const float mat02,
const float mat10, const float mat11, const float mat12) throw();

const AffineTransform& operator= (const AffineTransform& other) throw();

bool operator== (const AffineTransform& other) const throw();

bool operator!= (const AffineTransform& other) const throw();

static const AffineTransform identity;

void transformPoint (float& x,
float& y) const throw();

void transformPoint (double& x,
double& y) const throw();

const AffineTransform translated (const float deltaX,
const float deltaY) const throw();

static const AffineTransform translation (const float deltaX,
const float deltaY) throw();

const AffineTransform rotated (const float angleInRadians) const throw();

const AffineTransform rotated (const float angleInRadians,
const float pivotX,
const float pivotY) const throw();

static const AffineTransform rotation (const float angleInRadians) throw();

static const AffineTransform rotation (const float angleInRadians,
const float pivotX,
const float pivotY) throw();

const AffineTransform scaled (const float factorX,
const float factorY) const throw();

static const AffineTransform scale (const float factorX,
const float factorY) throw();

const AffineTransform sheared (const float shearX,
const float shearY) const throw();

const AffineTransform inverted() const throw();

const AffineTransform followedBy (const AffineTransform& other) const throw();

bool isIdentity() const throw();

bool isSingularity() const throw();

bool isOnlyTranslation() const throw();

float getTranslationX() const throw() { return mat02; }

float getTranslationY() const throw() { return mat12; }

juce_UseDebuggingNewOperator

float mat00, mat01, mat02;
float mat10, mat11, mat12;

private:

const AffineTransform followedBy (const float mat00, const float mat01, const float mat02,
const float mat10, const float mat11, const float mat12) const throw();
};

#endif // __JUCE_AFFINETRANSFORM_JUCEHEADER__
/*** End of inlined file: juce_AffineTransform.h ***/


/*** Start of inlined file: juce_Point.h ***/
#ifndef __JUCE_POINT_JUCEHEADER__
#define __JUCE_POINT_JUCEHEADER__

template <typename ValueType>
class Point
{
public:

Point() throw() : x (0), y (0) {}

Point (const Point& other) throw() : x (other.x), y (other.y) {}

Point (const ValueType initialX, const ValueType initialY) throw() : x (initialX), y (initialY) {}

~Point() throw() {}

Point& operator= (const Point& other) throw() { x = other.x; y = other.y; return *this; }

inline ValueType getX() const throw() { return x; }

inline ValueType getY() const throw() { return y; }

void setXY (const ValueType newX, const ValueType newY) throw() { x = newX; y = newY; }

void addXY (const ValueType xToAdd, const ValueType yToAdd) throw() { x += xToAdd; y += yToAdd; }

const Point operator+ (const Point& other) const throw() { return Point (x + other.x, y + other.y); }

Point& operator+= (const Point& other) throw() { x += other.x; y += other.y; return *this; }

const Point operator- (const Point& other) const throw() { return Point (x - other.x, y - other.y); }

Point& operator-= (const Point& other) throw() { x -= other.x; y -= other.y; return *this; }

void applyTransform (const AffineTransform& transform) throw() { transform.transformPoint (x, y); }

juce_UseDebuggingNewOperator

private:
ValueType x, y;
};

#endif // __JUCE_POINT_JUCEHEADER__
/*** End of inlined file: juce_Point.h ***/


/*** Start of inlined file: juce_Rectangle.h ***/
#ifndef __JUCE_RECTANGLE_JUCEHEADER__
#define __JUCE_RECTANGLE_JUCEHEADER__
@@ -9810,10 +9824,14 @@ public:

inline ValueType getCentreY() const throw() { return y + h / (ValueType) 2; }

inline const Point<ValueType> getCentre() const throw() { return Point<ValueType> (x + w / (ValueType) 2, y + h / (ValueType) 2); }

bool isEmpty() const throw() { return w <= 0 || h <= 0; }

const Point<ValueType> getPosition() const throw() { return Point<ValueType> (x, y); }

void setPosition (const Point<ValueType>& newPos) throw() { x = newPos.getX(); y = newPos.getY(); }

void setPosition (const ValueType newX, const ValueType newY) throw() { x = newX; y = newY; }

void setSize (const ValueType newWidth, const ValueType newHeight) throw() { w = newWidth; h = newHeight; }
@@ -9910,12 +9928,23 @@ public:
return xCoord >= x && yCoord >= y && xCoord < x + w && yCoord < y + h;
}

bool contains (const Point<ValueType> point) const throw()
{
return point.getX() >= x && point.getY() >= y && point.getX() < x + w && point.getY() < y + h;
}

bool contains (const Rectangle& other) const throw()
{
return x <= other.x && y <= other.y
&& x + w >= other.x + other.w && y + h >= other.y + other.h;
}

const Point<ValueType> getConstrainedPoint (const Point<ValueType>& point) const throw()
{
return Point<ValueType> (jlimit (x, x + w, point.getX()),
jlimit (y, y + h, point.getY()));
}

bool intersects (const Rectangle& other) const throw()
{
return x + w > other.x
@@ -12243,13 +12272,11 @@ public:

virtual void getBounds (int& x, int& y, int& w, int& h) const = 0;

virtual int getScreenX() const = 0;
virtual const Point<int> getScreenPosition() const = 0;

virtual int getScreenY() const = 0;
virtual const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) = 0;

virtual void relativePositionToGlobal (int& x, int& y) = 0;

virtual void globalPositionToRelative (int& x, int& y) = 0;
virtual const Point<int> globalPositionToRelative (const Point<int>& screenPosition) = 0;

virtual void setMinimised (bool shouldBeMinimised) = 0;

@@ -12291,7 +12318,7 @@ public:

virtual void grabFocus() = 0;

virtual void textInputRequired (int x, int y) = 0;
virtual void textInputRequired (const Point<int>& position) = 0;

void handleFocusGain();
void handleFocusLoss();
@@ -12448,16 +12475,18 @@ public:
void getVisibleArea (RectangleList& result,
const bool includeSiblings) const;

int getScreenX() const throw();
int getScreenX() const;

int getScreenY() const;

int getScreenY() const throw();
const Point<int> getScreenPosition() const;

void relativePositionToGlobal (int& x, int& y) const throw();
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) const;

void globalPositionToRelative (int& x, int& y) const throw();
const Point<int> globalPositionToRelative (const Point<int>& screenPosition) const;

void relativePositionToOtherComponent (const Component* const targetComponent,
int& x, int& y) const throw();
const Point<int> relativePositionToOtherComponent (const Component* const targetComponent,
const Point<int>& positionRelativeToThis) const;

void setTopLeftPosition (const int x, const int y);

@@ -12690,7 +12719,7 @@ public:

static bool JUCE_CALLTYPE isMouseButtonDownAnywhere() throw();

void getMouseXYRelative (int& x, int& y) const throw();
const Point<int> getMouseXYRelative() const;

static Component* JUCE_CALLTYPE getComponentUnderMouse() throw();

@@ -12834,8 +12863,7 @@ private:
void sendEnablementChangeMessage();
static void* runModalLoopCallback (void*);
static void bringModalComponentToFront();
void subtractObscuredRegions (RectangleList& result,
const int deltaX, const int deltaY,
void subtractObscuredRegions (RectangleList& result, const Point<int>& delta,
const Rectangle<int>& clipRect,
const Component* const compToAvoid) const throw();
void clipObscuredRegions (Graphics& g, const Rectangle<int>& clipRect,
@@ -13233,13 +13261,13 @@ public:

const Rectangle<int> getMainMonitorArea (const bool clippedToWorkArea = true) const throw();

const Rectangle<int> getMonitorAreaContaining (int x, int y, const bool clippedToWorkArea = true) const throw();
const Rectangle<int> getMonitorAreaContaining (const Point<int>& position, const bool clippedToWorkArea = true) const throw();

static void getMousePosition (int& x, int& y) throw();
static const Point<int> getMousePosition();

static void setMousePosition (int x, int y) throw();
static void setMousePosition (const Point<int>& newPosition);

static void getLastMouseDownPosition (int& x, int& y) throw();
static const Point<int> getLastMouseDownPosition() throw();

static int getMouseButtonClickCounter() throw();

@@ -13264,8 +13292,7 @@ public:

Component* getComponent (const int index) const throw();

Component* findComponentAt (const int screenX,
const int screenY) const;
Component* findComponentAt (const Point<int>& screenPosition) const;

juce_UseDebuggingNewOperator

@@ -13289,7 +13316,8 @@ private:

Array <Rectangle<int> > monitorCoordsClipped, monitorCoordsUnclipped;

int lastFakeMouseMoveX, lastFakeMouseMoveY, mouseClickCounter;
Point<int> lastFakeMouseMove;
int mouseClickCounter;
bool mouseMovedSignificantlySincePressed;

struct RecentMouseDown
@@ -15893,7 +15921,8 @@ public:
private:

int millisecondsBeforeTipAppears;
int mouseX, mouseY, mouseClicks;
Point<int> lastMousePos;
int mouseClicks;
unsigned int lastCompChangeTime, lastHideTime;
Component* lastComponentUnderMouse;
bool changedCompsSinceShown;
@@ -18663,7 +18692,7 @@ private:
Component* headerComponent;
int totalItems, rowHeight, minimumRowWidth;
int outlineThickness;
int lastMouseX, lastMouseY, lastRowSelected;
int lastRowSelected;
bool mouseMoveSelects, multipleSelection, hasDoneInitialUpdate;
SparseSet <int> selected;

@@ -22864,7 +22893,7 @@ public:

private:
ComponentBoundsConstrainer* constrainer;
int originalX, originalY;
Point<int> originalPos;
};

#endif // __JUCE_COMPONENTDRAGGER_JUCEHEADER__
@@ -23800,7 +23829,7 @@ private:
ComponentPeer* lastPeer;
VoidArray registeredParentComps;
bool reentrant;
int lastX, lastY, lastWidth, lastHeight;
Rectangle<int> lastBounds;
#ifdef JUCE_DEBUG
ScopedPointer <ComponentDeletionWatcher> deletionWatcher;
#endif
@@ -26595,10 +26624,10 @@ private:
int octaveNumForMiddleC;

void getKeyPos (int midiNoteNumber, int& x, int& w) const;
int xyToNote (int x, int y, float& mousePositionVelocity);
int remappedXYToNote (int x, int y, float& mousePositionVelocity) const;
int xyToNote (const Point<int>& pos, float& mousePositionVelocity);
int remappedXYToNote (const Point<int>& pos, float& mousePositionVelocity) const;
void resetAnyKeysInUse();
void updateNoteUnderMouse (int x, int y);
void updateNoteUnderMouse (const Point<int>& pos);
void repaintNote (const int midiNoteNumber);

MidiKeyboardComponent (const MidiKeyboardComponent&);


+ 4
- 10
src/gui/components/buttons/juce_Button.cpp View File

@@ -233,20 +233,14 @@ Button::ButtonState Button::updateState (const MouseEvent* const e)
if (isEnabled() && isVisible() && ! isCurrentlyBlockedByAnotherModalComponent())
{
int mx, my;
Point<int> mousePos;
if (e == 0)
{
getMouseXYRelative (mx, my);
}
mousePos = getMouseXYRelative();
else
{
const MouseEvent e2 (e->getEventRelativeTo (this));
mx = e2.x;
my = e2.y;
}
mousePos = e->getEventRelativeTo (this).getPosition();
const bool over = reallyContains (mx, my, true);
const bool over = reallyContains (mousePos.getX(), mousePos.getY(), true);
const bool down = isMouseButtonDown();
if ((down && (over || (triggerOnMouseDown && buttonState == buttonDown))) || isKeyDown)


+ 4
- 11
src/gui/components/controls/juce_ListBox.cpp View File

@@ -802,11 +802,7 @@ void ListBox::mouseMove (const MouseEvent& e)
if (mouseMoveSelects)
{
const MouseEvent e2 (e.getEventRelativeTo (this));
selectRow (getRowContainingPosition (e2.x, e2.y), true);
lastMouseX = e2.x;
lastMouseY = e2.y;
}
}
@@ -898,10 +894,8 @@ Image* ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY)
if (rowComp != 0 && isRowSelected (firstRow + i))
{
int x = 0, y = 0;
rowComp->relativePositionToOtherComponent (this, x, y);
const Rectangle<int> rowRect (x, y, rowComp->getWidth(), rowComp->getHeight());
const Point<int> pos (rowComp->relativePositionToOtherComponent (this, Point<int>()));
const Rectangle<int> rowRect (pos.getX(), pos.getY(), rowComp->getWidth(), rowComp->getHeight());
if (imageArea.isEmpty())
imageArea = rowRect;
@@ -921,11 +915,10 @@ Image* ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY)
if (rowComp != 0 && isRowSelected (firstRow + i))
{
int x = 0, y = 0;
rowComp->relativePositionToOtherComponent (this, x, y);
const Point<int> pos (rowComp->relativePositionToOtherComponent (this, Point<int>()));
Graphics g (*snapshot);
g.setOrigin (x - imageX, y - imageY);
g.setOrigin (pos.getX() - imageX, pos.getY() - imageY);
if (g.reduceClipRegion (0, 0, rowComp->getWidth(), rowComp->getHeight()))
rowComp->paintEntireComponent (g);
}


+ 1
- 1
src/gui/components/controls/juce_ListBox.h View File

@@ -572,7 +572,7 @@ private:
Component* headerComponent;
int totalItems, rowHeight, minimumRowWidth;
int outlineThickness;
int lastMouseX, lastMouseY, lastRowSelected;
int lastRowSelected;
bool mouseMoveSelects, multipleSelection, hasDoneInitialUpdate;
SparseSet <int> selected;


+ 10
- 12
src/gui/components/controls/juce_Slider.cpp View File

@@ -1150,34 +1150,32 @@ void Slider::restoreMouseIfHidden()
if (style == RotaryHorizontalDrag || style == RotaryVerticalDrag)
{
int x, y, downX, downY;
Desktop::getMousePosition (x, y);
Desktop::getLastMouseDownPosition (downX, downY);
Point<int> mousePos (Desktop::getMousePosition());
const Point<int> lastMouseDown (Desktop::getLastMouseDownPosition());
if (style == RotaryHorizontalDrag)
{
const double posDiff = valueToProportionOfLength (pos) - valueToProportionOfLength (valueOnMouseDown);
x = roundToInt (pixelsForFullDragExtent * posDiff + downX);
y = downY;
mousePos = Point<int> (roundToInt (pixelsForFullDragExtent * posDiff + lastMouseDown.getX()),
lastMouseDown.getY());
}
else
{
const double posDiff = valueToProportionOfLength (valueOnMouseDown) - valueToProportionOfLength (pos);
x = downX;
y = roundToInt (pixelsForFullDragExtent * posDiff + downY);
mousePos = Point<int> (lastMouseDown.getX(),
roundToInt (pixelsForFullDragExtent * posDiff + lastMouseDown.getY()));
}
Desktop::setMousePosition (x, y);
Desktop::setMousePosition (mousePos);
}
else
{
const int pixelPos = (int) getLinearSliderPos (pos);
int x = isHorizontal() ? pixelPos : (getWidth() / 2);
int y = isVertical() ? pixelPos : (getHeight() / 2);
const Point<int> pos (isHorizontal() ? pixelPos : (getWidth() / 2),
isVertical() ? pixelPos : (getHeight() / 2));
relativePositionToGlobal (x, y);
Desktop::setMousePosition (x, y);
Desktop::setMousePosition (relativePositionToGlobal (pos));
}
}
}


+ 1
- 4
src/gui/components/controls/juce_TableHeaderComponent.cpp View File

@@ -797,10 +797,7 @@ void TableHeaderComponent::mouseUp (const MouseEvent& e)
const MouseCursor TableHeaderComponent::getMouseCursor()
{
int x, y;
getMouseXYRelative (x, y);
if (columnIdBeingResized != 0 || (getResizeDraggerAt (x) != 0 && ! isMouseButtonDown()))
if (columnIdBeingResized != 0 || (getResizeDraggerAt (getMouseXYRelative().getX()) != 0 && ! isMouseButtonDown()))
return MouseCursor (MouseCursor::LeftRightResizeCursor);
return Component::getMouseCursor();


+ 1
- 4
src/gui/components/controls/juce_TableListBox.cpp View File

@@ -229,10 +229,7 @@ public:
const String getTooltip()
{
int x, y;
getMouseXYRelative (x, y);
const int columnId = owner.getHeader()->getColumnIdAtX (x);
const int columnId = owner.getHeader()->getColumnIdAtX (getMouseXYRelative().getX());
if (columnId != 0 && owner.getModel() != 0)
return owner.getModel()->getCellTooltip (row, columnId);


+ 1
- 2
src/gui/components/controls/juce_TextEditor.cpp View File

@@ -2126,8 +2126,7 @@ void TextEditor::focusGained (FocusChangeType)
ComponentPeer* const peer = getPeer();
if (peer != 0 && ! isReadOnly())
peer->textInputRequired (getScreenX() - peer->getScreenX(),
getScreenY() - peer->getScreenY());
peer->textInputRequired (getScreenPosition() - peer->getScreenPosition());
}
void TextEditor::focusLost (FocusChangeType)


+ 2
- 7
src/gui/components/controls/juce_TreeView.cpp View File

@@ -306,11 +306,8 @@ public:
const String getTooltip()
{
int x, y;
getMouseXYRelative (x, y);
Rectangle<int> pos;
TreeViewItem* const item = findItemAt (y, pos);
TreeViewItem* const item = findItemAt (getMouseXYRelative().getY(), pos);
if (item != 0)
return item->getTooltip();
@@ -557,10 +554,8 @@ TreeViewItem* TreeView::getItemOnRow (int index) const
TreeViewItem* TreeView::getItemAt (int y) const throw()
{
TreeViewContentComponent* const tc = (TreeViewContentComponent*) viewport->getViewedComponent();
int x;
relativePositionToOtherComponent (tc, x, y);
Rectangle<int> pos;
return tc->findItemAt (y, pos);
return tc->findItemAt (relativePositionToOtherComponent (tc, Point<int> (0, y)).getY(), pos);
}
TreeViewItem* TreeView::findItemFromIdentifierString (const String& identifierString) const


+ 97
- 142
src/gui/components/juce_Component.cpp View File

@@ -53,8 +53,7 @@ static const int customCommandMessage = 0x7fff0001;
static const int exitModalStateMessage = 0x7fff0002;
//==============================================================================
static int unboundedMouseOffsetX = 0;
static int unboundedMouseOffsetY = 0;
static Point<int> unboundedMouseOffset;
static bool isUnboundedMouseModeOn = false;
static bool isCursorVisibleUntilOffscreen;
@@ -412,8 +411,7 @@ void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo)
jmax (1, getHeight()));
#endif
int x = 0, y = 0;
relativePositionToGlobal (x, y);
const Point<int> topLeft (relativePositionToGlobal (Point<int> (0, 0)));
bool wasFullscreen = false;
bool wasMinimised = false;
@@ -429,7 +427,7 @@ void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo)
removeFromDesktop();
setTopLeftPosition (x, y);
setTopLeftPosition (topLeft.getX(), topLeft.getY());
}
if (parentComponent_ != 0)
@@ -443,8 +441,8 @@ void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo)
Desktop::getInstance().addDesktopComponent (this);
bounds_.setPosition (x, y);
peer->setBounds (x, y, getWidth(), getHeight(), false);
bounds_.setPosition (topLeft);
peer->setBounds (topLeft.getX(), topLeft.getY(), getWidth(), getHeight(), false);
peer->setVisible (isVisible());
@@ -741,57 +739,60 @@ int Component::getParentHeight() const throw()
: getParentMonitorArea().getHeight();
}
int Component::getScreenX() const throw()
int Component::getScreenX() const
{
return (parentComponent_ != 0) ? parentComponent_->getScreenX() + getX()
: (flags.hasHeavyweightPeerFlag ? getPeer()->getScreenX()
: getX());
return getScreenPosition().getX();
}
int Component::getScreenY() const throw()
int Component::getScreenY() const
{
return (parentComponent_ != 0) ? parentComponent_->getScreenY() + getY()
: (flags.hasHeavyweightPeerFlag ? getPeer()->getScreenY()
: getY());
return getScreenPosition().getY();
}
void Component::relativePositionToGlobal (int& x, int& y) const throw()
const Point<int> Component::getScreenPosition() const
{
return (parentComponent_ != 0) ? parentComponent_->getScreenPosition() + getPosition()
: (flags.hasHeavyweightPeerFlag ? getPeer()->getScreenPosition()
: getPosition());
}
const Point<int> Component::relativePositionToGlobal (const Point<int>& relativePosition) const
{
const Component* c = this;
Point<int> p (relativePosition);
do
{
if (c->flags.hasHeavyweightPeerFlag)
{
c->getPeer()->relativePositionToGlobal (x, y);
break;
}
return c->getPeer()->relativePositionToGlobal (p);
x += c->getX();
y += c->getY();
p += c->getPosition();
c = c->parentComponent_;
}
while (c != 0);
return p;
}
void Component::globalPositionToRelative (int& x, int& y) const throw()
const Point<int> Component::globalPositionToRelative (const Point<int>& screenPosition) const
{
if (flags.hasHeavyweightPeerFlag)
{
getPeer()->globalPositionToRelative (x, y);
return getPeer()->globalPositionToRelative (screenPosition);
}
else
{
if (parentComponent_ != 0)
parentComponent_->globalPositionToRelative (x, y);
return parentComponent_->globalPositionToRelative (screenPosition) - getPosition();
x -= getX();
y -= getY();
return screenPosition - getPosition();
}
}
void Component::relativePositionToOtherComponent (const Component* const targetComponent, int& x, int& y) const throw()
const Point<int> Component::relativePositionToOtherComponent (const Component* const targetComponent, const Point<int>& positionRelativeToThis) const
{
Point<int> p (positionRelativeToThis);
if (targetComponent != 0)
{
const Component* c = this;
@@ -799,22 +800,23 @@ void Component::relativePositionToOtherComponent (const Component* const targetC
do
{
if (c == targetComponent)
return;
return p;
if (c->flags.hasHeavyweightPeerFlag)
{
c->getPeer()->relativePositionToGlobal (x, y);
p = c->getPeer()->relativePositionToGlobal (p);
break;
}
x += c->getX();
y += c->getY();
p += c->getPosition();
c = c->parentComponent_;
}
while (c != 0);
targetComponent->globalPositionToRelative (x, y);
p = targetComponent->globalPositionToRelative (p);
}
return p;
}
//==============================================================================
@@ -1546,10 +1548,9 @@ void Component::setMouseCursor (const MouseCursor& cursor) throw()
if (flags.visibleFlag)
{
int mx, my;
getMouseXYRelative (mx, my);
const Point<int> mousePos (getMouseXYRelative());
if (flags.draggingFlag || reallyContains (mx, my, false))
if (flags.draggingFlag || reallyContains (mousePos.getX(), mousePos.getY(), false))
{
internalUpdateMouseCursor (false);
}
@@ -1574,9 +1575,8 @@ void Component::internalUpdateMouseCursor (bool forcedUpdate) throw()
{
MouseCursor mc (getLookAndFeel().getMouseCursorFor (*this));
if (isUnboundedMouseModeOn && (unboundedMouseOffsetX != 0
|| unboundedMouseOffsetY != 0
|| ! isCursorVisibleUntilOffscreen))
if (isUnboundedMouseModeOn
&& ((! unboundedMouseOffset.isOrigin()) || ! isCursorVisibleUntilOffscreen))
{
mc = MouseCursor::NoCursor;
forcedUpdate = true;
@@ -1989,22 +1989,18 @@ void Component::getVisibleArea (RectangleList& result,
{
const Component* const c = getTopLevelComponent();
int x = 0, y = 0;
c->relativePositionToOtherComponent (this, x, y);
c->subtractObscuredRegions (result, x, y,
c->subtractObscuredRegions (result, c->relativePositionToOtherComponent (this, Point<int>()),
Rectangle<int> (0, 0, c->getWidth(), c->getHeight()),
this);
}
subtractObscuredRegions (result, 0, 0, unclipped, 0);
subtractObscuredRegions (result, Point<int>(), unclipped, 0);
result.consolidate();
}
}
void Component::subtractObscuredRegions (RectangleList& result,
const int deltaX,
const int deltaY,
const Point<int>& delta,
const Rectangle<int>& clipRect,
const Component* const compToAvoid) const throw()
{
@@ -2017,7 +2013,7 @@ void Component::subtractObscuredRegions (RectangleList& result,
if (c->isOpaque())
{
Rectangle<int> childBounds (c->bounds_.getIntersection (clipRect));
childBounds.translate (deltaX, deltaY);
childBounds.translate (delta.getX(), delta.getY());
result.subtract (childBounds);
}
@@ -2026,11 +2022,8 @@ void Component::subtractObscuredRegions (RectangleList& result,
Rectangle<int> newClip (clipRect.getIntersection (c->bounds_));
newClip.translate (-c->getX(), -c->getY());
c->subtractObscuredRegions (result,
c->getX() + deltaX,
c->getY() + deltaY,
newClip,
compToAvoid);
c->subtractObscuredRegions (result, c->getPosition() + delta,
newClip, compToAvoid);
}
}
}
@@ -2253,11 +2246,11 @@ void Component::internalMouseEnter (int x, int y, int64 time)
if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
ModifierKeys::getCurrentModifiers(),
this,
Time (time),
x, y,
Point<int> (x, y),
Time (time),
0, false);
@@ -2338,11 +2331,11 @@ void Component::internalMouseExit (int x, int y, int64 time)
if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
ModifierKeys::getCurrentModifiers(),
this,
Time (time),
x, y,
Point<int> (x, y),
Time (time),
0, false);
mouseExit (me);
@@ -2409,15 +2402,13 @@ public:
if (c != 0 && c->isMouseButtonDown())
{
int x, y;
c->getMouseXYRelative (x, y);
const Point<int> mousePos (c->getMouseXYRelative());
// the offsets have been added on, so must be taken off before calling the
// drag.. otherwise they'll be added twice
x -= unboundedMouseOffsetX;
y -= unboundedMouseOffsetY;
c->internalMouseDrag (x, y, Time::currentTimeMillis());
c->internalMouseDrag (mousePos.getX() - unboundedMouseOffset.getX(),
mousePos.getY() - unboundedMouseOffset.getY(),
Time::currentTimeMillis());
}
}
@@ -2451,9 +2442,7 @@ void Component::internalMouseDown (const int x, const int y, const int64 time)
{
Desktop& desktop = Desktop::getInstance();
int gx = x, gy = y;
relativePositionToGlobal (gx, gy);
desktop.registerMouseDown (Point<int> (gx, gy), time, this);
desktop.registerMouseDown (relativePositionToGlobal (Point<int> (x, y)), time, this);
const ComponentDeletionWatcher deletionChecker (this);
@@ -2469,11 +2458,11 @@ void Component::internalMouseDown (const int x, const int y, const int64 time)
if (isCurrentlyBlockedByAnotherModalComponent())
{
// allow blocked mouse-events to go to global listeners..
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
ModifierKeys::getCurrentModifiers(),
this,
Time (time),
x, y,
Point<int> (x, y),
desktop.getLastMouseDownTime(),
desktop.getNumberOfMultipleClicks(),
false);
@@ -2522,11 +2511,11 @@ void Component::internalMouseDown (const int x, const int y, const int64 time)
if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
ModifierKeys::getCurrentModifiers(),
this,
desktop.getLastMouseDownTime(),
x, y,
Point<int> (x, y),
desktop.getLastMouseDownTime(),
desktop.getNumberOfMultipleClicks(),
false);
@@ -2591,29 +2580,24 @@ void Component::internalMouseUp (const int oldModifiers, int x, int y, const int
flags.draggingFlag = false;
deleteAndZero (dragRepeater);
x += unboundedMouseOffsetX;
y += unboundedMouseOffsetY;
x += unboundedMouseOffset.getX();
y += unboundedMouseOffset.getY();
int gx = x, gy = y;
relativePositionToGlobal (gx, gy);
desktop.registerMouseDrag (Point<int> (gx, gy));
desktop.registerMouseDrag (relativePositionToGlobal (Point<int> (x, y)));
const ComponentDeletionWatcher deletionChecker (this);
if (flags.repaintOnMouseActivityFlag)
repaint();
int mdx, mdy;
Desktop::getLastMouseDownPosition (mdx, mdy);
globalPositionToRelative (mdx, mdy);
const Point<int> mouseDownPos (globalPositionToRelative (Desktop::getLastMouseDownPosition()));
const Time lastMouseDownTime (desktop.getLastMouseDownTime());
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
oldModifiers,
this,
Time (time),
mdx, mdy,
mouseDownPos,
lastMouseDownTime,
desktop.getNumberOfMultipleClicks(),
desktop.mouseMovedSignificantlySincePressed
@@ -2733,26 +2717,21 @@ void Component::internalMouseDrag (int x, int y, const int64 time)
flags.mouseOverFlag = reallyContains (x, y, false);
x += unboundedMouseOffsetX;
y += unboundedMouseOffsetY;
x += unboundedMouseOffset.getX();
y += unboundedMouseOffset.getY();
int gx = x, gy = y;
relativePositionToGlobal (gx, gy);
desktop.registerMouseDrag (Point<int> (gx, gy));
desktop.registerMouseDrag (relativePositionToGlobal (Point<int> (x, y)));
const ComponentDeletionWatcher deletionChecker (this);
int mdx, mdy;
Desktop::getLastMouseDownPosition (mdx, mdy);
globalPositionToRelative (mdx, mdy);
const Point<int> mouseDownPos (globalPositionToRelative (Desktop::getLastMouseDownPosition()));
const Time lastMouseDownTime (desktop.getLastMouseDownTime());
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
ModifierKeys::getCurrentModifiers(),
this,
Time (time),
mdx, mdy,
mouseDownPos,
lastMouseDownTime,
desktop.getNumberOfMultipleClicks(),
desktop.mouseMovedSignificantlySincePressed
@@ -2812,37 +2791,30 @@ void Component::internalMouseDrag (int x, int y, const int64 time)
if (isUnboundedMouseModeOn)
{
Rectangle<int> screenArea (getParentMonitorArea().expanded (-2, -2));
Point<int> mousePos (Desktop::getMousePosition());
int mx, my;
Desktop::getMousePosition (mx, my);
if (! screenArea.contains (mx, my))
if (! screenArea.contains (mousePos))
{
int deltaX = 0, deltaY = 0;
if (mx <= screenArea.getX() || mx >= screenArea.getRight())
deltaX = getScreenX() + getWidth() / 2 - mx;
if (mousePos.getX() <= screenArea.getX() || mousePos.getX() >= screenArea.getRight())
deltaX = getScreenX() + getWidth() / 2 - mousePos.getX();
if (my <= screenArea.getY() || my >= screenArea.getBottom())
deltaY = getScreenY() + getHeight() / 2 - my;
if (mousePos.getY() <= screenArea.getY() || mousePos.getY() >= screenArea.getBottom())
deltaY = getScreenY() + getHeight() / 2 - mousePos.getY();
unboundedMouseOffsetX -= deltaX;
unboundedMouseOffsetY -= deltaY;
unboundedMouseOffset -= Point<int> (deltaX, deltaY);
Desktop::setMousePosition (mx + deltaX,
my + deltaY);
Desktop::setMousePosition (mousePos + Point<int> (deltaX, deltaY));
}
else if (isCursorVisibleUntilOffscreen
&& (unboundedMouseOffsetX != 0 || unboundedMouseOffsetY != 0)
&& screenArea.contains (mx + unboundedMouseOffsetX,
my + unboundedMouseOffsetY))
&& (! unboundedMouseOffset.isOrigin())
&& screenArea.contains (mousePos + unboundedMouseOffset))
{
mx += unboundedMouseOffsetX;
my += unboundedMouseOffsetY;
unboundedMouseOffsetX = 0;
unboundedMouseOffsetY = 0;
mousePos += unboundedMouseOffset;
unboundedMouseOffset = Point<int>();
Desktop::setMousePosition (mx, my);
Desktop::setMousePosition (mousePos);
}
}
@@ -2859,11 +2831,11 @@ void Component::internalMouseMove (const int x, const int y, const int64 time)
{
Desktop& desktop = Desktop::getInstance();
const MouseEvent me (x, y,
const MouseEvent me (Point<int> (x, y),
ModifierKeys::getCurrentModifiers(),
this,
Time (time),
x, y,
Point<int> (x, y),
Time (time),
0, false);
@@ -2939,14 +2911,13 @@ void Component::internalMouseWheel (const int intAmountX, const int intAmountY,
const float wheelIncrementX = intAmountX * (1.0f / 256.0f);
const float wheelIncrementY = intAmountY * (1.0f / 256.0f);
int mx, my;
getMouseXYRelative (mx, my);
const Point<int> mousePos (getMouseXYRelative());
const MouseEvent me (mx, my,
const MouseEvent me (mousePos,
ModifierKeys::getCurrentModifiers(),
this,
Time (time),
mx, my,
mousePos,
Time (time),
0, false);
@@ -3403,13 +3374,9 @@ bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() throw()
return ModifierKeys::getCurrentModifiers().isAnyMouseButtonDown();
}
void Component::getMouseXYRelative (int& mx, int& my) const throw()
const Point<int> Component::getMouseXYRelative() const
{
Desktop::getMousePosition (mx, my);
globalPositionToRelative (mx, my);
mx += unboundedMouseOffsetX;
my += unboundedMouseOffsetY;
return globalPositionToRelative (Desktop::getMousePosition()) + unboundedMouseOffset;
}
void Component::enableUnboundedMouseMovement (bool enable,
@@ -3421,25 +3388,15 @@ void Component::enableUnboundedMouseMovement (bool enable,
if (enable != isUnboundedMouseModeOn)
{
if ((! enable) && ((! isCursorVisibleUntilOffscreen)
|| unboundedMouseOffsetX != 0
|| unboundedMouseOffsetY != 0))
|| ! unboundedMouseOffset.isOrigin()))
{
// when released, return the mouse to within the component's bounds
int mx, my;
getMouseXYRelative (mx, my);
mx = jlimit (0, getWidth(), mx);
my = jlimit (0, getHeight(), my);
relativePositionToGlobal (mx, my);
Desktop::setMousePosition (mx, my);
Desktop::setMousePosition (relativePositionToGlobal (Rectangle<int> (0, 0, getWidth(), getHeight())
.getConstrainedPoint (getMouseXYRelative())));
}
isUnboundedMouseModeOn = enable;
unboundedMouseOffsetX = 0;
unboundedMouseOffsetY = 0;
unboundedMouseOffset = Point<int>();
internalUpdateMouseCursor (true);
}
@@ -3453,11 +3410,9 @@ Component* JUCE_CALLTYPE Component::getComponentUnderMouse() throw()
//==============================================================================
const Rectangle<int> Component::getParentMonitorArea() const throw()
{
int centreX = getWidth() / 2;
int centreY = getHeight() / 2;
relativePositionToGlobal (centreX, centreY);
return Desktop::getInstance().getMonitorAreaContaining (centreX, centreY);
return Desktop::getInstance()
.getMonitorAreaContaining (relativePositionToGlobal (Point<int> (getWidth() / 2,
getHeight() / 2)));
}
//==============================================================================


+ 12
- 9
src/gui/components/juce_Component.h View File

@@ -343,33 +343,37 @@ public:
@see getX, relativePositionToGlobal
*/
int getScreenX() const throw();
int getScreenX() const;
/** Returns this component's y co-ordinate relative the the screen's top-left origin.
@see getY, relativePositionToGlobal
*/
int getScreenY() const throw();
int getScreenY() const;
/** Returns the position of this component's top-left corner relative to the screen's top-left.
*/
const Point<int> getScreenPosition() const;
/** Converts a position relative to this component's top-left into a screen co-ordinate.
@see globalPositionToRelative, relativePositionToOtherComponent
*/
void relativePositionToGlobal (int& x, int& y) const throw();
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) const;
/** Converts a screen co-ordinate into a position relative to this component's top-left.
@see relativePositionToGlobal, relativePositionToOtherComponent
*/
void globalPositionToRelative (int& x, int& y) const throw();
const Point<int> globalPositionToRelative (const Point<int>& screenPosition) const;
/** Converts a position relative to this component's top-left into a position
relative to another component's top-left.
@see relativePositionToGlobal, globalPositionToRelative
*/
void relativePositionToOtherComponent (const Component* const targetComponent,
int& x, int& y) const throw();
const Point<int> relativePositionToOtherComponent (const Component* const targetComponent,
const Point<int>& positionRelativeToThis) const;
//==============================================================================
/** Moves the component to a new position.
@@ -1578,7 +1582,7 @@ public:
The co-ordinates are relative to the component's top-left corner.
*/
void getMouseXYRelative (int& x, int& y) const throw();
const Point<int> getMouseXYRelative() const;
/** Returns the component that's currently underneath the mouse.
@@ -1979,8 +1983,7 @@ private:
void sendEnablementChangeMessage();
static void* runModalLoopCallback (void*);
static void bringModalComponentToFront();
void subtractObscuredRegions (RectangleList& result,
const int deltaX, const int deltaY,
void subtractObscuredRegions (RectangleList& result, const Point<int>& delta,
const Rectangle<int>& clipRect,
const Component* const compToAvoid) const throw();
void clipObscuredRegions (Graphics& g, const Rectangle<int>& clipRect,


+ 18
- 37
src/gui/components/juce_Desktop.cpp View File

@@ -34,9 +34,7 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
Desktop::Desktop() throw()
: lastFakeMouseMoveX (0),
lastFakeMouseMoveY (0),
mouseClickCounter (0),
: mouseClickCounter (0),
mouseMovedSignificantlySincePressed (false),
kioskModeComponent (0)
{
@@ -118,7 +116,7 @@ const Rectangle<int> Desktop::getMainMonitorArea (const bool clippedToWorkArea)
return getDisplayMonitorCoordinates (0, clippedToWorkArea);
}
const Rectangle<int> Desktop::getMonitorAreaContaining (int cx, int cy, const bool clippedToWorkArea) const throw()
const Rectangle<int> Desktop::getMonitorAreaContaining (const Point<int>& position, const bool clippedToWorkArea) const throw()
{
Rectangle<int> best (getMainMonitorArea (clippedToWorkArea));
double bestDistance = 1.0e10;
@@ -127,11 +125,10 @@ const Rectangle<int> Desktop::getMonitorAreaContaining (int cx, int cy, const bo
{
const Rectangle<int> rect (getDisplayMonitorCoordinates (i, clippedToWorkArea));
if (rect.contains (cx, cy))
if (rect.contains (position))
return rect;
const double distance = juce_hypot ((double) (rect.getCentreX() - cx),
(double) (rect.getCentreY() - cy));
const double distance = rect.getCentre().getDistanceFrom (position);
if (distance < bestDistance)
{
@@ -154,18 +151,15 @@ Component* Desktop::getComponent (const int index) const throw()
return desktopComponents [index];
}
Component* Desktop::findComponentAt (const int screenX,
const int screenY) const
Component* Desktop::findComponentAt (const Point<int>& screenPosition) const
{
for (int i = desktopComponents.size(); --i >= 0;)
{
Component* const c = desktopComponents.getUnchecked(i);
const Point<int> relative (c->globalPositionToRelative (screenPosition));
int x = screenX, y = screenY;
c->globalPositionToRelative (x, y);
if (c->contains (x, y))
return c->getComponentAt (x, y);
if (c->contains (relative.getX(), relative.getY()))
return c->getComponentAt (relative.getX(), relative.getY());
}
return 0;
@@ -208,11 +202,9 @@ void Desktop::componentBroughtToFront (Component* const c) throw()
}
//==============================================================================
void Desktop::getLastMouseDownPosition (int& x, int& y) throw()
const Point<int> Desktop::getLastMouseDownPosition() throw()
{
const Desktop& d = getInstance();
x = d.mouseDowns[0].position.getX();
y = d.mouseDowns[0].position.getY();
return getInstance().mouseDowns[0].position;
}
int Desktop::getMouseButtonClickCounter() throw()
@@ -327,10 +319,7 @@ void Desktop::handleAsyncUpdate()
//==============================================================================
void Desktop::timerCallback()
{
int x, y;
getMousePosition (x, y);
if (lastFakeMouseMoveX != x || lastFakeMouseMoveY != y)
if (lastFakeMouseMove != getMousePosition())
sendMouseMove();
}
@@ -340,26 +329,18 @@ void Desktop::sendMouseMove()
{
startTimer (20);
int x, y;
getMousePosition (x, y);
lastFakeMouseMoveX = x;
lastFakeMouseMoveY = y;
lastFakeMouseMove = getMousePosition();
Component* const target = findComponentAt (x, y);
Component* const target = findComponentAt (lastFakeMouseMove);
if (target != 0)
{
target->globalPositionToRelative (x, y);
ComponentDeletionWatcher deletionChecker (target);
const Point<int> pos (target->globalPositionToRelative (lastFakeMouseMove));
const Time now (Time::getCurrentTime());
const MouseEvent me (x, y,
ModifierKeys::getCurrentModifiers(),
target,
Time::getCurrentTime(),
x, y,
Time::getCurrentTime(),
0, false);
const MouseEvent me (pos, ModifierKeys::getCurrentModifiers(),
target, now, pos, now, 0, false);
for (int i = mouseListeners.size(); --i >= 0;)
{
@@ -384,7 +365,7 @@ void Desktop::resetTimer() throw()
else
startTimer (100);
getMousePosition (lastFakeMouseMoveX, lastFakeMouseMoveY);
lastFakeMouseMove = getMousePosition();
}
//==============================================================================


+ 7
- 7
src/gui/components/juce_Desktop.h View File

@@ -91,7 +91,7 @@ public:
If clippedToWorkArea is true, it will exclude any areas like the taskbar on Windows,
or the menu bar on Mac. If clippedToWorkArea is false, the entire monitor area is returned.
*/
const Rectangle<int> getMonitorAreaContaining (int x, int y, const bool clippedToWorkArea = true) const throw();
const Rectangle<int> getMonitorAreaContaining (const Point<int>& position, const bool clippedToWorkArea = true) const throw();
//==============================================================================
@@ -99,17 +99,17 @@ public:
The co-ordinates are relative to the top-left of the main monitor.
*/
static void getMousePosition (int& x, int& y) throw();
static const Point<int> getMousePosition();
/** Makes the mouse pointer jump to a given location.
The co-ordinates are relative to the top-left of the main monitor.
*/
static void setMousePosition (int x, int y) throw();
static void setMousePosition (const Point<int>& newPosition);
/** Returns the last position at which a mouse button was pressed.
*/
static void getLastMouseDownPosition (int& x, int& y) throw();
static const Point<int> getLastMouseDownPosition() throw();
/** Returns the number of times the mouse button has been clicked since the
app started.
@@ -218,8 +218,7 @@ public:
Returns 0 if the co-ordinates are inside a non-Juce window.
*/
Component* findComponentAt (const int screenX,
const int screenY) const;
Component* findComponentAt (const Point<int>& screenPosition) const;
//==============================================================================
@@ -251,7 +250,8 @@ private:
Array <Rectangle<int> > monitorCoordsClipped, monitorCoordsUnclipped;
int lastFakeMouseMoveX, lastFakeMouseMoveY, mouseClickCounter;
Point<int> lastFakeMouseMove;
int mouseClickCounter;
bool mouseMovedSignificantlySincePressed;
struct RecentMouseDown


+ 1
- 2
src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp View File

@@ -153,8 +153,7 @@ void ComponentBoundsConstrainer::setBoundsForComponent (Component* const compone
if (peer != 0)
border = peer->getFrameSize();
limits = Desktop::getInstance().getMonitorAreaContaining (bounds.getCentreX(),
bounds.getCentreY());
limits = Desktop::getInstance().getMonitorAreaContaining (bounds.getCentre());
}
else
{


+ 5
- 8
src/gui/components/layout/juce_ComponentMovementWatcher.cpp View File

@@ -98,17 +98,14 @@ void ComponentMovementWatcher::componentMovedOrResized (Component&, bool wasMove
if (wasMoved)
{
int x = 0, y = 0;
component->relativePositionToOtherComponent (component->getTopLevelComponent(), x, y);
const Point<int> pos (component->relativePositionToOtherComponent (component->getTopLevelComponent(), Point<int>()));
wasMoved = (lastX != x || lastY != y);
lastX = x;
lastY = y;
wasMoved = lastBounds.getPosition() != pos;
lastBounds.setPosition (pos);
}
wasResized = (lastWidth != component->getWidth() || lastHeight != component->getHeight());
lastWidth = component->getWidth();
lastHeight = component->getHeight();
wasResized = (lastBounds.getWidth() != component->getWidth() || lastBounds.getHeight() != component->getHeight());
lastBounds.setSize (component->getWidth(), component->getHeight());
if (wasMoved || wasResized)
componentMovedOrResized (wasMoved, wasResized);


+ 1
- 1
src/gui/components/layout/juce_ComponentMovementWatcher.h View File

@@ -81,7 +81,7 @@ private:
ComponentPeer* lastPeer;
VoidArray registeredParentComps;
bool reentrant;
int lastX, lastY, lastWidth, lastHeight;
Rectangle<int> lastBounds;
#ifdef JUCE_DEBUG
ScopedPointer <ComponentDeletionWatcher> deletionWatcher;
#endif


+ 5
- 8
src/gui/components/menus/juce_MenuBarComponent.cpp View File

@@ -279,9 +279,8 @@ void MenuBarComponent::showMenu (int index)
if (prevCompDeletionChecker != 0 && ! prevCompDeletionChecker->hasBeenDeleted())
prevFocused->grabKeyboardFocus();
int mx, my;
getMouseXYRelative (mx, my);
updateItemUnderMouse (mx, my);
const Point<int> mousePos (getMouseXYRelative());
updateItemUnderMouse (mousePos.getX(), mousePos.getY());
repaint();
if (result != 0)
@@ -320,10 +319,9 @@ void MenuBarComponent::mouseExit (const MouseEvent& e)
void MenuBarComponent::mouseDown (const MouseEvent& e)
{
const MouseEvent e2 (e.getEventRelativeTo (this));
if (currentPopupIndex < 0)
{
const MouseEvent e2 (e.getEventRelativeTo (this));
updateItemUnderMouse (e2.x, e2.y);
currentPopupIndex = -2;
@@ -440,9 +438,8 @@ void MenuBarComponent::timerCallback()
{
stopTimer();
int mx, my;
getMouseXYRelative (mx, my);
updateItemUnderMouse (mx, my);
const Point<int> mousePos (getMouseXYRelative());
updateItemUnderMouse (mousePos.getX(), mousePos.getY());
}


+ 39
- 53
src/gui/components/menus/juce_PopupMenu.cpp View File

@@ -271,8 +271,6 @@ public:
menuBarComponent (0),
managerOfChosenCommand (0),
componentAttachedTo (0),
lastMouseX (0),
lastMouseY (0),
minimumWidth (0),
maximumNumColumns (7),
standardItemHeight (0),
@@ -492,7 +490,7 @@ public:
void mouseWheelMove (const MouseEvent&, float /*amountX*/, float amountY)
{
alterChildYPos (roundToInt (-10.0f * amountY * PopupMenuSettings::scrollZone));
lastMouseX = -1;
lastMouse = Point<int> (-1, -1);
}
bool keyPressed (const KeyPress& key)
@@ -572,10 +570,9 @@ public:
// as they'll expect the menu to go away, and in fact it'll just
// come back. So only dismiss synchronously if they're not on the original
// comp that we're attached to.
int mx, my;
componentAttachedTo->getMouseXYRelative (mx, my);
const Point<int> mousePos (componentAttachedTo->getMouseXYRelative());
if (componentAttachedTo->reallyContains (mx, my, true))
if (componentAttachedTo->reallyContains (mousePos.getX(), mousePos.getY(), true))
{
postCommandMessage (PopupMenuSettings::dismissCommandId); // dismiss asynchrounously
return;
@@ -614,16 +611,13 @@ public:
startTimer (PopupMenuSettings::timerInterval); // do this in case it was called from a mouse
// move rather than a real timer callback
int mx, my;
Desktop::getMousePosition (mx, my);
int x = mx, y = my;
globalPositionToRelative (x, y);
const Point<int> globalMousePos (Desktop::getMousePosition());
const Point<int> localMousePos (globalPositionToRelative (globalMousePos));
const uint32 now = Time::getMillisecondCounter();
if (now > timeEnteredCurrentChildComp + 100
&& reallyContains (x, y, true)
&& reallyContains (localMousePos.getX(), localMousePos.getY(), true)
&& currentChild->isValidComponent()
&& (! disableMouseMoves)
&& ! (activeSubMenu != 0 && activeSubMenu->isVisible()))
@@ -631,17 +625,17 @@ public:
showSubMenuFor (currentChild);
}
if (mx != lastMouseX || my != lastMouseY || now > lastMouseMoveTime + 350)
if (globalMousePos != lastMouse || now > lastMouseMoveTime + 350)
{
highlightItemUnderMouse (mx, my, x, y);
highlightItemUnderMouse (globalMousePos, localMousePos);
}
bool overScrollArea = false;
if (isScrolling()
&& (isOver || (isDown && ((unsigned int) x) < (unsigned int) getWidth()))
&& ((isScrollZoneActive (false) && y < PopupMenuSettings::scrollZone)
|| (isScrollZoneActive (true) && y > getHeight() - PopupMenuSettings::scrollZone)))
&& (isOver || (isDown && ((unsigned int) localMousePos.getX()) < (unsigned int) getWidth()))
&& ((isScrollZoneActive (false) && localMousePos.getY() < PopupMenuSettings::scrollZone)
|| (isScrollZoneActive (true) && localMousePos.getY() > getHeight() - PopupMenuSettings::scrollZone)))
{
if (now > lastScroll + 20)
{
@@ -651,13 +645,13 @@ public:
for (int i = 0; i < getNumChildComponents() && amount == 0; ++i)
amount = ((int) scrollAcceleration) * getChildComponent (i)->getHeight();
alterChildYPos (y < PopupMenuSettings::scrollZone ? -amount : amount);
alterChildYPos (localMousePos.getY() < PopupMenuSettings::scrollZone ? -amount : amount);
lastScroll = now;
}
overScrollArea = true;
lastMouseX = -1; // trigger a mouse-move
lastMouse = Point<int> (-1, -1); // trigger a mouse-move
}
else
{
@@ -669,7 +663,7 @@ public:
if (hideOnExit && hasBeenOver && (! isOverAny) && activeSubMenu != 0)
{
activeSubMenu->updateMouseOverStatus (mx, my);
activeSubMenu->updateMouseOverStatus (globalMousePos);
isOverAny = isOverAnyMenu();
}
@@ -715,7 +709,7 @@ public:
else if (wasDown && now > menuCreationTime + 250
&& ! (isDown || overScrollArea))
{
isOver = reallyContains (x, y, true);
isOver = reallyContains (localMousePos.getX(), localMousePos.getY(), true);
if (isOver)
{
@@ -759,7 +753,7 @@ private:
Component* componentAttachedTo;
ScopedPointer <ComponentDeletionWatcher> attachedCompWatcher;
Rectangle<int> windowPos;
int lastMouseX, lastMouseY;
Point<int> lastMouse;
int minimumWidth, maximumNumColumns, standardItemHeight;
bool isOver, hasBeenOver, isDown, needsToScroll;
bool dismissOnMouseUp, hideOnExit, disableMouseMoves, hasAnyJuceCompHadFocus;
@@ -789,14 +783,13 @@ private:
&& (isOver || (activeSubMenu != 0 && activeSubMenu->isOverChildren()));
}
void updateMouseOverStatus (const int mx, const int my)
void updateMouseOverStatus (const Point<int>& globalMousePos)
{
int rx = mx, ry = my;
globalPositionToRelative (rx, ry);
isOver = reallyContains (rx, ry, true);
const Point<int> relPos (globalPositionToRelative (globalMousePos));
isOver = reallyContains (relPos.getX(), relPos.getY(), true);
if (activeSubMenu != 0)
activeSubMenu->updateMouseOverStatus (mx, my);
activeSubMenu->updateMouseOverStatus (globalMousePos);
}
bool treeContains (const Window* const window) const throw()
@@ -823,8 +816,8 @@ private:
const bool alignToRectangle)
{
const Rectangle<int> mon (Desktop::getInstance()
.getMonitorAreaContaining ((minX + maxX) / 2,
(minY + maxY) / 2,
.getMonitorAreaContaining (Point<int> ((minX + maxX) / 2,
(minY + maxY) / 2),
#if JUCE_MAC
true));
#else
@@ -995,10 +988,7 @@ private:
windowPos.getHeight() - (PopupMenuSettings::scrollZone + m->getHeight())),
currentY);
const Rectangle<int> mon (Desktop::getInstance()
.getMonitorAreaContaining (windowPos.getX(),
windowPos.getY(),
true));
const Rectangle<int> mon (Desktop::getInstance().getMonitorAreaContaining (windowPos.getPosition(), true));
int deltaY = wantedY - currentY;
@@ -1124,15 +1114,13 @@ private:
if (childComp->isValidComponent() && childComp->itemInfo.hasActiveSubMenu())
{
int left = 0, top = 0;
childComp->relativePositionToGlobal (left, top);
int right = childComp->getWidth(), bottom = childComp->getHeight();
childComp->relativePositionToGlobal (right, bottom);
const Point<int> topLeft (childComp->relativePositionToGlobal (Point<int>()));
const Point<int> bottomRight (childComp->relativePositionToGlobal (Point<int> (childComp->getWidth(), childComp->getHeight())));
activeSubMenu = Window::create (*(childComp->itemInfo.subMenu),
dismissOnMouseUp,
this,
left, right, top, bottom,
topLeft.getX(), bottomRight.getX(), topLeft.getY(), bottomRight.getY(),
0, maximumNumColumns,
standardItemHeight,
false, 0, menuBarComponent,
@@ -1151,14 +1139,14 @@ private:
return false;
}
void highlightItemUnderMouse (const int mx, const int my, const int x, const int y)
void highlightItemUnderMouse (const Point<int>& globalMousePos, const Point<int>& localMousePos)
{
isOver = reallyContains (x, y, true);
isOver = reallyContains (localMousePos.getX(), localMousePos.getY(), true);
if (isOver)
hasBeenOver = true;
if (abs (lastMouseX - mx) > 2 || abs (lastMouseY - my) > 2)
if (lastMouse.getDistanceFrom (globalMousePos) > 2)
{
lastMouseMoveTime = Time::getApproximateMillisecondCounter();
@@ -1173,7 +1161,7 @@ private:
jassert (activeSubMenu == 0 || activeSubMenu->isValidComponent())
if (isOver && (activeSubMenu != 0) && (mx != lastMouseX || my != lastMouseY))
if (isOver && (activeSubMenu != 0) && globalMousePos != lastMouse)
{
// try to intelligently guess whether the user is moving the mouse towards a currently-open
// submenu. To do this, look at whether the mouse stays inside a triangular region that
@@ -1183,31 +1171,30 @@ private:
if (activeSubMenu->getX() > getX())
{
lastMouseX -= 2; // to enlarge the triangle a bit, in case the mouse only moves a couple of pixels
lastMouse -= Point<int> (2, 0); // to enlarge the triangle a bit, in case the mouse only moves a couple of pixels
}
else
{
lastMouseX += 2;
lastMouse += Point<int> (2, 0);
subX += activeSubMenu->getWidth();
}
Path areaTowardsSubMenu;
areaTowardsSubMenu.addTriangle ((float) lastMouseX,
(float) lastMouseY,
areaTowardsSubMenu.addTriangle ((float) lastMouse.getX(),
(float) lastMouse.getY(),
subX,
(float) activeSubMenu->getScreenY(),
subX,
(float) (activeSubMenu->getScreenY() + activeSubMenu->getHeight()));
isMovingTowardsMenu = areaTowardsSubMenu.contains ((float) mx, (float) my);
isMovingTowardsMenu = areaTowardsSubMenu.contains ((float) globalMousePos.getX(), (float) globalMousePos.getY());
}
lastMouseX = mx;
lastMouseY = my;
lastMouse = globalMousePos;
if (! isMovingTowardsMenu)
{
Component* c = getComponentAt (x, y);
Component* c = getComponentAt (localMousePos.getX(), localMousePos.getY());
if (c == this)
c = 0;
@@ -1619,10 +1606,9 @@ int PopupMenu::show (const int itemIdThatMustBeVisible,
const int maximumNumColumns,
const int standardItemHeight)
{
int x, y;
Desktop::getMousePosition (x, y);
const Point<int> mousePos (Desktop::getMousePosition());
return showAt (x, y,
return showAt (mousePos.getX(), mousePos.getY(),
itemIdThatMustBeVisible,
minimumWidth,
maximumNumColumns,


+ 8
- 13
src/gui/components/mouse/juce_ComponentDragger.cpp View File

@@ -33,9 +33,7 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
ComponentDragger::ComponentDragger()
: constrainer (0),
originalX (0),
originalY (0)
: constrainer (0)
{
}
@@ -52,9 +50,7 @@ void ComponentDragger::startDraggingComponent (Component* const componentToDrag,
if (componentToDrag->isValidComponent())
{
constrainer = constrainer_;
originalX = 0;
originalY = 0;
componentToDrag->relativePositionToGlobal (originalX, originalY);
originalPos = componentToDrag->relativePositionToGlobal (Point<int>());
}
}
@@ -65,23 +61,22 @@ void ComponentDragger::dragComponent (Component* const componentToDrag, const Mo
if (componentToDrag->isValidComponent())
{
int x = originalX;
int y = originalY;
Point<int> pos (originalPos);
int w = componentToDrag->getWidth();
int h = componentToDrag->getHeight();
const Component* const parentComp = componentToDrag->getParentComponent();
if (parentComp != 0)
parentComp->globalPositionToRelative (x, y);
pos = parentComp->globalPositionToRelative (pos);
x += e.getDistanceFromDragStartX();
y += e.getDistanceFromDragStartY();
pos += Point<int> (e.getDistanceFromDragStartX(),
e.getDistanceFromDragStartY());
if (constrainer != 0)
constrainer->setBoundsForComponent (componentToDrag, Rectangle<int> (x, y, w, h),
constrainer->setBoundsForComponent (componentToDrag, Rectangle<int> (pos.getX(), pos.getY(), w, h),
false, false, false, false);
else
componentToDrag->setBounds (x, y, w, h);
componentToDrag->setBounds (pos.getX(), pos.getY(), w, h);
}
}


+ 1
- 1
src/gui/components/mouse/juce_ComponentDragger.h View File

@@ -98,7 +98,7 @@ public:
private:
ComponentBoundsConstrainer* constrainer;
int originalX, originalY;
Point<int> originalPos;
};
#endif // __JUCE_COMPONENTDRAGGER_JUCEHEADER__

+ 41
- 59
src/gui/components/mouse/juce_DragAndDropContainer.cpp View File

@@ -53,7 +53,7 @@ private:
DragAndDropTarget* currentlyOver;
String dragDesc;
const int imageX, imageY;
const Point<int> imageOffset;
bool hasCheckedForExternalDrag, drawImage;
DragImageComponent (const DragImageComponent&);
@@ -64,14 +64,13 @@ public:
const String& desc,
Component* const s,
DragAndDropContainer* const o,
const int imageX_, const int imageY_)
const Point<int>& imageOffset_)
: image (im),
source (s),
owner (o),
currentlyOver (0),
dragDesc (desc),
imageX (imageX_),
imageY (imageY_),
imageOffset (imageOffset_),
hasCheckedForExternalDrag (false),
drawImage (true)
{
@@ -120,21 +119,19 @@ public:
}
}
DragAndDropTarget* findTarget (const int screenX, const int screenY,
int& relX, int& relY) const
DragAndDropTarget* findTarget (const Point<int>& screenPos,
Point<int>& relativePos) const
{
Component* hit = getParentComponent();
if (hit == 0)
{
hit = Desktop::getInstance().findComponentAt (screenX, screenY);
hit = Desktop::getInstance().findComponentAt (screenPos);
}
else
{
int rx = screenX, ry = screenY;
hit->globalPositionToRelative (rx, ry);
hit = hit->getComponentAt (rx, ry);
const Point<int> relPos (hit->globalPositionToRelative (screenPos));
hit = hit->getComponentAt (relPos.getX(), relPos.getY());
}
// (note: use a local copy of the dragDesc member in case the callback runs
@@ -147,9 +144,7 @@ public:
if (ddt != 0 && ddt->isInterestedInDragSource (dragDescLocal, source))
{
relX = screenX;
relY = screenY;
hit->globalPositionToRelative (relX, relY);
relativePos = hit->globalPositionToRelative (screenPos);
return ddt;
}
@@ -168,14 +163,12 @@ public:
bool dropAccepted = false;
DragAndDropTarget* ddt = 0;
int relX = 0, relY = 0;
Point<int> relPos;
if (isVisible())
{
setVisible (false);
ddt = findTarget (e.getScreenX(),
e.getScreenY(),
relX, relY);
ddt = findTarget (e.getScreenPosition(), relPos);
// fade this component and remove it - it'll be deleted later by the timer callback
@@ -189,17 +182,15 @@ public:
}
else
{
int targetX = source->getWidth() / 2;
int targetY = source->getHeight() / 2;
source->relativePositionToGlobal (targetX, targetY);
const Point<int> target (source->relativePositionToGlobal (Point<int> (source->getWidth() / 2,
source->getHeight() / 2)));
int ourCentreX = getWidth() / 2;
int ourCentreY = getHeight() / 2;
relativePositionToGlobal (ourCentreX, ourCentreY);
const Point<int> ourCentre (relativePositionToGlobal (Point<int> (getWidth() / 2,
getHeight() / 2)));
fadeOutComponent (120,
targetX - ourCentreX,
targetY - ourCentreY);
target.getX() - ourCentre.getX(),
target.getY() - ourCentre.getY());
}
}
@@ -215,31 +206,30 @@ public:
currentlyOverWatcher = 0;
currentlyOver = 0;
ddt->itemDropped (dragDescLocal, source, relX, relY);
ddt->itemDropped (dragDescLocal, source, relPos.getX(), relPos.getY());
}
// careful - this object could now be deleted..
}
}
void updateLocation (const bool canDoExternalDrag, int x, int y)
void updateLocation (const bool canDoExternalDrag, const Point<int>& screenPos)
{
// (note: use a local copy of the dragDesc member in case the callback runs
// a modal loop and deletes this object before it returns)
const String dragDescLocal (dragDesc);
int newX = x + imageX;
int newY = y + imageY;
Point<int> newPos (screenPos + imageOffset);
if (getParentComponent() != 0)
getParentComponent()->globalPositionToRelative (newX, newY);
newPos = getParentComponent()->globalPositionToRelative (newPos);
//if (newX != getX() || newY != getY())
{
setTopLeftPosition (newX, newY);
setTopLeftPosition (newPos.getX(), newPos.getY());
int relX = 0, relY = 0;
DragAndDropTarget* const ddt = findTarget (x, y, relX, relY);
Point<int> relPos;
DragAndDropTarget* const ddt = findTarget (screenPos, relPos);
drawImage = (ddt == 0) || ddt->shouldDrawDragImageWhenOver();
@@ -266,7 +256,7 @@ public:
currentlyOverWatcher = new ComponentDeletionWatcher (dynamic_cast <Component*> (ddt));
if (currentlyOver->isInterestedInDragSource (dragDescLocal, source))
currentlyOver->itemDragEnter (dragDescLocal, source, relX, relY);
currentlyOver->itemDragEnter (dragDescLocal, source, relPos.getX(), relPos.getY());
}
}
else if (currentlyOverWatcher != 0 && currentlyOverWatcher->hasBeenDeleted())
@@ -277,13 +267,13 @@ public:
if (currentlyOver != 0
&& currentlyOver->isInterestedInDragSource (dragDescLocal, source))
currentlyOver->itemDragMove (dragDescLocal, source, relX, relY);
currentlyOver->itemDragMove (dragDescLocal, source, relPos.getX(), relPos.getY());
if (currentlyOver == 0
&& canDoExternalDrag
&& ! hasCheckedForExternalDrag)
{
if (Desktop::getInstance().findComponentAt (x, y) == 0)
if (Desktop::getInstance().findComponentAt (screenPos) == 0)
{
hasCheckedForExternalDrag = true;
StringArray files;
@@ -311,7 +301,7 @@ public:
void mouseDrag (const MouseEvent& e)
{
if (e.originalComponent != this)
updateLocation (true, e.getScreenX(), e.getScreenY());
updateLocation (true, e.getScreenPosition());
}
void timerCallback()
@@ -355,9 +345,8 @@ void DragAndDropContainer::startDragging (const String& sourceDescription,
if (thisComp != 0)
{
int mx, my;
Desktop::getLastMouseDownPosition (mx, my);
int imageX = 0, imageY = 0;
const Point<int> lastMouseDown (Desktop::getLastMouseDownPosition());
Point<int> imageOffset;
if (dragImage == 0)
{
@@ -377,18 +366,17 @@ void DragAndDropContainer::startDragging (const String& sourceDescription,
const int lo = 150;
const int hi = 400;
int rx = mx, ry = my;
sourceComponent->globalPositionToRelative (rx, ry);
const int cx = jlimit (0, dragImage->getWidth(), rx);
const int cy = jlimit (0, dragImage->getHeight(), ry);
Point<int> relPos (sourceComponent->globalPositionToRelative (lastMouseDown));
Point<int> clipped (Rectangle<int> (0, 0, dragImage->getWidth(), dragImage->getHeight())
.getConstrainedPoint (relPos));
for (int y = dragImage->getHeight(); --y >= 0;)
{
const double dy = (y - cy) * (y - cy);
const double dy = (y - clipped.getY()) * (y - clipped.getY());
for (int x = dragImage->getWidth(); --x >= 0;)
{
const int dx = x - cx;
const int dx = x - clipped.getX();
const int distance = roundToInt (sqrt (dx * dx + dy));
if (distance > lo)
@@ -402,25 +390,19 @@ void DragAndDropContainer::startDragging (const String& sourceDescription,
}
}
imageX = -cx;
imageY = -cy;
imageOffset = Point<int>() - clipped;
}
else
{
if (imageOffsetFromMouse == 0)
{
imageX = dragImage->getWidth() / -2;
imageY = dragImage->getHeight() / -2;
}
imageOffset = Point<int> (dragImage->getWidth() / -2,
dragImage->getHeight() / -2);
else
{
imageX = imageOffsetFromMouse->getX();
imageY = imageOffsetFromMouse->getY();
}
imageOffset = *imageOffsetFromMouse;
}
dragImageComponent = new DragImageComponent (dragImage.release(), sourceDescription, sourceComponent,
this, imageX, imageY);
this, imageOffset);
currentDragDesc = sourceDescription;
@@ -436,7 +418,7 @@ void DragAndDropContainer::startDragging (const String& sourceDescription,
else
thisComp->addChildComponent (dragImageComponent);
((DragImageComponent*) dragImageComponent)->updateLocation (false, mx, my);
((DragImageComponent*) dragImageComponent)->updateLocation (false, lastMouseDown);
dragImageComponent->setVisible (true);
}
else


+ 45
- 35
src/gui/components/mouse/juce_MouseEvent.cpp View File

@@ -32,24 +32,21 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
MouseEvent::MouseEvent (const int x_,
const int y_,
MouseEvent::MouseEvent (const Point<int>& position,
const ModifierKeys& mods_,
Component* const originator,
const Time& eventTime_,
const int mouseDownX_,
const int mouseDownY_,
const Point<int> mouseDownPos_,
const Time& mouseDownTime_,
const int numberOfClicks_,
const bool mouseWasDragged) throw()
: x (x_),
y (y_),
: x (position.getX()),
y (position.getY()),
mods (mods_),
eventComponent (originator),
originalComponent (originator),
eventTime (eventTime_),
mouseDownX (mouseDownX_),
mouseDownY (mouseDownY_),
mouseDownPos (mouseDownPos_),
mouseDownTime (mouseDownTime_),
numberOfClicks (numberOfClicks_),
wasMovedSinceMouseDown (mouseWasDragged)
@@ -68,22 +65,27 @@ bool MouseEvent::mouseWasClicked() const throw()
int MouseEvent::getMouseDownX() const throw()
{
return mouseDownX;
return mouseDownPos.getX();
}
int MouseEvent::getMouseDownY() const throw()
{
return mouseDownY;
return mouseDownPos.getY();
}
const Point<int> MouseEvent::getMouseDownPosition() const throw()
{
return mouseDownPos;
}
int MouseEvent::getDistanceFromDragStartX() const throw()
{
return x - mouseDownX;
return x - mouseDownPos.getX();
}
int MouseEvent::getDistanceFromDragStartY() const throw()
{
return y - mouseDownY;
return y - mouseDownPos.getY();
}
int MouseEvent::getDistanceFromDragStart() const throw()
@@ -101,32 +103,39 @@ int MouseEvent::getLengthOfMousePress() const throw()
}
//==============================================================================
int MouseEvent::getScreenX() const throw()
const Point<int> MouseEvent::getPosition() const throw()
{
return Point<int> (x, y);
}
int MouseEvent::getScreenX() const
{
return getScreenPosition().getX();
}
int MouseEvent::getScreenY() const
{
int sx = x, sy = y;
eventComponent->relativePositionToGlobal (sx, sy);
return sx;
return getScreenPosition().getY();
}
int MouseEvent::getScreenY() const throw()
const Point<int> MouseEvent::getScreenPosition() const
{
int sx = x, sy = y;
eventComponent->relativePositionToGlobal (sx, sy);
return sy;
return eventComponent->relativePositionToGlobal (Point<int> (x, y));
}
int MouseEvent::getMouseDownScreenX() const throw()
int MouseEvent::getMouseDownScreenX() const
{
int sx = mouseDownX, sy = mouseDownY;
eventComponent->relativePositionToGlobal (sx, sy);
return sx;
return getMouseDownScreenPosition().getX();
}
int MouseEvent::getMouseDownScreenY() const throw()
int MouseEvent::getMouseDownScreenY() const
{
int sx = mouseDownX, sy = mouseDownY;
eventComponent->relativePositionToGlobal (sx, sy);
return sy;
return getMouseDownScreenPosition().getY();
}
const Point<int> MouseEvent::getMouseDownScreenPosition() const
{
return eventComponent->relativePositionToGlobal (mouseDownPos);
}
//==============================================================================
@@ -138,13 +147,14 @@ const MouseEvent MouseEvent::getEventRelativeTo (Component* const otherComponent
return *this;
}
MouseEvent me (*this);
eventComponent->relativePositionToOtherComponent (otherComponent, me.x, me.y);
eventComponent->relativePositionToOtherComponent (otherComponent, me.mouseDownX, me.mouseDownY);
me.eventComponent = otherComponent;
return me;
return MouseEvent (eventComponent->relativePositionToOtherComponent (otherComponent, Point<int> (x, y)),
mods,
originalComponent,
eventTime,
eventComponent->relativePositionToOtherComponent (otherComponent, mouseDownPos),
mouseDownTime,
numberOfClicks,
wasMovedSinceMouseDown);
}
//==============================================================================


+ 41
- 14
src/gui/components/mouse/juce_MouseEvent.h View File

@@ -29,6 +29,7 @@
class Component;
#include "../keyboard/juce_ModifierKeys.h"
#include "../../../core/juce_Time.h"
#include "../../graphics/geometry/juce_Point.h"
//==============================================================================
@@ -46,29 +47,24 @@ public:
Normally an application will never need to use this.
@param x the x position of the mouse, relative to the component that is passed-in
@param y the y position of the mouse, relative to the component that is passed-in
@param position the position of the mouse, relative to the component that is passed-in
@param modifiers the key modifiers at the time of the event
@param originator the component that the mouse event applies to
@param eventTime the time the event happened
@param mouseDownX the x position of the corresponding mouse-down event (relative to the component that is passed-in).
@param mouseDownPos the position of the corresponding mouse-down event (relative to the component that is passed-in).
If there isn't a corresponding mouse-down (e.g. for a mouse-move), this will just be
the same as the current mouse-x position.
@param mouseDownY the y position of the corresponding mouse-down event (relative to the component that is passed-in)
If there isn't a corresponding mouse-down (e.g. for a mouse-move), this will just be
the same as the current mouse-y position.
@param mouseDownTime the time at which the corresponding mouse-down event happened
If there isn't a corresponding mouse-down (e.g. for a mouse-move), this will just be
the same as the current mouse-event time.
@param numberOfClicks how many clicks, e.g. a double-click event will be 2, a triple-click will be 3, etc
@param mouseWasDragged whether the mouse has been dragged significantly since the previous mouse-down
*/
MouseEvent (const int x, const int y,
MouseEvent (const Point<int>& position,
const ModifierKeys& modifiers,
Component* const originator,
const Time& eventTime,
const int mouseDownX,
const int mouseDownY,
const Point<int> mouseDownPos,
const Time& mouseDownTime,
const int numberOfClicks,
const bool mouseWasDragged) throw();
@@ -146,6 +142,14 @@ public:
*/
int getMouseDownY() const throw();
/** Returns the co-ordinates of the last place that a mouse was pressed.
The co-ordinates are relative to the component specified in MouseEvent::component.
@see getDistanceFromDragStart, getDistanceFromDragStartX, mouseWasClicked
*/
const Point<int> getMouseDownPosition() const throw();
/** Returns the straight-line distance between where the mouse is now and where it
was the last time the button was pressed.
@@ -203,13 +207,20 @@ public:
int getLengthOfMousePress() const throw();
//==============================================================================
/** The position of the mouse when the event occurred.
This position is relative to the top-left of the component to which the
event applies (as indicated by the MouseEvent::eventComponent field).
*/
const Point<int> getPosition() const throw();
/** Returns the mouse x position of this event, in global screen co-ordinates.
The co-ordinates are relative to the top-left of the main monitor.
@see getMouseDownScreenX, Desktop::getMousePosition
*/
int getScreenX() const throw();
int getScreenX() const;
/** Returns the mouse y position of this event, in global screen co-ordinates.
@@ -217,7 +228,15 @@ public:
@see getMouseDownScreenY, Desktop::getMousePosition
*/
int getScreenY() const throw();
int getScreenY() const;
/** Returns the mouse position of this event, in global screen co-ordinates.
The co-ordinates are relative to the top-left of the main monitor.
@see getMouseDownScreenY, Desktop::getMousePosition
*/
const Point<int> getScreenPosition() const;
/** Returns the x co-ordinate at which the mouse button was last pressed.
@@ -225,7 +244,7 @@ public:
@see getScreenX, Desktop::getMousePosition
*/
int getMouseDownScreenX() const throw();
int getMouseDownScreenX() const;
/** Returns the y co-ordinate at which the mouse button was last pressed.
@@ -233,7 +252,15 @@ public:
@see getScreenY, Desktop::getMousePosition
*/
int getMouseDownScreenY() const throw();
int getMouseDownScreenY() const;
/** Returns the co-ordinates at which the mouse button was last pressed.
The co-ordinates are relative to the top-left of the main monitor.
@see getScreenY, Desktop::getMousePosition
*/
const Point<int> getMouseDownScreenPosition() const;
//==============================================================================
/** Creates a version of this event that is relative to a different component.
@@ -267,7 +294,7 @@ public:
juce_UseDebuggingNewOperator
private:
int mouseDownX, mouseDownY;
Point<int> mouseDownPos;
Time mouseDownTime;
int numberOfClicks;
bool wasMovedSinceMouseDown;


+ 3
- 4
src/gui/components/mouse/juce_MouseHoverDetector.cpp View File

@@ -78,13 +78,12 @@ void MouseHoverDetector::hoverTimerCallback()
if (source != 0)
{
int mx, my;
source->getMouseXYRelative (mx, my);
const Point<int> pos (source->getMouseXYRelative());
if (source->reallyContains (mx, my, false))
if (source->reallyContains (pos.getX(), pos.getY(), false))
{
hasJustHovered = true;
mouseHovered (mx, my);
mouseHovered (pos.getX(), pos.getY());
}
}
}


+ 4
- 5
src/gui/components/special/juce_BubbleComponent.cpp View File

@@ -98,15 +98,14 @@ void BubbleComponent::setPosition (Component* componentToPointTo)
{
jassert (componentToPointTo->isValidComponent());
int tx = 0;
int ty = 0;
Point<int> pos;
if (getParentComponent() != 0)
componentToPointTo->relativePositionToOtherComponent (getParentComponent(), tx, ty);
pos = componentToPointTo->relativePositionToOtherComponent (getParentComponent(), pos);
else
componentToPointTo->relativePositionToGlobal (tx, ty);
pos = componentToPointTo->relativePositionToGlobal (pos);
setPosition (Rectangle<int> (tx, ty, componentToPointTo->getWidth(), componentToPointTo->getHeight()));
setPosition (Rectangle<int> (pos.getX(), pos.getY(), componentToPointTo->getWidth(), componentToPointTo->getHeight()));
}
void BubbleComponent::setPosition (const int arrowTipX_,


+ 14
- 14
src/gui/components/special/juce_MagnifierComponent.cpp View File

@@ -76,11 +76,11 @@ public:
peer->grabFocus();
}
void textInputRequired (int x, int y)
void textInputRequired (const Point<int>& position)
{
ComponentPeer* peer = magnifierComp->getPeer();
if (peer != 0)
peer->textInputRequired (x, y);
peer->textInputRequired (position);
}
void getBounds (int& x, int& y, int& w, int& h) const
@@ -91,25 +91,25 @@ public:
h = component->getHeight();
}
int getScreenX() const { return magnifierComp->getScreenX(); }
int getScreenY() const { return magnifierComp->getScreenY(); }
const Point<int> getScreenPosition() const
{
return magnifierComp->getScreenPosition();
}
void relativePositionToGlobal (int& x, int& y)
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition)
{
const double zoom = magnifierComp->getScaleFactor();
x = roundToInt (x * zoom);
y = roundToInt (y * zoom);
magnifierComp->relativePositionToGlobal (x, y);
return magnifierComp->relativePositionToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom),
roundToInt (relativePosition.getY() * zoom)));
}
void globalPositionToRelative (int& x, int& y)
const Point<int> globalPositionToRelative (const Point<int>& screenPosition)
{
magnifierComp->globalPositionToRelative (x, y);
const Point<int> p (magnifierComp->globalPositionToRelative (screenPosition));
const double zoom = magnifierComp->getScaleFactor();
x = roundToInt (x / zoom);
y = roundToInt (y / zoom);
return Point<int> (roundToInt (p.getX() / zoom),
roundToInt (p.getY() / zoom));
}
bool contains (int x, int y, bool) const


+ 26
- 27
src/gui/components/special/juce_MidiKeyboardComponent.cpp View File

@@ -251,27 +251,29 @@ int MidiKeyboardComponent::getKeyStartPosition (const int midiNoteNumber) const
static const uint8 whiteNotes[] = { 0, 2, 4, 5, 7, 9, 11 };
static const uint8 blackNotes[] = { 1, 3, 6, 8, 10 };
int MidiKeyboardComponent::xyToNote (int x, int y, float& mousePositionVelocity)
int MidiKeyboardComponent::xyToNote (const Point<int>& pos, float& mousePositionVelocity)
{
if (! reallyContains (x, y, false))
if (! reallyContains (pos.getX(), pos.getY(), false))
return -1;
Point<int> p (pos);
if (orientation != horizontalKeyboard)
{
swapVariables (x, y);
p = Point<int> (p.getY(), p.getX());
if (orientation == verticalKeyboardFacingLeft)
y = getWidth() - y;
p = Point<int> (p.getX(), getWidth() - p.getY());
else
x = getHeight() - x;
p = Point<int> (getHeight() - p.getX(), p.getY());
}
return remappedXYToNote (x + xOffset, y, mousePositionVelocity);
return remappedXYToNote (p + Point<int> (xOffset, 0), mousePositionVelocity);
}
int MidiKeyboardComponent::remappedXYToNote (int x, int y, float& mousePositionVelocity) const
int MidiKeyboardComponent::remappedXYToNote (const Point<int>& pos, float& mousePositionVelocity) const
{
if (y < blackNoteLength)
if (pos.getY() < blackNoteLength)
{
for (int octaveStart = 12 * (rangeStart / 12); octaveStart <= rangeEnd; octaveStart += 12)
{
@@ -285,9 +287,9 @@ int MidiKeyboardComponent::remappedXYToNote (int x, int y, float& mousePositionV
getKeyPos (note, kx, kw);
kx += xOffset;
if (x >= kx && x < kx + kw)
if (pos.getX() >= kx && pos.getX() < kx + kw)
{
mousePositionVelocity = y / (float) blackNoteLength;
mousePositionVelocity = pos.getY() / (float) blackNoteLength;
return note;
}
}
@@ -307,10 +309,10 @@ int MidiKeyboardComponent::remappedXYToNote (int x, int y, float& mousePositionV
getKeyPos (note, kx, kw);
kx += xOffset;
if (x >= kx && x < kx + kw)
if (pos.getX() >= kx && pos.getX() < kx + kw)
{
const int whiteNoteLength = (orientation == horizontalKeyboard) ? getHeight() : getWidth();
mousePositionVelocity = y / (float) whiteNoteLength;
mousePositionVelocity = pos.getY() / (float) whiteNoteLength;
return note;
}
}
@@ -643,7 +645,7 @@ void MidiKeyboardComponent::resized()
float mousePositionVelocity;
const int spaceAvailable = w - scrollButtonW * 2;
const int lastStartKey = remappedXYToNote (endOfLastKey - spaceAvailable, 0, mousePositionVelocity) + 1;
const int lastStartKey = remappedXYToNote (Point<int> (endOfLastKey - spaceAvailable, 0), mousePositionVelocity) + 1;
if (lastStartKey >= 0 && firstKey > lastStartKey)
{
@@ -699,11 +701,11 @@ void MidiKeyboardComponent::resetAnyKeysInUse()
}
}
void MidiKeyboardComponent::updateNoteUnderMouse (int x, int y)
void MidiKeyboardComponent::updateNoteUnderMouse (const Point<int>& pos)
{
float mousePositionVelocity = 0.0f;
const int newNote = (mouseDragging || isMouseOver())
? xyToNote (x, y, mousePositionVelocity) : -1;
? xyToNote (pos, mousePositionVelocity) : -1;
if (noteUnderMouse != newNote)
{
@@ -735,19 +737,19 @@ void MidiKeyboardComponent::updateNoteUnderMouse (int x, int y)
void MidiKeyboardComponent::mouseMove (const MouseEvent& e)
{
updateNoteUnderMouse (e.x, e.y);
updateNoteUnderMouse (e.getPosition());
stopTimer();
}
void MidiKeyboardComponent::mouseDrag (const MouseEvent& e)
{
float mousePositionVelocity;
const int newNote = xyToNote (e.x, e.y, mousePositionVelocity);
const int newNote = xyToNote (e.getPosition(), mousePositionVelocity);
if (newNote >= 0)
mouseDraggedToKey (newNote, e);
updateNoteUnderMouse (e.x, e.y);
updateNoteUnderMouse (e.getPosition());
}
bool MidiKeyboardComponent::mouseDownOnKey (int /*midiNoteNumber*/, const MouseEvent&)
@@ -762,7 +764,7 @@ void MidiKeyboardComponent::mouseDraggedToKey (int /*midiNoteNumber*/, const Mou
void MidiKeyboardComponent::mouseDown (const MouseEvent& e)
{
float mousePositionVelocity;
const int newNote = xyToNote (e.x, e.y, mousePositionVelocity);
const int newNote = xyToNote (e.getPosition(), mousePositionVelocity);
mouseDragging = false;
if (newNote >= 0 && mouseDownOnKey (newNote, e))
@@ -771,7 +773,7 @@ void MidiKeyboardComponent::mouseDown (const MouseEvent& e)
noteUnderMouse = -1;
mouseDragging = true;
updateNoteUnderMouse (e.x, e.y);
updateNoteUnderMouse (e.getPosition());
startTimer (500);
}
}
@@ -779,19 +781,19 @@ void MidiKeyboardComponent::mouseDown (const MouseEvent& e)
void MidiKeyboardComponent::mouseUp (const MouseEvent& e)
{
mouseDragging = false;
updateNoteUnderMouse (e.x, e.y);
updateNoteUnderMouse (e.getPosition());
stopTimer();
}
void MidiKeyboardComponent::mouseEnter (const MouseEvent& e)
{
updateNoteUnderMouse (e.x, e.y);
updateNoteUnderMouse (e.getPosition());
}
void MidiKeyboardComponent::mouseExit (const MouseEvent& e)
{
updateNoteUnderMouse (e.x, e.y);
updateNoteUnderMouse (e.getPosition());
}
void MidiKeyboardComponent::mouseWheelMove (const MouseEvent&, float ix, float iy)
@@ -801,10 +803,7 @@ void MidiKeyboardComponent::mouseWheelMove (const MouseEvent&, float ix, float i
void MidiKeyboardComponent::timerCallback()
{
int mx, my;
getMouseXYRelative (mx, my);
updateNoteUnderMouse (mx, my);
updateNoteUnderMouse (getMouseXYRelative());
}
//==============================================================================


+ 3
- 3
src/gui/components/special/juce_MidiKeyboardComponent.h View File

@@ -405,10 +405,10 @@ private:
int octaveNumForMiddleC;
void getKeyPos (int midiNoteNumber, int& x, int& w) const;
int xyToNote (int x, int y, float& mousePositionVelocity);
int remappedXYToNote (int x, int y, float& mousePositionVelocity) const;
int xyToNote (const Point<int>& pos, float& mousePositionVelocity);
int remappedXYToNote (const Point<int>& pos, float& mousePositionVelocity) const;
void resetAnyKeysInUse();
void updateNoteUnderMouse (int x, int y);
void updateNoteUnderMouse (const Point<int>& pos);
void repaintNote (const int midiNoteNumber);
MidiKeyboardComponent (const MidiKeyboardComponent&);


+ 2
- 3
src/gui/components/special/juce_OpenGLComponent.cpp View File

@@ -259,9 +259,8 @@ void OpenGLComponent::paint (Graphics&)
if (peer != 0)
{
peer->addMaskedRegion (getScreenX() - peer->getScreenX(),
getScreenY() - peer->getScreenY(),
getWidth(), getHeight());
const Point<int> topLeft (getScreenPosition() - peer->getScreenPosition());
peer->addMaskedRegion (topLeft.getX(), topLeft.getY(), getWidth(), getHeight());
}
}
}


+ 36
- 54
src/gui/components/windows/juce_ComponentPeer.cpp View File

@@ -114,24 +114,22 @@ void ComponentPeer::handleMouseEnter (int x, int y, const int64 time)
{
jassert (Component::componentUnderMouse->isValidComponent());
const int oldX = x;
const int oldY = y;
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseExit (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseExit (relPos.getX(), relPos.getY(), time);
Component::componentUnderMouse = 0;
if (deletionChecker.hasBeenDeleted())
return;
c = component->getComponentAt (oldX, oldY);
c = component->getComponentAt (x, y);
}
Component::componentUnderMouse = c;
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseEnter (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseEnter (relPos.getX(), relPos.getY(), time);
}
}
@@ -147,16 +145,10 @@ void ComponentPeer::handleMouseMove (int x, int y, const int64 time)
if (c != Component::componentUnderMouse)
{
const int oldX = x;
const int oldY = y;
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseExit (x, y, time);
x = oldX;
y = oldY;
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseExit (relPos.getX(), relPos.getY(), time);
Component::componentUnderMouse = 0;
if (deletionChecker.hasBeenDeleted())
@@ -169,10 +161,8 @@ void ComponentPeer::handleMouseMove (int x, int y, const int64 time)
if (c != 0)
{
component->relativePositionToOtherComponent (c, x, y);
c->internalMouseEnter (x, y, time);
x = oldX;
y = oldY;
const Point<int> relPos (component->relativePositionToOtherComponent (c, Point<int> (x, y)));
c->internalMouseEnter (relPos.getX(), relPos.getY(), time);
if (deletionChecker.hasBeenDeleted())
return; // if this window has just been deleted..
@@ -181,8 +171,8 @@ void ComponentPeer::handleMouseMove (int x, int y, const int64 time)
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseMove (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseMove (relPos.getX(), relPos.getY(), time);
}
}
@@ -197,8 +187,8 @@ void ComponentPeer::handleMouseDown (int x, int y, const int64 time)
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseDown (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseDown (relPos.getX(), relPos.getY(), time);
}
}
}
@@ -209,8 +199,8 @@ void ComponentPeer::handleMouseDrag (int x, int y, const int64 time)
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseDrag (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseDrag (relPos.getX(), relPos.getY(), time);
}
}
@@ -225,39 +215,34 @@ void ComponentPeer::handleMouseUp (const int oldModifiers, int x, int y, const i
if (c != Component::componentUnderMouse)
{
const int oldX = x;
const int oldY = y;
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseUp (oldModifiers, x, y, time);
x = oldX;
y = oldY;
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseUp (oldModifiers, relPos.getX(), relPos.getY(), time);
if (Component::componentUnderMouse != 0)
Component::componentUnderMouse->internalMouseExit (x, y, time);
Component::componentUnderMouse->internalMouseExit (relPos.getX(), relPos.getY(), time);
if (deletionChecker.hasBeenDeleted())
return;
c = component->getComponentAt (oldX, oldY);
c = component->getComponentAt (x, y);
}
Component::componentUnderMouse = c;
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseEnter (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseEnter (relPos.getX(), relPos.getY(), time);
}
}
else
{
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseUp (oldModifiers, x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseUp (oldModifiers, relPos.getX(), relPos.getY(), time);
}
}
}
@@ -270,9 +255,8 @@ void ComponentPeer::handleMouseExit (int x, int y, const int64 time)
if (Component::componentUnderMouse != 0)
{
component->relativePositionToOtherComponent (Component::componentUnderMouse, x, y);
Component::componentUnderMouse->internalMouseExit (x, y, time);
const Point<int> relPos (component->relativePositionToOtherComponent (Component::componentUnderMouse, Point<int> (x, y)));
Component::componentUnderMouse->internalMouseExit (relPos.getX(), relPos.getY(), time);
Component::componentUnderMouse = 0;
}
}
@@ -299,14 +283,13 @@ void ComponentPeer::sendFakeMouseMove() throw()
component->bounds_.setBounds (realX, realY, realW, realH);
}
int x, y;
component->getMouseXYRelative (x, y);
const Point<int> pos (component->getMouseXYRelative());
if (((unsigned int) x) < (unsigned int) component->getWidth()
&& ((unsigned int) y) < (unsigned int) component->getHeight()
&& contains (x, y, false))
if (((unsigned int) pos.getX()) < (unsigned int) component->getWidth()
&& ((unsigned int) pos.getY()) < (unsigned int) component->getHeight()
&& contains (pos.getX(), pos.getY(), false))
{
postMessage (new Message (fakeMouseMoveMessage, x, y, 0));
postMessage (new Message (fakeMouseMoveMessage, pos.getX(), pos.getY(), 0));
}
fakeMouseMessageSent = true;
@@ -638,11 +621,10 @@ void ComponentPeer::handleFileDragMove (const StringArray& files, int x, int y)
if (newTarget != 0)
{
Component* const targetComp = dynamic_cast <Component*> (newTarget);
int mx = x, my = y;
component->relativePositionToOtherComponent (targetComp, mx, my);
const Point<int> pos (component->relativePositionToOtherComponent (targetComp, Point<int> (x, y)));
dragAndDropTargetComponent = new ComponentDeletionWatcher (dynamic_cast <Component*> (newTarget));
newTarget->fileDragEnter (files, mx, my);
newTarget->fileDragEnter (files, pos.getX(), pos.getY());
}
}
}
@@ -654,9 +636,9 @@ void ComponentPeer::handleFileDragMove (const StringArray& files, int x, int y)
if (newTarget != 0)
{
Component* const targetComp = dynamic_cast <Component*> (newTarget);
component->relativePositionToOtherComponent (targetComp, x, y);
const Point<int> pos (component->relativePositionToOtherComponent (targetComp, Point<int> (x, y)));
newTarget->fileDragMove (files, x, y);
newTarget->fileDragMove (files, pos.getX(), pos.getY());
}
}
@@ -691,8 +673,8 @@ void ComponentPeer::handleFileDragDrop (const StringArray& files, int x, int y)
return;
}
component->relativePositionToOtherComponent (targetComp, x, y);
target->filesDropped (files, x, y);
const Point<int> pos (component->relativePositionToOtherComponent (targetComp, Point<int> (x, y)));
target->filesDropped (files, pos.getX(), pos.getY());
}
}
}


+ 4
- 7
src/gui/components/windows/juce_ComponentPeer.h View File

@@ -150,16 +150,13 @@ public:
virtual void getBounds (int& x, int& y, int& w, int& h) const = 0;
/** Returns the x-position of this window, relative to the screen's origin. */
virtual int getScreenX() const = 0;
/** Returns the y-position of this window, relative to the screen's origin. */
virtual int getScreenY() const = 0;
virtual const Point<int> getScreenPosition() const = 0;
/** Converts a position relative to the top-left of this component to screen co-ordinates. */
virtual void relativePositionToGlobal (int& x, int& y) = 0;
virtual const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) = 0;
/** Converts a screen co-ordinate to a position relative to the top-left of this component. */
virtual void globalPositionToRelative (int& x, int& y) = 0;
virtual const Point<int> globalPositionToRelative (const Point<int>& screenPosition) = 0;
/** Minimises the window. */
virtual void setMinimised (bool shouldBeMinimised) = 0;
@@ -255,7 +252,7 @@ public:
This may cause things like a virtual on-screen keyboard to appear, depending
on the OS.
*/
virtual void textInputRequired (int x, int y) = 0;
virtual void textInputRequired (const Point<int>& position) = 0;
/** Called when the window gains keyboard focus. */
void handleFocusGain();


+ 1
- 2
src/gui/components/windows/juce_ResizableWindow.cpp View File

@@ -475,8 +475,7 @@ bool ResizableWindow::restoreWindowStateFromString (const String& s)
if (newPos.isEmpty())
return false;
const Rectangle<int> screen (Desktop::getInstance().getMonitorAreaContaining (newPos.getCentreX(),
newPos.getCentreY()));
const Rectangle<int> screen (Desktop::getInstance().getMonitorAreaContaining (newPos.getCentre()));
ComponentPeer* const peer = isOnDesktop() ? getPeer() : 0;
if (peer != 0)


+ 11
- 16
src/gui/components/windows/juce_TooltipWindow.cpp View File

@@ -40,8 +40,6 @@ TooltipWindow::TooltipWindow (Component* const parentComponent,
const int millisecondsBeforeTipAppears_)
: Component ("tooltip"),
millisecondsBeforeTipAppears (millisecondsBeforeTipAppears_),
mouseX (0),
mouseY (0),
lastHideTime (0),
lastComponentUnderMouse (0),
changedCompsSinceShown (true)
@@ -80,24 +78,23 @@ void TooltipWindow::showFor (const String& tip)
jassert (tip.isNotEmpty());
tipShowing = tip;
int mx, my;
Desktop::getMousePosition (mx, my);
Point<int> mousePos (Desktop::getMousePosition());
if (getParentComponent() != 0)
getParentComponent()->globalPositionToRelative (mx, my);
mousePos = getParentComponent()->globalPositionToRelative (mousePos);
int x, y, w, h;
getLookAndFeel().getTooltipSize (tip, w, h);
if (mx > getParentWidth() / 2)
x = mx - (w + 12);
if (mousePos.getX() > getParentWidth() / 2)
x = mousePos.getX() - (w + 12);
else
x = mx + 24;
x = mousePos.getX() + 24;
if (my > getParentHeight() / 2)
y = my - (h + 6);
if (mousePos.getY() > getParentHeight() / 2)
y = mousePos.getY() - (h + 6);
else
y = my + 6;
y = mousePos.getY() + 6;
setBounds (x, y, w, h);
setVisible (true);
@@ -148,11 +145,9 @@ void TooltipWindow::timerCallback()
const bool mouseWasClicked = clickCount > mouseClicks;
mouseClicks = clickCount;
int mx, my;
Desktop::getMousePosition (mx, my);
const bool mouseMovedQuickly = (abs (mx - mouseX) + abs (my - mouseY) > 12);
mouseX = mx;
mouseY = my;
const Point<int> mousePos (Desktop::getMousePosition());
const bool mouseMovedQuickly = mousePos.getDistanceFrom (lastMousePos) > 12;
lastMousePos = mousePos;
if (tipChanged || mouseWasClicked || mouseMovedQuickly)
lastCompChangeTime = now;


+ 2
- 1
src/gui/components/windows/juce_TooltipWindow.h View File

@@ -100,7 +100,8 @@ public:
private:
//==============================================================================
int millisecondsBeforeTipAppears;
int mouseX, mouseY, mouseClicks;
Point<int> lastMousePos;
int mouseClicks;
unsigned int lastCompChangeTime, lastHideTime;
Component* lastComponentUnderMouse;
bool changedCompsSinceShown;


+ 5
- 6
src/gui/components/windows/juce_TopLevelWindow.cpp View File

@@ -291,22 +291,21 @@ void TopLevelWindow::centreAroundComponent (Component* c, const int width, const
}
else
{
int x = (c->getWidth() - width) / 2;
int y = (c->getHeight() - height) / 2;
c->relativePositionToGlobal (x, y);
Point<int> p (c->relativePositionToGlobal (Point<int> ((c->getWidth() - width) / 2,
(c->getHeight() - height) / 2)));
Rectangle<int> parentArea (c->getParentMonitorArea());
if (getParentComponent() != 0)
{
getParentComponent()->globalPositionToRelative (x, y);
p = getParentComponent()->globalPositionToRelative (p);
parentArea.setBounds (0, 0, getParentWidth(), getParentHeight());
}
parentArea.reduce (12, 12);
setBounds (jlimit (parentArea.getX(), jmax (parentArea.getX(), parentArea.getRight() - width), x),
jlimit (parentArea.getY(), jmax (parentArea.getY(), parentArea.getBottom() - height), y),
setBounds (jlimit (parentArea.getX(), jmax (parentArea.getX(), parentArea.getRight() - width), p.getX()),
jlimit (parentArea.getY(), jmax (parentArea.getY(), parentArea.getBottom() - height), p.getY()),
width, height);
}
}


+ 9
- 1
src/gui/graphics/geometry/juce_Point.h View File

@@ -65,6 +65,12 @@ public:
/** Returns the point's y co-ordinate. */
inline ValueType getY() const throw() { return y; }
inline bool operator== (const Point& other) const throw() { return x == other.x && y == other.y; }
inline bool operator!= (const Point& other) const throw() { return x != other.x || y != other.y; }
/** Returns true if the point is (0, 0). */
bool isOrigin() const throw() { return x == ValueType() && y == ValueType(); }
/** Changes the point's x and y co-ordinates. */
void setXY (const ValueType newX, const ValueType newY) throw() { x = newX; y = newY; }
@@ -83,13 +89,15 @@ public:
/** Subtracts another point's co-ordinates to this one. */
Point& operator-= (const Point& other) throw() { x -= other.x; y -= other.y; return *this; }
/** Returns the straight-line distance between this point and another one. */
ValueType getDistanceFrom (const Point& other) const throw() { return (ValueType) juce_hypot (x - other.x, y - other.y); }
/** Uses a transform to change the point's co-ordinates.
This will only compile if ValueType = float!
@see AffineTransform::transformPoint
*/
void applyTransform (const AffineTransform& transform) throw() { transform.transformPoint (x, y); }
//==============================================================================
juce_UseDebuggingNewOperator


+ 18
- 0
src/gui/graphics/geometry/juce_Rectangle.h View File

@@ -107,6 +107,8 @@ public:
/** Returns the y co-ordinate of the rectangle's centre. */
inline ValueType getCentreY() const throw() { return y + h / (ValueType) 2; }
inline const Point<ValueType> getCentre() const throw() { return Point<ValueType> (x + w / (ValueType) 2, y + h / (ValueType) 2); }
/** Returns true if the rectangle's width and height are both zero or less */
bool isEmpty() const throw() { return w <= 0 || h <= 0; }
@@ -114,6 +116,9 @@ public:
/** Returns the rectangle's top-left position as a Point. */
const Point<ValueType> getPosition() const throw() { return Point<ValueType> (x, y); }
/** Changes the position of the rectangle's top-left corner (leaving its size unchanged). */
void setPosition (const Point<ValueType>& newPos) throw() { x = newPos.getX(); y = newPos.getY(); }
/** Changes the position of the rectangle's top-left corner (leaving its size unchanged). */
void setPosition (const ValueType newX, const ValueType newY) throw() { x = newX; y = newY; }
@@ -256,6 +261,12 @@ public:
return xCoord >= x && yCoord >= y && xCoord < x + w && yCoord < y + h;
}
/** Returns true if this co-ordinate is inside the rectangle. */
bool contains (const Point<ValueType> point) const throw()
{
return point.getX() >= x && point.getY() >= y && point.getX() < x + w && point.getY() < y + h;
}
/** Returns true if this other rectangle is completely inside this one. */
bool contains (const Rectangle& other) const throw()
{
@@ -263,6 +274,13 @@ public:
&& x + w >= other.x + other.w && y + h >= other.y + other.h;
}
/** Returns the nearest point to the specified point that lies within this rectangle. */
const Point<ValueType> getConstrainedPoint (const Point<ValueType>& point) const throw()
{
return Point<ValueType> (jlimit (x, x + w, point.getX()),
jlimit (y, y + h, point.getY()));
}
/** Returns true if any part of another rectangle overlaps this one. */
bool intersects (const Rectangle& other) const throw()
{


+ 35
- 46
src/native/linux/juce_linux_Windowing.cpp View File

@@ -111,7 +111,7 @@ static const int eventMask = NoEventMask | KeyPressMask | KeyReleaseMask | Butto
//==============================================================================
static int pointerMap[5];
static int lastMousePosX = 0, lastMousePosY = 0;
static Point<int> lastMousePos;
enum MouseButtons
{
@@ -789,26 +789,19 @@ public:
h = wh;
}
int getScreenX() const
const Point<int> getScreenPosition() const
{
return wx;
return Point<int> (wx, wy);
}
int getScreenY() const
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition)
{
return wy;
return relativePosition + getScreenPosition();
}
void relativePositionToGlobal (int& x, int& y)
const Point<int> globalPositionToRelative (const Point<int>& screenPosition)
{
x += wx;
y += wy;
}
void globalPositionToRelative (int& x, int& y)
{
x -= wx;
y -= wy;
return screenPosition - getScreenPosition();
}
void setMinimised (bool shouldBeMinimised)
@@ -1091,7 +1084,7 @@ public:
}
}
void textInputRequired (int /*x*/, int /*y*/)
void textInputRequired (const Point<int>&)
{
}
@@ -1352,7 +1345,7 @@ public:
getEventTime (buttonPressEvent->time));
}
lastMousePosX = lastMousePosY = 0x100000;
lastMousePos = Point<int> (0x100000, 0x100000);
break;
}
@@ -1376,7 +1369,7 @@ public:
buttonRelEvent->x, buttonRelEvent->y,
getEventTime (buttonRelEvent->time));
lastMousePosX = lastMousePosY = 0x100000;
lastMousePos = Point<int> (0x100000, 0x100000);
break;
}
@@ -1386,13 +1379,11 @@ public:
updateKeyModifiers (movedEvent->state);
int x, y, mouseMods;
getMousePos (x, y, mouseMods);
Point<int> mousePos (Desktop::getMousePosition());
if (lastMousePosX != x || lastMousePosY != y)
if (lastMousePos != mousePos)
{
lastMousePosX = x;
lastMousePosY = y;
lastMousePos = mousePos;
if (parentWindow != 0 && (styleFlags & windowHasTitleBar) == 0)
{
@@ -1411,26 +1402,23 @@ public:
{
parentWindow = wParent;
updateBounds();
x -= getScreenX();
y -= getScreenY();
mousePos -= getScreenPosition();
}
else
{
parentWindow = 0;
x -= getScreenX();
y -= getScreenY();
mousePos -= getScreenPosition();
}
}
else
{
x -= getScreenX();
y -= getScreenY();
mousePos -= getScreenPosition();
}
if ((currentModifiers & ModifierKeys::allMouseButtonModifiers) == 0)
handleMouseMove (x, y, getEventTime (movedEvent->time));
handleMouseMove (mousePos.getX(), mousePos.getY(), getEventTime (movedEvent->time));
else
handleMouseDrag (x, y, getEventTime (movedEvent->time));
handleMouseDrag (mousePos.getX(), mousePos.getY(), getEventTime (movedEvent->time));
}
break;
@@ -1438,7 +1426,7 @@ public:
case EnterNotify:
{
lastMousePosX = lastMousePosY = 0x100000;
lastMousePos = Point<int> (0x100000, 0x100000);
const XEnterWindowEvent* const enterEvent = (const XEnterWindowEvent*) &event->xcrossing;
if ((currentModifiers & ModifierKeys::allMouseButtonModifiers) == 0
@@ -2336,7 +2324,7 @@ private:
void resetDragAndDrop()
{
dragAndDropFiles.clear();
lastDropX = lastDropY = -1;
lastDropPos = Point<int> (-1, -1);
dragAndDropCurrentMimeType = 0;
dragAndDropSourceWindow = 0;
srcMimeTypeAtomList.clear();
@@ -2401,14 +2389,13 @@ private:
dragAndDropSourceWindow = clientMsg->data.l[0];
const int dropX = ((int) clientMsg->data.l[2] >> 16) - getScreenX();
const int dropY = ((int) clientMsg->data.l[2] & 0xffff) - getScreenY();
Point<int> dropPos ((int) clientMsg->data.l[2] >> 16,
(int) clientMsg->data.l[2] & 0xffff);
dropPos -= getScreenPosition();
if (lastDropX != dropX || lastDropY != dropY)
if (lastDropPos != dropPos)
{
lastDropX = dropX;
lastDropY = dropY;
lastDropPos = dropPos;
dragAndDropTimestamp = clientMsg->data.l[3];
Atom targetAction = XA_XdndActionCopy;
@@ -2428,7 +2415,7 @@ private:
updateDraggedFileList (clientMsg);
if (dragAndDropFiles.size() > 0)
handleFileDragMove (dragAndDropFiles, dropX, dropY);
handleFileDragMove (dragAndDropFiles, dropPos.getX(), dropPos.getY());
}
}
@@ -2438,13 +2425,13 @@ private:
updateDraggedFileList (clientMsg);
const StringArray files (dragAndDropFiles);
const int lastX = lastDropX, lastY = lastDropY;
const Point<int> lastPos (lastDropPos);
sendDragAndDropFinish();
resetDragAndDrop();
if (files.size() > 0)
handleFileDragDrop (files, lastX, lastY);
handleFileDragDrop (files, lastPos.getX(), lastPos.getY());
}
void handleDragAndDropEnter (const XClientMessageEvent* const clientMsg)
@@ -2578,7 +2565,8 @@ private:
}
StringArray dragAndDropFiles;
int dragAndDropTimestamp, lastDropX, lastDropY;
int dragAndDropTimestamp;
Point<int> lastDropPos;
Atom XA_OtherMime, dragAndDropCurrentMimeType;
Window dragAndDropSourceWindow;
@@ -2737,17 +2725,18 @@ bool Desktop::canUseSemiTransparentWindows() throw()
return false;
}
void Desktop::getMousePosition (int& x, int& y) throw()
const Point<int> Desktop::getMousePosition()
{
int mouseMods;
int x, y, mouseMods;
getMousePos (x, y, mouseMods);
return Point<int> (x, y);
}
void Desktop::setMousePosition (int x, int y) throw()
void Desktop::setMousePosition (const Point<int>& newPosition)
{
ScopedXLock xlock;
Window root = RootWindow (display, DefaultScreen (display));
XWarpPointer (display, None, root, 0, 0, 0, 0, x, y);
XWarpPointer (display, None, root, 0, 0, 0, 0, newPosition.getX(), newPosition.getY());
}


+ 8
- 10
src/native/mac/juce_iphone_UIViewComponentPeer.mm View File

@@ -93,10 +93,9 @@ public:
void setBounds (int x, int y, int w, int h, const bool isNowFullScreen);
void getBounds (int& x, int& y, int& w, int& h, const bool global) const;
void getBounds (int& x, int& y, int& w, int& h) const;
int getScreenX() const;
int getScreenY() const;
void relativePositionToGlobal (int& x, int& y);
void globalPositionToRelative (int& x, int& y);
const Point<int> getScreenPosition() const;
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition);
const Point<int> globalPositionToRelative (const Point<int>& screenPosition);
void setMinimised (bool shouldBeMinimised);
bool isMinimised() const;
void setFullScreen (bool shouldBeFullScreen);
@@ -121,7 +120,7 @@ public:
virtual void viewFocusLoss();
bool isFocused() const;
void grabFocus();
void textInputRequired (int x, int y);
void textInputRequired (const Point<int>& position);
//==============================================================================
void repaint (int x, int y, int w, int h);
@@ -717,7 +716,7 @@ void UIViewComponentPeer::grabFocus()
}
}
void UIViewComponentPeer::textInputRequired (int /*x*/, int /*y*/)
void UIViewComponentPeer::textInputRequired (const Point<int>&)
{
}
@@ -817,13 +816,12 @@ bool Desktop::canUseSemiTransparentWindows() throw()
return true;
}
void Desktop::getMousePosition (int& x, int& y) throw()
const Point<int> Desktop::getMousePosition()
{
x = juce_lastMouseX;
y = juce_lastMouseY;
return Point<int> (juce_lastMouseX, juce_lastMouseY);
}
void Desktop::setMousePosition (int x, int y) throw()
void Desktop::setMousePosition (const Point<int>&)
{
}


+ 4
- 5
src/native/mac/juce_mac_MiscUtilities.mm View File

@@ -145,20 +145,19 @@ bool Desktop::canUseSemiTransparentWindows() throw()
return true;
}
void Desktop::getMousePosition (int& x, int& y) throw()
const Point<int> Desktop::getMousePosition()
{
const ScopedAutoReleasePool pool;
const NSPoint p ([NSEvent mouseLocation]);
x = roundToInt (p.x);
y = roundToInt ([[[NSScreen screens] objectAtIndex: 0] frame].size.height - p.y);
return Point<int> (roundToInt (p.x), roundToInt ([[[NSScreen screens] objectAtIndex: 0] frame].size.height - p.y));
}
void Desktop::setMousePosition (int x, int y) throw()
void Desktop::setMousePosition (const Point<int>& newPosition)
{
// this rubbish needs to be done around the warp call, to avoid causing a
// bizarre glitch..
CGAssociateMouseAndMouseCursorPosition (false);
CGWarpMouseCursorPosition (CGPointMake (x, y));
CGWarpMouseCursorPosition (CGPointMake (newPosition.getX(), newPosition.getY()));
CGAssociateMouseAndMouseCursorPosition (true);
}


+ 3
- 4
src/native/mac/juce_mac_NSViewComponent.mm View File

@@ -76,12 +76,11 @@ public:
if (topComp->getPeer() != 0)
{
int x = 0, y = 0;
owner->relativePositionToOtherComponent (topComp, x, y);
const Point<int> pos (owner->relativePositionToOtherComponent (topComp, Point<int>()));
NSRect r;
r.origin.x = (float) x;
r.origin.y = (float) y;
r.origin.x = (float) pos.getX();
r.origin.y = (float) pos.getY();
r.size.width = (float) owner->getWidth();
r.size.height = (float) owner->getHeight();
r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height);


+ 14
- 31
src/native/mac/juce_mac_NSViewComponentPeer.mm View File

@@ -135,10 +135,9 @@ public:
void setBounds (int x, int y, int w, int h, const bool isNowFullScreen);
void getBounds (int& x, int& y, int& w, int& h, const bool global) const;
void getBounds (int& x, int& y, int& w, int& h) const;
int getScreenX() const;
int getScreenY() const;
void relativePositionToGlobal (int& x, int& y);
void globalPositionToRelative (int& x, int& y);
const Point<int> getScreenPosition() const;
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition);
const Point<int> globalPositionToRelative (const Point<int>& screenPosition);
void setMinimised (bool shouldBeMinimised);
bool isMinimised() const;
void setFullScreen (bool shouldBeFullScreen);
@@ -199,7 +198,7 @@ public:
virtual void viewFocusLoss();
bool isFocused() const;
void grabFocus();
void textInputRequired (int x, int y);
void textInputRequired (const Point<int>& position);
//==============================================================================
void repaint (int x, int y, int w, int h);
@@ -858,34 +857,21 @@ void NSViewComponentPeer::getBounds (int& x, int& y, int& w, int& h) const
getBounds (x, y, w, h, ! isSharedWindow);
}
int NSViewComponentPeer::getScreenX() const
const Point<int> NSViewComponentPeer::getScreenPosition() const
{
int x, y, w, h;
getBounds (x, y, w, h, true);
return x;
return Point<int> (x, y);
}
int NSViewComponentPeer::getScreenY() const
const Point<int> NSViewComponentPeer::relativePositionToGlobal (const Point<int>& relativePosition)
{
int x, y, w, h;
getBounds (x, y, w, h, true);
return y;
}
void NSViewComponentPeer::relativePositionToGlobal (int& x, int& y)
{
int wx, wy, ww, wh;
getBounds (wx, wy, ww, wh, true);
x += wx;
y += wy;
return relativePosition + getScreenPosition();
}
void NSViewComponentPeer::globalPositionToRelative (int& x, int& y)
const Point<int> NSViewComponentPeer::globalPositionToRelative (const Point<int>& screenPosition)
{
int wx, wy, ww, wh;
getBounds (wx, wy, ww, wh, true);
x -= wx;
y -= wy;
return screenPosition - getScreenPosition();
}
NSRect NSViewComponentPeer::constrainRect (NSRect r)
@@ -1125,7 +1111,7 @@ void NSViewComponentPeer::grabFocus()
}
}
void NSViewComponentPeer::textInputRequired (int /*x*/, int /*y*/)
void NSViewComponentPeer::textInputRequired (const Point<int>&)
{
}
@@ -1288,13 +1274,10 @@ void NSViewComponentPeer::redirectMouseWheel (NSEvent* ev)
void NSViewComponentPeer::showArrowCursorIfNeeded()
{
if (Component::getComponentUnderMouse() == 0)
if (Component::getComponentUnderMouse() == 0
&& Desktop::getInstance().findComponentAt (Desktop::getInstance().getMousePosition()) == 0)
{
int mx, my;
Desktop::getInstance().getMousePosition (mx, my);
if (Desktop::getInstance().findComponentAt (mx, my) == 0)
[[NSCursor arrowCursor] set];
[[NSCursor arrowCursor] set];
}
}


+ 8
- 11
src/native/windows/juce_win32_ActiveXComponent.cpp View File

@@ -286,10 +286,9 @@ public:
if (topComp->getPeer() != 0)
{
int x = 0, y = 0;
owner->relativePositionToOtherComponent (topComp, x, y);
const Point<int> pos (owner->relativePositionToOtherComponent (topComp, Point<int>()));
owner->setControlBounds (Rectangle<int> (x, y, owner->getWidth(), owner->getHeight()));
owner->setControlBounds (Rectangle<int> (pos.getX(), pos.getY(), owner->getWidth(), owner->getHeight()));
}
}
@@ -452,9 +451,7 @@ bool ActiveXControlComponent::createControl (const void* controlIID)
if (dynamic_cast <Win32ComponentPeer*> (peer) != 0)
{
int x = 0, y = 0;
relativePositionToOtherComponent (getTopLevelComponent(), x, y);
const Point<int> pos (relativePositionToOtherComponent (getTopLevelComponent(), Point<int>()));
HWND hwnd = (HWND) peer->getNativeHandle();
ScopedPointer <ActiveXControlData> info (new ActiveXControlData (hwnd, this));
@@ -469,15 +466,15 @@ bool ActiveXControlComponent::createControl (const void* controlIID)
if (OleSetContainedObject (info->control, TRUE) == S_OK)
{
RECT rect;
rect.left = x;
rect.top = y;
rect.right = x + getWidth();
rect.bottom = y + getHeight();
rect.left = pos.getX();
rect.top = pos.getY();
rect.right = pos.getX() + getWidth();
rect.bottom = pos.getY() + getHeight();
if (info->control->DoVerb (OLEIVERB_SHOW, 0, info->clientSite, 0, hwnd, &rect) == S_OK)
{
control = info.release();
setControlBounds (Rectangle<int> (x, y, getWidth(), getHeight()));
setControlBounds (Rectangle<int> (pos.getX(), pos.getY(), getWidth(), getHeight()));
((ActiveXControlData*) control)->controlHWND = getHWND (this);


+ 22
- 41
src/native/windows/juce_win32_Windowing.cpp View File

@@ -590,36 +590,22 @@ public:
h -= windowBorder.getTopAndBottom();
}
int getScreenX() const
const Point<int> getScreenPosition() const
{
RECT r;
GetWindowRect (hwnd, &r);
return r.left + windowBorder.getLeft();
return Point<int> (r.left + windowBorder.getLeft(),
r.top + windowBorder.getTop());
}
int getScreenY() const
const Point<int> relativePositionToGlobal (const Point<int>& relativePosition)
{
RECT r;
GetWindowRect (hwnd, &r);
return r.top + windowBorder.getTop();
return relativePosition + getScreenPosition();
}
void relativePositionToGlobal (int& x, int& y)
const Point<int> globalPositionToRelative (const Point<int>& screenPosition)
{
RECT r;
GetWindowRect (hwnd, &r);
x += r.left + windowBorder.getLeft();
y += r.top + windowBorder.getTop();
}
void globalPositionToRelative (int& x, int& y)
{
RECT r;
GetWindowRect (hwnd, &r);
x -= r.left + windowBorder.getLeft();
y -= r.top + windowBorder.getTop();
return screenPosition - getScreenPosition();
}
void setMinimised (bool shouldBeMinimised)
@@ -779,7 +765,7 @@ public:
shouldDeactivateTitleBar = oldDeactivate;
}
void textInputRequired (int /*x*/, int /*y*/)
void textInputRequired (const Point<int>&)
{
if (! hasCreatedCaret)
{
@@ -1691,9 +1677,8 @@ private:
HRESULT __stdcall DragEnter (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect)
{
updateFileList (pDataObject);
int x = mousePos.x, y = mousePos.y;
owner->globalPositionToRelative (x, y);
owner->handleFileDragMove (files, x, y);
const Point<int> pos (owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y)));
owner->handleFileDragMove (files, pos.getX(), pos.getY());
*pdwEffect = DROPEFFECT_COPY;
return S_OK;
}
@@ -1706,9 +1691,8 @@ private:
HRESULT __stdcall DragOver (DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect)
{
int x = mousePos.x, y = mousePos.y;
owner->globalPositionToRelative (x, y);
owner->handleFileDragMove (files, x, y);
const Point<int> pos (owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y)));
owner->handleFileDragMove (files, pos.getX(), pos.getY());
*pdwEffect = DROPEFFECT_COPY;
return S_OK;
}
@@ -1716,9 +1700,8 @@ private:
HRESULT __stdcall Drop (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect)
{
updateFileList (pDataObject);
int x = mousePos.x, y = mousePos.y;
owner->globalPositionToRelative (x, y);
owner->handleFileDragDrop (files, x, y);
const Point<int> pos (owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y)));
owner->handleFileDragDrop (files, pos.getX(), pos.getY());
*pdwEffect = DROPEFFECT_COPY;
return S_OK;
}
@@ -2001,9 +1984,8 @@ private:
if (LOWORD (wParam) == WA_CLICKACTIVE
&& component->isCurrentlyBlockedByAnotherModalComponent())
{
int mx, my;
component->getMouseXYRelative (mx, my);
Component* const underMouse = component->getComponentAt (mx, my);
const Point<int> mousePos (component->getMouseXYRelative());
Component* const underMouse = component->getComponentAt (mousePos.getX(), mousePos.getY());
if (underMouse != 0 && underMouse->isCurrentlyBlockedByAnotherModalComponent())
Component::getCurrentlyModalComponent()->inputAttemptWhenModal();
@@ -2072,8 +2054,8 @@ private:
{
const int oldModifiers = currentModifiers;
MouseEvent e (0, 0, ModifierKeys::getCurrentModifiersRealtime(), component,
getMouseEventTime(), 0, 0, getMouseEventTime(), 1, false);
MouseEvent e (Point<int>(), ModifierKeys::getCurrentModifiersRealtime(), component,
getMouseEventTime(), Point<int>(), getMouseEventTime(), 1, false);
if (lParam == WM_LBUTTONDOWN || lParam == WM_LBUTTONDBLCLK)
e.mods = ModifierKeys (e.mods.getRawFlags() | ModifierKeys::leftButtonModifier);
@@ -2321,17 +2303,16 @@ bool AlertWindow::showNativeDialogBox (const String& title,
//==============================================================================
void Desktop::getMousePosition (int& x, int& y) throw()
const Point<int> Desktop::getMousePosition()
{
POINT mousePos;
GetCursorPos (&mousePos);
x = mousePos.x;
y = mousePos.y;
return Point<int> (mousePos.x, mousePos.y);
}
void Desktop::setMousePosition (int x, int y) throw()
void Desktop::setMousePosition (const Point<int>& newPosition)
{
SetCursorPos (x, y);
SetCursorPos (newPosition.getX(), newPosition.getY());
}
//==============================================================================


Loading…
Cancel
Save