| @@ -33,7 +33,7 @@ | |||
| //============================================================================== | |||
| class JucerApplication : public JUCEApplication | |||
| class JucerApplication : public JUCEApplication | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| @@ -76,18 +76,18 @@ public: | |||
| openFile (projects.getReference(i)); | |||
| } | |||
| #if JUCE_MAC | |||
| #if JUCE_MAC | |||
| MenuBarModel::setMacMainMenu (menuModel); | |||
| #endif | |||
| #endif | |||
| main->setVisible (true); | |||
| } | |||
| void shutdown() | |||
| { | |||
| #if JUCE_MAC | |||
| #if JUCE_MAC | |||
| MenuBarModel::setMacMainMenu (0); | |||
| #endif | |||
| #endif | |||
| menuModel = 0; | |||
| StoredSettings::deleteInstance(); | |||
| @@ -116,10 +116,10 @@ public: | |||
| jassert (mainWindows.contains (w)); | |||
| mainWindows.removeObject (w); | |||
| #if ! JUCE_MAC | |||
| #if ! JUCE_MAC | |||
| if (mainWindows.size() == 0) | |||
| systemRequestedQuit(); | |||
| #endif | |||
| #endif | |||
| updateRecentProjectList(); | |||
| } | |||
| @@ -137,11 +137,11 @@ public: | |||
| bool moreThanOneInstanceAllowed() | |||
| { | |||
| #ifndef JUCE_LINUX | |||
| #ifndef JUCE_LINUX | |||
| return false; | |||
| #else | |||
| #else | |||
| return true; //xxx should be false but doesn't work on linux.. | |||
| #endif | |||
| #endif | |||
| } | |||
| void anotherInstanceStarted (const String& commandLine) | |||
| @@ -105,12 +105,12 @@ public: | |||
| repaint(); | |||
| } | |||
| bool isInterestedInFileDrag (const StringArray& files) | |||
| bool isInterestedInFileDrag (const StringArray& /*files*/) | |||
| { | |||
| return true; | |||
| } | |||
| void filesDropped (const StringArray& files, int x, int y) | |||
| void filesDropped (const StringArray& files, int /*x*/, int /*y*/) | |||
| { | |||
| AudioDemoPlaybackPage* demoPage = findParentComponentOfClass ((AudioDemoPlaybackPage*) 0); | |||
| @@ -110,7 +110,7 @@ public: | |||
| sampleRate = 0; | |||
| } | |||
| void audioDeviceIOCallback (const float** inputChannelData, int numInputChannels, | |||
| void audioDeviceIOCallback (const float** inputChannelData, int /*numInputChannels*/, | |||
| float** outputChannelData, int numOutputChannels, | |||
| int numSamples) | |||
| { | |||
| @@ -34077,7 +34077,7 @@ public: | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (relativePositionToOtherComponent (topComp, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (this, Point<int>())); | |||
| recursiveResize = true; | |||
| @@ -40045,8 +40045,7 @@ Component::~Component() | |||
| { | |||
| parentComponent_->removeChildComponent (this); | |||
| } | |||
| else if ((currentlyFocusedComponent == this) | |||
| || isParentOf (currentlyFocusedComponent)) | |||
| else if (currentlyFocusedComponent == this || isParentOf (currentlyFocusedComponent)) | |||
| { | |||
| giveAwayFocus(); | |||
| } | |||
| @@ -40216,7 +40215,7 @@ void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo) | |||
| jmax (1, getHeight())); | |||
| #endif | |||
| const Point<int> topLeft (relativePositionToGlobal (Point<int> (0, 0))); | |||
| const Point<int> topLeft (getScreenPosition()); | |||
| bool wasFullscreen = false; | |||
| bool wasMinimised = false; | |||
| @@ -40555,7 +40554,7 @@ int Component::getScreenY() const | |||
| const Point<int> Component::getScreenPosition() const | |||
| { | |||
| return relativePositionToGlobal (Point<int>()); | |||
| return localPointToGlobal (Point<int>()); | |||
| } | |||
| const Rectangle<int> Component::getScreenBounds() const | |||
| @@ -40563,51 +40562,116 @@ const Rectangle<int> Component::getScreenBounds() const | |||
| return bounds_.withPosition (getScreenPosition()); | |||
| } | |||
| const Point<int> Component::relativePositionToGlobal (const Point<int>& relativePosition) const | |||
| { | |||
| return relativePositionToOtherComponent (0, relativePosition); | |||
| } | |||
| const Point<int> Component::globalPositionToRelative (const Point<int>& screenPosition) const | |||
| namespace CoordinateHelpers | |||
| { | |||
| if (flags.hasHeavyweightPeerFlag) | |||
| const Point<int> convertFromParentSpace (const Component* comp, const Point<int>& pointInParentSpace) | |||
| { | |||
| return getPeer()->globalPositionToRelative (screenPosition); | |||
| return pointInParentSpace - comp->getPosition(); | |||
| } | |||
| else | |||
| const Rectangle<int> convertFromParentSpace (const Component* comp, const Rectangle<int>& areaInParentSpace) | |||
| { | |||
| if (parentComponent_ != 0) | |||
| return parentComponent_->globalPositionToRelative (screenPosition) - getPosition(); | |||
| return areaInParentSpace - comp->getPosition(); | |||
| } | |||
| return screenPosition - getPosition(); | |||
| const Point<int> convertToParentSpace (const Component* comp, const Point<int>& pointInLocalSpace) | |||
| { | |||
| return pointInLocalSpace + comp->getPosition(); | |||
| } | |||
| } | |||
| const Point<int> Component::relativePositionToOtherComponent (const Component* const targetComponent, const Point<int>& positionRelativeToThis) const | |||
| { | |||
| Point<int> p (positionRelativeToThis); | |||
| const Component* c = this; | |||
| const Rectangle<int> convertToParentSpace (const Component* comp, const Rectangle<int>& areaInLocalSpace) | |||
| { | |||
| return areaInLocalSpace + comp->getPosition(); | |||
| } | |||
| do | |||
| template <typename Type> | |||
| const Type convertFromDistantParentSpace (const Component* parent, const Component* target, Type coordInParent) | |||
| { | |||
| if (c == targetComponent) | |||
| return p; | |||
| const Component* const directParent = target->getParentComponent(); | |||
| jassert (directParent != 0); | |||
| if (directParent == parent) | |||
| return convertFromParentSpace (target, coordInParent); | |||
| return convertFromParentSpace (target, convertFromDistantParentSpace (parent, directParent, coordInParent)); | |||
| } | |||
| if (c->flags.hasHeavyweightPeerFlag) | |||
| template <typename Type> | |||
| const Type convertCoordinate (const Component* target, const Component* source, Type p) | |||
| { | |||
| while (source != 0) | |||
| { | |||
| p = c->getPeer()->relativePositionToGlobal (p); | |||
| break; | |||
| if (source == target) | |||
| return p; | |||
| if (source->isParentOf (target)) | |||
| return convertFromDistantParentSpace (source, target, p); | |||
| if (source->isOnDesktop()) | |||
| { | |||
| p = source->getPeer()->localToGlobal (p); | |||
| source = 0; | |||
| } | |||
| else | |||
| { | |||
| p = convertToParentSpace (source, p); | |||
| source = source->getParentComponent(); | |||
| } | |||
| } | |||
| p += c->getPosition(); | |||
| c = c->parentComponent_; | |||
| jassert (source == 0); | |||
| if (target == 0) | |||
| return p; | |||
| const Component* const topLevelComp = target->getTopLevelComponent(); | |||
| if (topLevelComp->isOnDesktop()) | |||
| p = topLevelComp->getPeer()->globalToLocal (p); | |||
| else | |||
| p = convertFromParentSpace (topLevelComp, p); | |||
| if (topLevelComp == target) | |||
| return p; | |||
| return convertFromDistantParentSpace (topLevelComp, target, p); | |||
| } | |||
| while (c != 0); | |||
| } | |||
| if (targetComponent != 0) | |||
| p = targetComponent->globalPositionToRelative (p); | |||
| const Point<int> Component::getLocalPoint (const Component* source, const Point<int>& point) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (this, source, point); | |||
| } | |||
| return p; | |||
| const Rectangle<int> Component::getLocalArea (const Component* source, const Rectangle<int>& area) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (this, source, area); | |||
| } | |||
| const Point<int> Component::localPointToGlobal (const Point<int>& point) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (0, this, point); | |||
| } | |||
| const Rectangle<int> Component::localAreaToGlobal (const Rectangle<int>& area) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (0, this, area); | |||
| } | |||
| /* Deprecated methods... */ | |||
| const Point<int> Component::relativePositionToGlobal (const Point<int>& relativePosition) const | |||
| { | |||
| return localPointToGlobal (relativePosition); | |||
| } | |||
| const Point<int> Component::globalPositionToRelative (const Point<int>& screenPosition) const | |||
| { | |||
| return getLocalPoint (0, screenPosition); | |||
| } | |||
| const Point<int> Component::relativePositionToOtherComponent (const Component* const targetComponent, const Point<int>& positionRelativeToThis) const | |||
| { | |||
| return targetComponent == 0 ? localPointToGlobal (positionRelativeToThis) | |||
| : targetComponent->getLocalPoint (this, positionRelativeToThis); | |||
| } | |||
| void Component::setBounds (const int x, const int y, int w, int h) | |||
| @@ -41685,7 +41749,7 @@ void Component::getVisibleArea (RectangleList& result, const bool includeSibling | |||
| { | |||
| const Component* const c = getTopLevelComponent(); | |||
| c->subtractObscuredRegions (result, c->relativePositionToOtherComponent (this, Point<int>()), | |||
| c->subtractObscuredRegions (result, getLocalPoint (c, Point<int>()), | |||
| c->getLocalBounds(), this); | |||
| } | |||
| @@ -41896,7 +41960,7 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>& | |||
| { | |||
| flags.mouseInsideFlag = true; | |||
| flags.mouseOverFlag = true; | |||
| flags.draggingFlag = false; | |||
| flags.mouseDownFlag = false; | |||
| BailOutChecker checker (this); | |||
| @@ -41921,7 +41985,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r | |||
| { | |||
| BailOutChecker checker (this); | |||
| if (flags.draggingFlag) | |||
| if (flags.mouseDownFlag) | |||
| { | |||
| internalMouseUp (source, relativePos, time, source.getCurrentModifiers().getRawFlags()); | |||
| @@ -41933,7 +41997,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r | |||
| { | |||
| flags.mouseInsideFlag = false; | |||
| flags.mouseOverFlag = false; | |||
| flags.draggingFlag = false; | |||
| flags.mouseDownFlag = false; | |||
| if (flags.repaintOnMouseActivityFlag) | |||
| repaint(); | |||
| @@ -42059,7 +42123,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r | |||
| return; | |||
| } | |||
| flags.draggingFlag = true; | |||
| flags.mouseDownFlag = true; | |||
| flags.mouseOverFlag = true; | |||
| if (flags.repaintOnMouseActivityFlag) | |||
| @@ -42081,11 +42145,11 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r | |||
| void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers) | |||
| { | |||
| if (flags.draggingFlag) | |||
| if (flags.mouseDownFlag) | |||
| { | |||
| Desktop& desktop = Desktop::getInstance(); | |||
| flags.draggingFlag = false; | |||
| flags.mouseDownFlag = false; | |||
| BailOutChecker checker (this); | |||
| @@ -42094,7 +42158,7 @@ void Component::internalMouseUp (MouseInputSource& source, const Point<int>& rel | |||
| const MouseEvent me (source, relativePos, | |||
| oldModifiers, this, this, time, | |||
| globalPositionToRelative (source.getLastMouseDownPosition()), | |||
| getLocalPoint (0, source.getLastMouseDownPosition()), | |||
| source.getLastMouseDownTime(), | |||
| source.getNumberOfMultipleClicks(), | |||
| source.hasMouseMovedSignificantlySincePressed()); | |||
| @@ -42128,7 +42192,7 @@ void Component::internalMouseUp (MouseInputSource& source, const Point<int>& rel | |||
| void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& relativePos, const Time& time) | |||
| { | |||
| if (flags.draggingFlag) | |||
| if (flags.mouseDownFlag) | |||
| { | |||
| Desktop& desktop = Desktop::getInstance(); | |||
| @@ -42138,7 +42202,7 @@ void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& r | |||
| const MouseEvent me (source, relativePos, | |||
| source.getCurrentModifiers(), this, this, time, | |||
| globalPositionToRelative (source.getLastMouseDownPosition()), | |||
| getLocalPoint (0, source.getLastMouseDownPosition()), | |||
| source.getLastMouseDownTime(), | |||
| source.getNumberOfMultipleClicks(), | |||
| source.hasMouseMovedSignificantlySincePressed()); | |||
| @@ -42161,8 +42225,7 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r | |||
| BailOutChecker checker (this); | |||
| const MouseEvent me (source, relativePos, source.getCurrentModifiers(), | |||
| this, this, time, relativePos, | |||
| time, 0, false); | |||
| this, this, time, relativePos, time, 0, false); | |||
| if (isCurrentlyBlockedByAnotherModalComponent()) | |||
| { | |||
| @@ -42572,12 +42635,12 @@ bool Component::isMouseOver() const throw() | |||
| bool Component::isMouseButtonDown() const throw() | |||
| { | |||
| return flags.draggingFlag; | |||
| return flags.mouseDownFlag; | |||
| } | |||
| bool Component::isMouseOverOrDragging() const throw() | |||
| { | |||
| return flags.mouseOverFlag || flags.draggingFlag; | |||
| return flags.mouseOverFlag || flags.mouseDownFlag; | |||
| } | |||
| bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() throw() | |||
| @@ -42587,13 +42650,13 @@ bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() throw() | |||
| const Point<int> Component::getMouseXYRelative() const | |||
| { | |||
| return globalPositionToRelative (Desktop::getMousePosition()); | |||
| return getLocalPoint (0, Desktop::getMousePosition()); | |||
| } | |||
| const Rectangle<int> Component::getParentMonitorArea() const | |||
| { | |||
| return Desktop::getInstance() | |||
| .getMonitorAreaContaining (relativePositionToGlobal (getLocalBounds().getCentre())); | |||
| .getMonitorAreaContaining (localPointToGlobal (getLocalBounds().getCentre())); | |||
| } | |||
| void Component::addKeyListener (KeyListener* const newListener) | |||
| @@ -42800,7 +42863,7 @@ Component* Desktop::findComponentAt (const Point<int>& screenPosition) const | |||
| if (c->isVisible()) | |||
| { | |||
| const Point<int> relative (c->globalPositionToRelative (screenPosition)); | |||
| const Point<int> relative (c->getLocalPoint (0, screenPosition)); | |||
| if (c->contains (relative.getX(), relative.getY())) | |||
| return c->getComponentAt (relative.getX(), relative.getY()); | |||
| @@ -42941,7 +43004,7 @@ void Desktop::sendMouseMove() | |||
| if (target != 0) | |||
| { | |||
| Component::BailOutChecker checker (target); | |||
| const Point<int> pos (target->globalPositionToRelative (lastFakeMouseMove)); | |||
| const Point<int> pos (target->getLocalPoint (0, lastFakeMouseMove)); | |||
| const Time now (Time::getCurrentTime()); | |||
| const MouseEvent me (getMainMouseSource(), pos, ModifierKeys::getCurrentModifiers(), | |||
| @@ -49341,7 +49404,7 @@ const Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) | |||
| if (rowComp != 0 && isRowSelected (firstRow + i)) | |||
| { | |||
| const Point<int> pos (rowComp->relativePositionToOtherComponent (this, Point<int>())); | |||
| const Point<int> pos (getLocalPoint (rowComp, Point<int>())); | |||
| const Rectangle<int> rowRect (pos.getX(), pos.getY(), rowComp->getWidth(), rowComp->getHeight()); | |||
| imageArea = imageArea.getUnion (rowRect); | |||
| } | |||
| @@ -49358,7 +49421,7 @@ const Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) | |||
| if (rowComp != 0 && isRowSelected (firstRow + i)) | |||
| { | |||
| const Point<int> pos (rowComp->relativePositionToOtherComponent (this, Point<int>())); | |||
| const Point<int> pos (getLocalPoint (rowComp, Point<int>())); | |||
| Graphics g (snapshot); | |||
| g.setOrigin (pos.getX() - imageX, pos.getY() - imageY); | |||
| @@ -50634,8 +50697,8 @@ void Slider::restoreMouseIfHidden() | |||
| { | |||
| const int pixelPos = (int) getLinearSliderPos (pos); | |||
| mousePos = relativePositionToGlobal (Point<int> (isHorizontal() ? pixelPos : (getWidth() / 2), | |||
| isVertical() ? pixelPos : (getHeight() / 2))); | |||
| mousePos = localPointToGlobal (Point<int> (isHorizontal() ? pixelPos : (getWidth() / 2), | |||
| isVertical() ? pixelPos : (getHeight() / 2))); | |||
| } | |||
| Desktop::setMousePosition (mousePos); | |||
| @@ -56676,7 +56739,7 @@ TreeViewItem* TreeView::getItemAt (int y) const throw() | |||
| { | |||
| TreeViewContentComponent* const tc = static_cast <TreeViewContentComponent*> (viewport->getViewedComponent()); | |||
| Rectangle<int> pos; | |||
| return tc->findItemAt (relativePositionToOtherComponent (tc, Point<int> (0, y)).getY(), pos); | |||
| return tc->findItemAt (tc->getLocalPoint (this, Point<int> (0, y)).getY(), pos); | |||
| } | |||
| TreeViewItem* TreeView::findItemFromIdentifierString (const String& identifierString) const | |||
| @@ -62028,7 +62091,7 @@ void ComponentMovementWatcher::componentMovedOrResized (Component&, bool wasMove | |||
| if (wasMoved) | |||
| { | |||
| const Point<int> pos (component->relativePositionToOtherComponent (component->getTopLevelComponent(), Point<int>())); | |||
| const Point<int> pos (component->getTopLevelComponent()->getLocalPoint (component, Point<int>())); | |||
| wasMoved = lastBounds.getPosition() != pos; | |||
| lastBounds.setPosition (pos); | |||
| @@ -65059,6 +65122,9 @@ namespace LookAndFeelHelpers | |||
| return tl; | |||
| } | |||
| LookAndFeel* defaultLF = 0; | |||
| LookAndFeel* currentDefaultLF = 0; | |||
| } | |||
| LookAndFeel::LookAndFeel() | |||
| @@ -65212,6 +65278,8 @@ LookAndFeel::LookAndFeel() | |||
| LookAndFeel::~LookAndFeel() | |||
| { | |||
| if (this == LookAndFeelHelpers::currentDefaultLF) | |||
| setDefaultLookAndFeel (0); | |||
| } | |||
| const Colour LookAndFeel::findColour (const int colourId) const throw() | |||
| @@ -65245,21 +65313,20 @@ bool LookAndFeel::isColourSpecified (const int colourId) const throw() | |||
| return colourIds.contains (colourId); | |||
| } | |||
| static LookAndFeel* defaultLF = 0; | |||
| static LookAndFeel* currentDefaultLF = 0; | |||
| LookAndFeel& LookAndFeel::getDefaultLookAndFeel() throw() | |||
| { | |||
| // if this happens, your app hasn't initialised itself properly.. if you're | |||
| // trying to hack your own main() function, have a look at | |||
| // JUCEApplication::initialiseForGUI() | |||
| jassert (currentDefaultLF != 0); | |||
| jassert (LookAndFeelHelpers::currentDefaultLF != 0); | |||
| return *currentDefaultLF; | |||
| return *LookAndFeelHelpers::currentDefaultLF; | |||
| } | |||
| void LookAndFeel::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) throw() | |||
| { | |||
| using namespace LookAndFeelHelpers; | |||
| if (newDefaultLookAndFeel == 0) | |||
| { | |||
| if (defaultLF == 0) | |||
| @@ -65268,7 +65335,7 @@ void LookAndFeel::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) thr | |||
| newDefaultLookAndFeel = defaultLF; | |||
| } | |||
| currentDefaultLF = newDefaultLookAndFeel; | |||
| LookAndFeelHelpers::currentDefaultLF = newDefaultLookAndFeel; | |||
| for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;) | |||
| { | |||
| @@ -65281,6 +65348,8 @@ void LookAndFeel::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) thr | |||
| void LookAndFeel::clearDefaultLookAndFeel() throw() | |||
| { | |||
| using namespace LookAndFeelHelpers; | |||
| if (currentDefaultLF == defaultLF) | |||
| currentDefaultLF = 0; | |||
| @@ -69481,7 +69550,7 @@ public: | |||
| // move rather than a real timer callback | |||
| const Point<int> globalMousePos (Desktop::getMousePosition()); | |||
| const Point<int> localMousePos (globalPositionToRelative (globalMousePos)); | |||
| const Point<int> localMousePos (getLocalPoint (0, globalMousePos)); | |||
| const uint32 now = Time::getMillisecondCounter(); | |||
| @@ -69649,7 +69718,7 @@ private: | |||
| void updateMouseOverStatus (const Point<int>& globalMousePos) | |||
| { | |||
| const Point<int> relPos (globalPositionToRelative (globalMousePos)); | |||
| const Point<int> relPos (getLocalPoint (0, globalMousePos)); | |||
| isOver = reallyContains (relPos.getX(), relPos.getY(), true); | |||
| if (activeSubMenu != 0) | |||
| @@ -70633,7 +70702,7 @@ void ComponentDragger::startDraggingComponent (Component* const componentToDrag, | |||
| if (componentToDrag != 0) | |||
| { | |||
| constrainer = constrainer_; | |||
| originalPos = componentToDrag->relativePositionToGlobal (Point<int>()); | |||
| originalPos = componentToDrag->localPointToGlobal (Point<int>()); | |||
| } | |||
| } | |||
| @@ -70648,7 +70717,7 @@ void ComponentDragger::dragComponent (Component* const componentToDrag, const Mo | |||
| const Component* const parentComp = componentToDrag->getParentComponent(); | |||
| if (parentComp != 0) | |||
| bounds.setPosition (parentComp->globalPositionToRelative (originalPos)); | |||
| bounds.setPosition (parentComp->getLocalPoint (0, originalPos)); | |||
| bounds.setPosition (bounds.getPosition() + e.getOffsetFromDragStart()); | |||
| @@ -70737,7 +70806,7 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const Point<int> relPos (hit->globalPositionToRelative (screenPos)); | |||
| const Point<int> relPos (hit->getLocalPoint (0, screenPos)); | |||
| hit = hit->getComponentAt (relPos.getX(), relPos.getY()); | |||
| } | |||
| @@ -70751,7 +70820,7 @@ public: | |||
| if (ddt != 0 && ddt->isInterestedInDragSource (dragDescLocal, source)) | |||
| { | |||
| relativePos = hit->globalPositionToRelative (screenPos); | |||
| relativePos = hit->getLocalPoint (0, screenPos); | |||
| return ddt; | |||
| } | |||
| @@ -70789,8 +70858,8 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const Point<int> target (source->relativePositionToGlobal (source->getLocalBounds().getCentre())); | |||
| const Point<int> ourCentre (relativePositionToGlobal (getLocalBounds().getCentre())); | |||
| const Point<int> target (source->localPointToGlobal (source->getLocalBounds().getCentre())); | |||
| const Point<int> ourCentre (localPointToGlobal (getLocalBounds().getCentre())); | |||
| Desktop::getInstance().getAnimator().animateComponent (this, | |||
| getBounds() + (target - ourCentre), | |||
| @@ -70826,7 +70895,7 @@ public: | |||
| Point<int> newPos (screenPos + imageOffset); | |||
| if (getParentComponent() != 0) | |||
| newPos = getParentComponent()->globalPositionToRelative (newPos); | |||
| newPos = getParentComponent()->getLocalPoint (0, newPos); | |||
| //if (newX != getX() || newY != getY()) | |||
| { | |||
| @@ -70972,7 +71041,7 @@ void DragAndDropContainer::startDragging (const String& sourceDescription, | |||
| const int lo = 150; | |||
| const int hi = 400; | |||
| Point<int> relPos (sourceComponent->globalPositionToRelative (lastMouseDown)); | |||
| Point<int> relPos (sourceComponent->getLocalPoint (0, lastMouseDown)); | |||
| Point<int> clipped (dragImage.getBounds().getConstrainedPoint (relPos)); | |||
| for (int y = dragImage.getHeight(); --y >= 0;) | |||
| @@ -71276,9 +71345,9 @@ const MouseEvent MouseEvent::getEventRelativeTo (Component* const otherComponent | |||
| return *this; | |||
| } | |||
| return MouseEvent (source, eventComponent->relativePositionToOtherComponent (otherComponent, getPosition()), | |||
| return MouseEvent (source, otherComponent->getLocalPoint (eventComponent, getPosition()), | |||
| mods, otherComponent, originalComponent, eventTime, | |||
| eventComponent->relativePositionToOtherComponent (otherComponent, mouseDownPos), | |||
| otherComponent->getLocalPoint (eventComponent, mouseDownPos), | |||
| mouseDownTime, numberOfClicks, wasMovedSinceMouseDown); | |||
| } | |||
| @@ -71354,7 +71423,7 @@ int MouseEvent::getScreenY() const | |||
| const Point<int> MouseEvent::getScreenPosition() const | |||
| { | |||
| return eventComponent->relativePositionToGlobal (Point<int> (x, y)); | |||
| return eventComponent->localPointToGlobal (Point<int> (x, y)); | |||
| } | |||
| int MouseEvent::getMouseDownScreenX() const | |||
| @@ -71369,7 +71438,7 @@ int MouseEvent::getMouseDownScreenY() const | |||
| const Point<int> MouseEvent::getMouseDownScreenPosition() const | |||
| { | |||
| return eventComponent->relativePositionToGlobal (mouseDownPos); | |||
| return eventComponent->localPointToGlobal (mouseDownPos); | |||
| } | |||
| int MouseEvent::doubleClickTimeOutMs = 400; | |||
| @@ -71400,7 +71469,6 @@ public: | |||
| isUnboundedMouseModeOn (false), isCursorVisibleUntilOffscreen (false), currentCursorHandle (0), | |||
| mouseEventCounter (0), lastTime (0) | |||
| { | |||
| zerostruct (mouseDowns); | |||
| } | |||
| ~MouseInputSourceInternal() | |||
| @@ -71437,7 +71505,7 @@ public: | |||
| if (peer != 0) | |||
| { | |||
| Component* const comp = peer->getComponent(); | |||
| const Point<int> relativePos (comp->globalPositionToRelative (screenPos)); | |||
| const Point<int> relativePos (comp->getLocalPoint (0, screenPos)); | |||
| // (the contains() call is needed to test for overlapping desktop windows) | |||
| if (comp->contains (relativePos.getX(), relativePos.getY())) | |||
| @@ -71454,44 +71522,44 @@ public: | |||
| void sendMouseEnter (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " enter: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseEnter (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " enter: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseEnter (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseExit (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " exit: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseExit (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " exit: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseExit (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseMove (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " move: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseMove (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " move: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseMove (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseDown (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " down: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDown (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " down: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDown (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseDrag (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " drag: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDrag (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " drag: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDrag (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseUp (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " up: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseUp (source, comp->globalPositionToRelative (screenPos), time, getCurrentModifiers()); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " up: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseUp (source, comp->getLocalPoint (0, screenPos), time, getCurrentModifiers()); | |||
| } | |||
| void sendMouseWheel (Component* const comp, const Point<int>& screenPos, const int64 time, float x, float y) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " wheel: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseWheel (source, comp->globalPositionToRelative (screenPos), time, x, y); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " wheel: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseWheel (source, comp->getLocalPoint (0, screenPos), time, x, y); | |||
| } | |||
| // (returns true if the button change caused a modal event loop) | |||
| @@ -71615,7 +71683,7 @@ public: | |||
| jassert (newPeer != 0); | |||
| lastTime = time; | |||
| ++mouseEventCounter; | |||
| const Point<int> screenPos (newPeer->relativePositionToGlobal (positionWithinPeer)); | |||
| const Point<int> screenPos (newPeer->localToGlobal (positionWithinPeer)); | |||
| if (isDragging() && newMods.isAnyMouseButtonDown()) | |||
| { | |||
| @@ -71643,7 +71711,7 @@ public: | |||
| jassert (peer != 0); | |||
| lastTime = time; | |||
| ++mouseEventCounter; | |||
| const Point<int> screenPos (peer->relativePositionToGlobal (positionWithinPeer)); | |||
| const Point<int> screenPos (peer->localToGlobal (positionWithinPeer)); | |||
| setPeer (peer, screenPos, time); | |||
| setScreenPos (screenPos, time, false); | |||
| @@ -71678,7 +71746,7 @@ public: | |||
| for (int i = 1; i < numElementsInArray (mouseDowns); ++i) | |||
| { | |||
| if (mouseDowns[0].canBePartOfMultipleClickWith (mouseDowns[1], (int) (MouseEvent::getDoubleClickTimeout() * (1.0 + 0.25 * (i - 1))))) | |||
| if (mouseDowns[0].canBePartOfMultipleClickWith (mouseDowns[i], (int) (MouseEvent::getDoubleClickTimeout() * (1.0 + 0.25 * (i - 1))))) | |||
| ++numClicks; | |||
| else | |||
| break; | |||
| @@ -71794,6 +71862,11 @@ private: | |||
| struct RecentMouseDown | |||
| { | |||
| RecentMouseDown() | |||
| : time (0), component (0) | |||
| { | |||
| } | |||
| Point<int> position; | |||
| int64 time; | |||
| Component* component; | |||
| @@ -74035,9 +74108,9 @@ void BubbleComponent::setPosition (Component* componentToPointTo) | |||
| Point<int> pos; | |||
| if (getParentComponent() != 0) | |||
| pos = componentToPointTo->relativePositionToOtherComponent (getParentComponent(), pos); | |||
| pos = getParentComponent()->getLocalPoint (componentToPointTo, pos); | |||
| else | |||
| pos = componentToPointTo->relativePositionToGlobal (pos); | |||
| pos = componentToPointTo->localPointToGlobal (pos); | |||
| setPosition (Rectangle<int> (pos.getX(), pos.getY(), componentToPointTo->getWidth(), componentToPointTo->getHeight())); | |||
| } | |||
| @@ -75173,16 +75246,16 @@ public: | |||
| return magnifierComp->getScreenPosition(); | |||
| } | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| const double zoom = magnifierComp->getScaleFactor(); | |||
| return magnifierComp->relativePositionToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom), | |||
| roundToInt (relativePosition.getY() * zoom))); | |||
| return magnifierComp->localPointToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom), | |||
| roundToInt (relativePosition.getY() * zoom))); | |||
| } | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| const Point<int> p (magnifierComp->globalPositionToRelative (screenPosition)); | |||
| const Point<int> p (magnifierComp->getLocalPoint (0, screenPosition)); | |||
| const double zoom = magnifierComp->getScaleFactor(); | |||
| return Point<int> (roundToInt (p.getX() / zoom), | |||
| @@ -77376,8 +77449,7 @@ CallOutBox::CallOutBox (Component& contentComponent, | |||
| { | |||
| parentComponent->addChildComponent (this); | |||
| updatePosition (componentToPointTo.getLocalBounds() | |||
| + componentToPointTo.relativePositionToOtherComponent (parentComponent, Point<int>()), | |||
| updatePosition (parentComponent->getLocalArea (&componentToPointTo, componentToPointTo.getLocalBounds()), | |||
| parentComponent->getLocalBounds()); | |||
| setVisible (true); | |||
| @@ -77953,6 +78025,16 @@ const Rectangle<int>& ComponentPeer::getNonFullScreenBounds() const throw() | |||
| return lastNonFullscreenBounds; | |||
| } | |||
| const Rectangle<int> ComponentPeer::localToGlobal (const Rectangle<int>& relativePosition) | |||
| { | |||
| return relativePosition.withPosition (localToGlobal (relativePosition.getPosition())); | |||
| } | |||
| const Rectangle<int> ComponentPeer::globalToLocal (const Rectangle<int>& screenPosition) | |||
| { | |||
| return screenPosition.withPosition (globalToLocal (screenPosition.getPosition())); | |||
| } | |||
| namespace ComponentPeerHelpers | |||
| { | |||
| FileDragAndDropTarget* findDragAndDropTarget (Component* c, | |||
| @@ -77999,7 +78081,7 @@ void ComponentPeer::handleFileDragMove (const StringArray& files, const Point<in | |||
| if (newTarget != 0) | |||
| { | |||
| dragAndDropTargetComponent = dynamic_cast <Component*> (newTarget); | |||
| const Point<int> pos (component->relativePositionToOtherComponent (dragAndDropTargetComponent, position)); | |||
| const Point<int> pos (dragAndDropTargetComponent->getLocalPoint (component, position)); | |||
| newTarget->fileDragEnter (files, pos.getX(), pos.getY()); | |||
| } | |||
| } | |||
| @@ -78012,7 +78094,7 @@ void ComponentPeer::handleFileDragMove (const StringArray& files, const Point<in | |||
| if (newTarget != 0) | |||
| { | |||
| Component* const targetComp = dynamic_cast <Component*> (newTarget); | |||
| const Point<int> pos (component->relativePositionToOtherComponent (targetComp, position)); | |||
| const Point<int> pos (targetComp->getLocalPoint (component, position)); | |||
| newTarget->fileDragMove (files, pos.getX(), pos.getY()); | |||
| } | |||
| @@ -78050,7 +78132,7 @@ void ComponentPeer::handleFileDragDrop (const StringArray& files, const Point<in | |||
| return; | |||
| } | |||
| const Point<int> pos (component->relativePositionToOtherComponent (targetComp, position)); | |||
| const Point<int> pos (targetComp->getLocalPoint (component, position)); | |||
| target->filesDropped (files, pos.getX(), pos.getY()); | |||
| } | |||
| } | |||
| @@ -79270,7 +79352,7 @@ void TooltipWindow::showFor (const String& tip) | |||
| Point<int> mousePos (Desktop::getMousePosition()); | |||
| if (getParentComponent() != 0) | |||
| mousePos = getParentComponent()->globalPositionToRelative (mousePos); | |||
| mousePos = getParentComponent()->getLocalPoint (0, mousePos); | |||
| int x, y, w, h; | |||
| getLookAndFeel().getTooltipSize (tip, w, h); | |||
| @@ -79629,21 +79711,19 @@ void TopLevelWindow::centreAroundComponent (Component* c, const int width, const | |||
| } | |||
| else | |||
| { | |||
| Point<int> p (c->relativePositionToGlobal (Point<int> ((c->getWidth() - width) / 2, | |||
| (c->getHeight() - height) / 2))); | |||
| Point<int> targetCentre (c->localPointToGlobal (c->getLocalBounds().getCentre())); | |||
| Rectangle<int> parentArea (c->getParentMonitorArea()); | |||
| if (getParentComponent() != 0) | |||
| { | |||
| p = getParentComponent()->globalPositionToRelative (p); | |||
| parentArea.setBounds (0, 0, getParentWidth(), getParentHeight()); | |||
| targetCentre = getParentComponent()->getLocalPoint (0, targetCentre); | |||
| parentArea = getParentComponent()->getLocalBounds(); | |||
| } | |||
| parentArea.reduce (12, 12); | |||
| setBounds (jlimit (parentArea.getX(), jmax (parentArea.getX(), parentArea.getRight() - width), p.getX()), | |||
| jlimit (parentArea.getY(), jmax (parentArea.getY(), parentArea.getBottom() - height), p.getY()), | |||
| setBounds (jlimit (parentArea.getX(), jmax (parentArea.getX(), parentArea.getRight() - width), targetCentre.getX() - width / 2), | |||
| jlimit (parentArea.getY(), jmax (parentArea.getY(), parentArea.getBottom() - height), targetCentre.getY() - height / 2), | |||
| width, height); | |||
| } | |||
| } | |||
| @@ -242097,12 +242177,12 @@ public: | |||
| r.top + windowBorder.getTop()); | |||
| } | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -243179,7 +243259,7 @@ private: | |||
| HRESULT __stdcall DragEnter (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) | |||
| { | |||
| updateFileList (pDataObject); | |||
| owner->handleFileDragMove (files, owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y))); | |||
| owner->handleFileDragMove (files, owner->globalToLocal (Point<int> (mousePos.x, mousePos.y))); | |||
| *pdwEffect = DROPEFFECT_COPY; | |||
| return S_OK; | |||
| } | |||
| @@ -243192,7 +243272,7 @@ private: | |||
| HRESULT __stdcall DragOver (DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) | |||
| { | |||
| owner->handleFileDragMove (files, owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y))); | |||
| owner->handleFileDragMove (files, owner->globalToLocal (Point<int> (mousePos.x, mousePos.y))); | |||
| *pdwEffect = DROPEFFECT_COPY; | |||
| return S_OK; | |||
| } | |||
| @@ -243200,7 +243280,7 @@ private: | |||
| HRESULT __stdcall Drop (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) | |||
| { | |||
| updateFileList (pDataObject); | |||
| owner->handleFileDragDrop (files, owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y))); | |||
| owner->handleFileDragDrop (files, owner->globalToLocal (Point<int> (mousePos.x, mousePos.y))); | |||
| *pdwEffect = DROPEFFECT_COPY; | |||
| return S_OK; | |||
| } | |||
| @@ -244927,8 +245007,7 @@ public: | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (owner.relativePositionToOtherComponent (topComp, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (&owner, Point<int>())); | |||
| owner.setControlBounds (Rectangle<int> (pos.getX(), pos.getY(), owner.getWidth(), owner.getHeight())); | |||
| } | |||
| } | |||
| @@ -245027,7 +245106,7 @@ bool ActiveXControlComponent::createControl (const void* controlIID) | |||
| if (dynamic_cast <Win32ComponentPeer*> (peer) != 0) | |||
| { | |||
| const Point<int> pos (relativePositionToOtherComponent (getTopLevelComponent(), Point<int>())); | |||
| const Point<int> pos (getTopLevelComponent()->getLocalPoint (this, Point<int>())); | |||
| HWND hwnd = (HWND) peer->getNativeHandle(); | |||
| ScopedPointer<Pimpl> newControl (new Pimpl (hwnd, *this)); | |||
| @@ -258534,12 +258613,12 @@ public: | |||
| const Rectangle<int> getBounds() const { return Rectangle<int> (wx, wy, ww, wh); } | |||
| const Point<int> getScreenPosition() const { return Point<int> (wx, wy); } | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -267493,8 +267572,8 @@ public: | |||
| const Rectangle<int> getBounds() const; | |||
| const Rectangle<int> getBounds (const bool global) const; | |||
| const Point<int> getScreenPosition() const; | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition); | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition); | |||
| void setAlpha (float newAlpha); | |||
| void setMinimised (bool shouldBeMinimised); | |||
| bool isMinimised() const; | |||
| @@ -267910,12 +267989,12 @@ const Point<int> UIViewComponentPeer::getScreenPosition() const | |||
| return getBounds (true).getPosition(); | |||
| } | |||
| const Point<int> UIViewComponentPeer::relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> UIViewComponentPeer::localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> UIViewComponentPeer::globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> UIViewComponentPeer::globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -268232,7 +268311,7 @@ void UIViewComponentPeer::globalFocusChanged (Component*) | |||
| { | |||
| Component* comp = dynamic_cast<Component*> (target); | |||
| Point<int> pos (comp->relativePositionToOtherComponent (component, Point<int>())); | |||
| Point<int> pos (component->getLocalPoint (comp, Point<int>())); | |||
| view->hiddenTextView.frame = CGRectMake (pos.getX(), pos.getY(), 0, 0); | |||
| updateHiddenTextContent (target); | |||
| @@ -269535,6 +269614,14 @@ public: | |||
| [webView reload: nil]; | |||
| } | |||
| void mouseMove (const MouseEvent&) | |||
| { | |||
| // WebKit doesn't capture mouse-moves itself, so it seems the only way to make | |||
| // them work is to push them via this non-public method.. | |||
| if ([webView respondsToSelector: @selector (_updateMouseoverWithFakeEvent)]) | |||
| [webView performSelector: @selector (_updateMouseoverWithFakeEvent)]; | |||
| } | |||
| private: | |||
| WebView* webView; | |||
| DownloadClickDetector* clickListener; | |||
| @@ -272270,8 +272357,8 @@ public: | |||
| const Rectangle<int> getBounds (const bool global) const; | |||
| const Rectangle<int> getBounds() const; | |||
| const Point<int> getScreenPosition() const; | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition); | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition); | |||
| void setAlpha (float newAlpha); | |||
| void setMinimised (bool shouldBeMinimised); | |||
| bool isMinimised() const; | |||
| @@ -273145,12 +273232,12 @@ const Point<int> NSViewComponentPeer::getScreenPosition() const | |||
| return getBounds (true).getPosition(); | |||
| } | |||
| const Point<int> NSViewComponentPeer::relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> NSViewComponentPeer::localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> NSViewComponentPeer::globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> NSViewComponentPeer::globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -274050,7 +274137,7 @@ public: | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (owner->relativePositionToOtherComponent (topComp, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (owner, Point<int>())); | |||
| NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner->getWidth(), (float) owner->getHeight()); | |||
| r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height); | |||
| @@ -277330,6 +277417,14 @@ public: | |||
| [webView reload: nil]; | |||
| } | |||
| void mouseMove (const MouseEvent&) | |||
| { | |||
| // WebKit doesn't capture mouse-moves itself, so it seems the only way to make | |||
| // them work is to push them via this non-public method.. | |||
| if ([webView respondsToSelector: @selector (_updateMouseoverWithFakeEvent)]) | |||
| [webView performSelector: @selector (_updateMouseoverWithFakeEvent)]; | |||
| } | |||
| private: | |||
| WebView* webView; | |||
| DownloadClickDetector* clickListener; | |||
| @@ -64,7 +64,7 @@ | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 52 | |||
| #define JUCE_BUILDNUMBER 87 | |||
| #define JUCE_BUILDNUMBER 88 | |||
| /** Current Juce version number. | |||
| @@ -6468,18 +6468,6 @@ public: | |||
| return referencedObject; | |||
| } | |||
| /** Returns true if this pointer refers to the given object. */ | |||
| inline bool operator== (ReferenceCountedObjectClass* const object) const throw() | |||
| { | |||
| return referencedObject == object; | |||
| } | |||
| /** Returns true if this pointer doesn't refer to the given object. */ | |||
| inline bool operator!= (ReferenceCountedObjectClass* const object) const throw() | |||
| { | |||
| return referencedObject != object; | |||
| } | |||
| // the -> operator is called on the referenced object | |||
| inline ReferenceCountedObjectClass* operator->() const throw() | |||
| { | |||
| @@ -6499,6 +6487,48 @@ private: | |||
| ReferenceCountedObjectClass* referencedObject; | |||
| }; | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, ReferenceCountedObjectClass* const object2) throw() | |||
| { | |||
| return object1.getObject() == object2; | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1.getObject() == object2.getObject(); | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator== (ReferenceCountedObjectClass* object1, ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1 == object2.getObject(); | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectClass* object2) throw() | |||
| { | |||
| return object1.getObject() != object2; | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1.getObject() != object2.getObject(); | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator!= (ReferenceCountedObjectClass* object1, ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1 != object2.getObject(); | |||
| } | |||
| #endif // __JUCE_REFERENCECOUNTEDOBJECT_JUCEHEADER__ | |||
| /*** End of inlined file: juce_ReferenceCountedObject.h ***/ | |||
| @@ -12545,7 +12575,7 @@ public: | |||
| void callChecked (const BailOutCheckerType& bailOutChecker, | |||
| void (ListenerClass::*callbackFunction) ()) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (); | |||
| } | |||
| @@ -12553,7 +12583,7 @@ public: | |||
| template <LL_TEMPLATE(1)> | |||
| void call (void (ListenerClass::*callbackFunction) (P1), LL_PARAM(1)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1); | |||
| } | |||
| @@ -12564,7 +12594,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1), | |||
| LL_PARAM(1)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1); | |||
| } | |||
| @@ -12573,7 +12603,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2), | |||
| LL_PARAM(1), LL_PARAM(2)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2); | |||
| } | |||
| @@ -12584,7 +12614,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2), | |||
| LL_PARAM(1), LL_PARAM(2)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2); | |||
| } | |||
| @@ -12593,7 +12623,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2, P3), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3); | |||
| } | |||
| @@ -12604,7 +12634,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2, P3), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3); | |||
| } | |||
| @@ -12613,7 +12643,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2, P3, P4), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4); | |||
| } | |||
| @@ -12624,7 +12654,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2, P3, P4), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4); | |||
| } | |||
| @@ -12633,7 +12663,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4), LL_PARAM(5)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5); | |||
| } | |||
| @@ -12644,7 +12674,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4), LL_PARAM(5)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5); | |||
| } | |||
| @@ -12663,15 +12693,15 @@ public: | |||
| { | |||
| public: | |||
| Iterator (const ListType& list_, const BailOutCheckerType& bailOutChecker_) | |||
| : list (list_), bailOutChecker (bailOutChecker_), index (list_.size()) | |||
| Iterator (const ListType& list_) | |||
| : list (list_), index (list_.size()) | |||
| {} | |||
| ~Iterator() {} | |||
| bool next() | |||
| { | |||
| if (index <= 0 || bailOutChecker.shouldBailOut()) | |||
| if (index <= 0) | |||
| return false; | |||
| const int listSize = list.size(); | |||
| @@ -12683,6 +12713,11 @@ public: | |||
| return index >= 0; | |||
| } | |||
| bool next (const BailOutCheckerType& bailOutChecker) | |||
| { | |||
| return (! bailOutChecker.shouldBailOut()) && next(); | |||
| } | |||
| typename ListType::ListenerType* getListener() const throw() | |||
| { | |||
| return list.getListeners().getUnchecked (index); | |||
| @@ -12690,7 +12725,6 @@ public: | |||
| private: | |||
| const ListType& list; | |||
| const BailOutCheckerType& bailOutChecker; | |||
| int index; | |||
| Iterator (const Iterator&); | |||
| @@ -26044,7 +26078,7 @@ public: | |||
| /** Destructor. | |||
| Note that when a component is deleted, any child components it contain are NOT | |||
| Note that when a component is deleted, any child components it contains are NOT | |||
| automatically deleted. It's your responsibilty to manage their lifespan - you | |||
| may want to use helper methods like deleteAllChildren(), or less haphazard | |||
| approaches like using ScopedPointers or normal object aggregation to manage them. | |||
| @@ -26278,12 +26312,12 @@ public: | |||
| bool includeSiblings) const; | |||
| /** Returns this component's x co-ordinate relative the the screen's top-left origin. | |||
| @see getX, relativePositionToGlobal | |||
| @see getX, localPointToGlobal | |||
| */ | |||
| int getScreenX() const; | |||
| /** Returns this component's y co-ordinate relative the the screen's top-left origin. | |||
| @see getY, relativePositionToGlobal | |||
| @see getY, localPointToGlobal | |||
| */ | |||
| int getScreenY() const; | |||
| @@ -26297,24 +26331,33 @@ public: | |||
| */ | |||
| const Rectangle<int> getScreenBounds() const; | |||
| /** Converts a position relative to this component's top-left into a screen co-ordinate. | |||
| @see globalPositionToRelative, relativePositionToOtherComponent | |||
| /** Converts a point to be relative to this component's coordinate space. | |||
| This takes a point relative to a different component, and returns its position relative to this | |||
| component. If the sourceComponent parameter is null, the source point is assumed to be a global | |||
| screen coordinate. | |||
| */ | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) const; | |||
| const Point<int> getLocalPoint (const Component* sourceComponent, | |||
| const Point<int>& pointRelativeToSourceComponent) const; | |||
| /** Converts a rectangle to be relative to this component's coordinate space. | |||
| /** Converts a screen co-ordinate into a position relative to this component's top-left. | |||
| @see relativePositionToGlobal, relativePositionToOtherComponent | |||
| This takes a rectangle that is relative to a different component, and returns its position relative | |||
| to this component. If the sourceComponent parameter is null, the source rectangle is assumed to be | |||
| a screen coordinate. | |||
| */ | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) const; | |||
| const Rectangle<int> getLocalArea (const Component* sourceComponent, | |||
| const Rectangle<int>& areaRelativeToSourceComponent) const; | |||
| /** Converts a position relative to this component's top-left into a position | |||
| relative to another component's top-left. | |||
| If the targetComponent parameter is null, the coordinate is converted to global screen | |||
| coordinates. | |||
| @see relativePositionToGlobal, globalPositionToRelative | |||
| /** Converts a point relative to this component's top-left into a screen coordinate. | |||
| @see getLocalPoint, localAreaToGlobal | |||
| */ | |||
| const Point<int> relativePositionToOtherComponent (const Component* targetComponent, | |||
| const Point<int>& positionRelativeToThis) const; | |||
| const Point<int> localPointToGlobal (const Point<int>& localPoint) const; | |||
| /** Converts a rectangle from this component's coordinate space to a screen coordinate. | |||
| @see getLocalPoint, localPointToGlobal | |||
| */ | |||
| const Rectangle<int> localAreaToGlobal (const Rectangle<int>& localArea) const; | |||
| /** Moves the component to a new position. | |||
| @@ -27910,6 +27953,21 @@ public: | |||
| BailOutChecker& operator= (const BailOutChecker&); | |||
| }; | |||
| #ifndef DOXYGEN | |||
| /** @internal | |||
| This method is deprecated - use localPointToGlobal instead. */ | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) const; | |||
| /** @internal | |||
| This method is deprecated - use getLocalPoint instead. */ | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) const; | |||
| /** @internal | |||
| This method is deprecated - use getLocalPoint instead. */ | |||
| const Point<int> relativePositionToOtherComponent (const Component* targetComponent, | |||
| const Point<int>& positionRelativeToThis) const; | |||
| #endif | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| @@ -27952,7 +28010,7 @@ private: | |||
| bool bufferToImageFlag : 1; | |||
| bool bringToFrontOnClickFlag : 1; | |||
| bool repaintOnMouseActivityFlag : 1; | |||
| bool draggingFlag : 1; | |||
| bool mouseDownFlag : 1; | |||
| bool mouseOverFlag : 1; | |||
| bool mouseInsideFlag : 1; | |||
| bool currentlyModalFlag : 1; | |||
| @@ -40361,8 +40419,7 @@ protected: | |||
| This might return 0 if the data's unsuitable or corrupted. Otherwise it will return | |||
| an XmlElement object that the caller must delete when no longer needed. | |||
| */ | |||
| static XmlElement* getXmlFromBinary (const void* data, | |||
| int sizeInBytes); | |||
| static XmlElement* getXmlFromBinary (const void* data, int sizeInBytes); | |||
| /** @internal */ | |||
| AudioPlayHead* playHead; | |||
| @@ -59103,10 +59160,16 @@ public: | |||
| virtual const Point<int> getScreenPosition() const = 0; | |||
| /** Converts a position relative to the top-left of this component to screen co-ordinates. */ | |||
| virtual const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) = 0; | |||
| virtual const Point<int> localToGlobal (const Point<int>& relativePosition) = 0; | |||
| /** Converts a rectangle relative to the top-left of this component to screen co-ordinates. */ | |||
| virtual const Rectangle<int> localToGlobal (const Rectangle<int>& relativePosition); | |||
| /** Converts a screen co-ordinate to a position relative to the top-left of this component. */ | |||
| virtual const Point<int> globalPositionToRelative (const Point<int>& screenPosition) = 0; | |||
| virtual const Point<int> globalToLocal (const Point<int>& screenPosition) = 0; | |||
| /** Converts a screen area to a position relative to the top-left of this component. */ | |||
| virtual const Rectangle<int> globalToLocal (const Rectangle<int>& screenPosition); | |||
| /** Minimises the window. */ | |||
| virtual void setMinimised (bool shouldBeMinimised) = 0; | |||
| @@ -1198,7 +1198,7 @@ public: | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (relativePositionToOtherComponent (topComp, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (this, Point<int>())); | |||
| recursiveResize = true; | |||
| @@ -573,8 +573,7 @@ protected: | |||
| This might return 0 if the data's unsuitable or corrupted. Otherwise it will return | |||
| an XmlElement object that the caller must delete when no longer needed. | |||
| */ | |||
| static XmlElement* getXmlFromBinary (const void* data, | |||
| int sizeInBytes); | |||
| static XmlElement* getXmlFromBinary (const void* data, int sizeInBytes); | |||
| /** @internal */ | |||
| AudioPlayHead* playHead; | |||
| @@ -220,18 +220,6 @@ public: | |||
| return referencedObject; | |||
| } | |||
| /** Returns true if this pointer refers to the given object. */ | |||
| inline bool operator== (ReferenceCountedObjectClass* const object) const throw() | |||
| { | |||
| return referencedObject == object; | |||
| } | |||
| /** Returns true if this pointer doesn't refer to the given object. */ | |||
| inline bool operator!= (ReferenceCountedObjectClass* const object) const throw() | |||
| { | |||
| return referencedObject != object; | |||
| } | |||
| // the -> operator is called on the referenced object | |||
| inline ReferenceCountedObjectClass* operator->() const throw() | |||
| { | |||
| @@ -252,4 +240,47 @@ private: | |||
| }; | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, ReferenceCountedObjectClass* const object2) throw() | |||
| { | |||
| return object1.getObject() == object2; | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1.getObject() == object2.getObject(); | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator== (ReferenceCountedObjectClass* object1, ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1 == object2.getObject(); | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectClass* object2) throw() | |||
| { | |||
| return object1.getObject() != object2; | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1.getObject() != object2.getObject(); | |||
| } | |||
| /** Compares two ReferenceCountedObjectPointers. */ | |||
| template <class ReferenceCountedObjectClass> | |||
| bool operator!= (ReferenceCountedObjectClass* object1, ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) throw() | |||
| { | |||
| return object1 != object2.getObject(); | |||
| } | |||
| #endif // __JUCE_REFERENCECOUNTEDOBJECT_JUCEHEADER__ | |||
| @@ -33,7 +33,7 @@ | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 52 | |||
| #define JUCE_BUILDNUMBER 87 | |||
| #define JUCE_BUILDNUMBER 88 | |||
| /** Current Juce version number. | |||
| @@ -149,7 +149,7 @@ public: | |||
| void callChecked (const BailOutCheckerType& bailOutChecker, | |||
| void (ListenerClass::*callbackFunction) ()) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (); | |||
| } | |||
| @@ -158,7 +158,7 @@ public: | |||
| template <LL_TEMPLATE(1)> | |||
| void call (void (ListenerClass::*callbackFunction) (P1), LL_PARAM(1)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1); | |||
| } | |||
| @@ -169,7 +169,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1), | |||
| LL_PARAM(1)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1); | |||
| } | |||
| @@ -179,7 +179,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2), | |||
| LL_PARAM(1), LL_PARAM(2)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2); | |||
| } | |||
| @@ -190,7 +190,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2), | |||
| LL_PARAM(1), LL_PARAM(2)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2); | |||
| } | |||
| @@ -200,7 +200,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2, P3), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3); | |||
| } | |||
| @@ -211,7 +211,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2, P3), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3); | |||
| } | |||
| @@ -221,7 +221,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2, P3, P4), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4); | |||
| } | |||
| @@ -232,7 +232,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2, P3, P4), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4); | |||
| } | |||
| @@ -242,7 +242,7 @@ public: | |||
| void call (void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4), LL_PARAM(5)) | |||
| { | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this, DummyBailOutChecker()); iter.next();) | |||
| for (Iterator<DummyBailOutChecker, ThisType> iter (*this); iter.next();) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5); | |||
| } | |||
| @@ -253,7 +253,7 @@ public: | |||
| void (ListenerClass::*callbackFunction) (P1, P2, P3, P4, P5), | |||
| LL_PARAM(1), LL_PARAM(2), LL_PARAM(3), LL_PARAM(4), LL_PARAM(5)) | |||
| { | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this, bailOutChecker); iter.next();) | |||
| for (Iterator<BailOutCheckerType, ThisType> iter (*this); iter.next (bailOutChecker);) | |||
| (iter.getListener()->*callbackFunction) (param1, param2, param3, param4, param5); | |||
| } | |||
| @@ -275,8 +275,8 @@ public: | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| Iterator (const ListType& list_, const BailOutCheckerType& bailOutChecker_) | |||
| : list (list_), bailOutChecker (bailOutChecker_), index (list_.size()) | |||
| Iterator (const ListType& list_) | |||
| : list (list_), index (list_.size()) | |||
| {} | |||
| ~Iterator() {} | |||
| @@ -284,7 +284,7 @@ public: | |||
| //============================================================================== | |||
| bool next() | |||
| { | |||
| if (index <= 0 || bailOutChecker.shouldBailOut()) | |||
| if (index <= 0) | |||
| return false; | |||
| const int listSize = list.size(); | |||
| @@ -296,6 +296,11 @@ public: | |||
| return index >= 0; | |||
| } | |||
| bool next (const BailOutCheckerType& bailOutChecker) | |||
| { | |||
| return (! bailOutChecker.shouldBailOut()) && next(); | |||
| } | |||
| typename ListType::ListenerType* getListener() const throw() | |||
| { | |||
| return list.getListeners().getUnchecked (index); | |||
| @@ -304,7 +309,6 @@ public: | |||
| //============================================================================== | |||
| private: | |||
| const ListType& list; | |||
| const BailOutCheckerType& bailOutChecker; | |||
| int index; | |||
| Iterator (const Iterator&); | |||
| @@ -878,7 +878,7 @@ const Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) | |||
| if (rowComp != 0 && isRowSelected (firstRow + i)) | |||
| { | |||
| const Point<int> pos (rowComp->relativePositionToOtherComponent (this, Point<int>())); | |||
| const Point<int> pos (getLocalPoint (rowComp, Point<int>())); | |||
| const Rectangle<int> rowRect (pos.getX(), pos.getY(), rowComp->getWidth(), rowComp->getHeight()); | |||
| imageArea = imageArea.getUnion (rowRect); | |||
| } | |||
| @@ -895,7 +895,7 @@ const Image ListBox::createSnapshotOfSelectedRows (int& imageX, int& imageY) | |||
| if (rowComp != 0 && isRowSelected (firstRow + i)) | |||
| { | |||
| const Point<int> pos (rowComp->relativePositionToOtherComponent (this, Point<int>())); | |||
| const Point<int> pos (getLocalPoint (rowComp, Point<int>())); | |||
| Graphics g (snapshot); | |||
| g.setOrigin (pos.getX() - imageX, pos.getY() - imageY); | |||
| @@ -1172,8 +1172,8 @@ void Slider::restoreMouseIfHidden() | |||
| { | |||
| const int pixelPos = (int) getLinearSliderPos (pos); | |||
| mousePos = relativePositionToGlobal (Point<int> (isHorizontal() ? pixelPos : (getWidth() / 2), | |||
| isVertical() ? pixelPos : (getHeight() / 2))); | |||
| mousePos = localPointToGlobal (Point<int> (isHorizontal() ? pixelPos : (getWidth() / 2), | |||
| isVertical() ? pixelPos : (getHeight() / 2))); | |||
| } | |||
| Desktop::setMousePosition (mousePos); | |||
| @@ -625,7 +625,7 @@ TreeViewItem* TreeView::getItemAt (int y) const throw() | |||
| { | |||
| TreeViewContentComponent* const tc = static_cast <TreeViewContentComponent*> (viewport->getViewedComponent()); | |||
| Rectangle<int> pos; | |||
| return tc->findItemAt (relativePositionToOtherComponent (tc, Point<int> (0, y)).getY(), pos); | |||
| return tc->findItemAt (tc->getLocalPoint (this, Point<int> (0, y)).getY(), pos); | |||
| } | |||
| TreeViewItem* TreeView::findItemFromIdentifierString (const String& identifierString) const | |||
| @@ -259,8 +259,7 @@ Component::~Component() | |||
| { | |||
| parentComponent_->removeChildComponent (this); | |||
| } | |||
| else if ((currentlyFocusedComponent == this) | |||
| || isParentOf (currentlyFocusedComponent)) | |||
| else if (currentlyFocusedComponent == this || isParentOf (currentlyFocusedComponent)) | |||
| { | |||
| giveAwayFocus(); | |||
| } | |||
| @@ -434,7 +433,7 @@ void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo) | |||
| jmax (1, getHeight())); | |||
| #endif | |||
| const Point<int> topLeft (relativePositionToGlobal (Point<int> (0, 0))); | |||
| const Point<int> topLeft (getScreenPosition()); | |||
| bool wasFullscreen = false; | |||
| bool wasMinimised = false; | |||
| @@ -777,7 +776,7 @@ int Component::getScreenY() const | |||
| const Point<int> Component::getScreenPosition() const | |||
| { | |||
| return relativePositionToGlobal (Point<int>()); | |||
| return localPointToGlobal (Point<int>()); | |||
| } | |||
| const Rectangle<int> Component::getScreenBounds() const | |||
| @@ -785,53 +784,119 @@ const Rectangle<int> Component::getScreenBounds() const | |||
| return bounds_.withPosition (getScreenPosition()); | |||
| } | |||
| const Point<int> Component::relativePositionToGlobal (const Point<int>& relativePosition) const | |||
| { | |||
| return relativePositionToOtherComponent (0, relativePosition); | |||
| } | |||
| const Point<int> Component::globalPositionToRelative (const Point<int>& screenPosition) const | |||
| namespace CoordinateHelpers | |||
| { | |||
| if (flags.hasHeavyweightPeerFlag) | |||
| const Point<int> convertFromParentSpace (const Component* comp, const Point<int>& pointInParentSpace) | |||
| { | |||
| return getPeer()->globalPositionToRelative (screenPosition); | |||
| return pointInParentSpace - comp->getPosition(); | |||
| } | |||
| else | |||
| const Rectangle<int> convertFromParentSpace (const Component* comp, const Rectangle<int>& areaInParentSpace) | |||
| { | |||
| if (parentComponent_ != 0) | |||
| return parentComponent_->globalPositionToRelative (screenPosition) - getPosition(); | |||
| return areaInParentSpace - comp->getPosition(); | |||
| } | |||
| return screenPosition - getPosition(); | |||
| const Point<int> convertToParentSpace (const Component* comp, const Point<int>& pointInLocalSpace) | |||
| { | |||
| return pointInLocalSpace + comp->getPosition(); | |||
| } | |||
| } | |||
| const Point<int> Component::relativePositionToOtherComponent (const Component* const targetComponent, const Point<int>& positionRelativeToThis) const | |||
| { | |||
| Point<int> p (positionRelativeToThis); | |||
| const Component* c = this; | |||
| const Rectangle<int> convertToParentSpace (const Component* comp, const Rectangle<int>& areaInLocalSpace) | |||
| { | |||
| return areaInLocalSpace + comp->getPosition(); | |||
| } | |||
| do | |||
| template <typename Type> | |||
| const Type convertFromDistantParentSpace (const Component* parent, const Component* target, Type coordInParent) | |||
| { | |||
| if (c == targetComponent) | |||
| return p; | |||
| const Component* const directParent = target->getParentComponent(); | |||
| jassert (directParent != 0); | |||
| if (directParent == parent) | |||
| return convertFromParentSpace (target, coordInParent); | |||
| if (c->flags.hasHeavyweightPeerFlag) | |||
| return convertFromParentSpace (target, convertFromDistantParentSpace (parent, directParent, coordInParent)); | |||
| } | |||
| template <typename Type> | |||
| const Type convertCoordinate (const Component* target, const Component* source, Type p) | |||
| { | |||
| while (source != 0) | |||
| { | |||
| p = c->getPeer()->relativePositionToGlobal (p); | |||
| break; | |||
| if (source == target) | |||
| return p; | |||
| if (source->isParentOf (target)) | |||
| return convertFromDistantParentSpace (source, target, p); | |||
| if (source->isOnDesktop()) | |||
| { | |||
| p = source->getPeer()->localToGlobal (p); | |||
| source = 0; | |||
| } | |||
| else | |||
| { | |||
| p = convertToParentSpace (source, p); | |||
| source = source->getParentComponent(); | |||
| } | |||
| } | |||
| p += c->getPosition(); | |||
| c = c->parentComponent_; | |||
| jassert (source == 0); | |||
| if (target == 0) | |||
| return p; | |||
| const Component* const topLevelComp = target->getTopLevelComponent(); | |||
| if (topLevelComp->isOnDesktop()) | |||
| p = topLevelComp->getPeer()->globalToLocal (p); | |||
| else | |||
| p = convertFromParentSpace (topLevelComp, p); | |||
| if (topLevelComp == target) | |||
| return p; | |||
| return convertFromDistantParentSpace (topLevelComp, target, p); | |||
| } | |||
| while (c != 0); | |||
| } | |||
| if (targetComponent != 0) | |||
| p = targetComponent->globalPositionToRelative (p); | |||
| const Point<int> Component::getLocalPoint (const Component* source, const Point<int>& point) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (this, source, point); | |||
| } | |||
| const Rectangle<int> Component::getLocalArea (const Component* source, const Rectangle<int>& area) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (this, source, area); | |||
| } | |||
| return p; | |||
| const Point<int> Component::localPointToGlobal (const Point<int>& point) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (0, this, point); | |||
| } | |||
| const Rectangle<int> Component::localAreaToGlobal (const Rectangle<int>& area) const | |||
| { | |||
| return CoordinateHelpers::convertCoordinate (0, this, area); | |||
| } | |||
| /* Deprecated methods... */ | |||
| const Point<int> Component::relativePositionToGlobal (const Point<int>& relativePosition) const | |||
| { | |||
| return localPointToGlobal (relativePosition); | |||
| } | |||
| const Point<int> Component::globalPositionToRelative (const Point<int>& screenPosition) const | |||
| { | |||
| return getLocalPoint (0, screenPosition); | |||
| } | |||
| const Point<int> Component::relativePositionToOtherComponent (const Component* const targetComponent, const Point<int>& positionRelativeToThis) const | |||
| { | |||
| return targetComponent == 0 ? localPointToGlobal (positionRelativeToThis) | |||
| : targetComponent->getLocalPoint (this, positionRelativeToThis); | |||
| } | |||
| //============================================================================== | |||
| void Component::setBounds (const int x, const int y, int w, int h) | |||
| { | |||
| @@ -1922,7 +1987,7 @@ void Component::getVisibleArea (RectangleList& result, const bool includeSibling | |||
| { | |||
| const Component* const c = getTopLevelComponent(); | |||
| c->subtractObscuredRegions (result, c->relativePositionToOtherComponent (this, Point<int>()), | |||
| c->subtractObscuredRegions (result, getLocalPoint (c, Point<int>()), | |||
| c->getLocalBounds(), this); | |||
| } | |||
| @@ -2142,7 +2207,7 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>& | |||
| { | |||
| flags.mouseInsideFlag = true; | |||
| flags.mouseOverFlag = true; | |||
| flags.draggingFlag = false; | |||
| flags.mouseDownFlag = false; | |||
| BailOutChecker checker (this); | |||
| @@ -2167,7 +2232,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r | |||
| { | |||
| BailOutChecker checker (this); | |||
| if (flags.draggingFlag) | |||
| if (flags.mouseDownFlag) | |||
| { | |||
| internalMouseUp (source, relativePos, time, source.getCurrentModifiers().getRawFlags()); | |||
| @@ -2179,7 +2244,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r | |||
| { | |||
| flags.mouseInsideFlag = false; | |||
| flags.mouseOverFlag = false; | |||
| flags.draggingFlag = false; | |||
| flags.mouseDownFlag = false; | |||
| if (flags.repaintOnMouseActivityFlag) | |||
| repaint(); | |||
| @@ -2308,7 +2373,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r | |||
| return; | |||
| } | |||
| flags.draggingFlag = true; | |||
| flags.mouseDownFlag = true; | |||
| flags.mouseOverFlag = true; | |||
| if (flags.repaintOnMouseActivityFlag) | |||
| @@ -2331,11 +2396,11 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r | |||
| //============================================================================== | |||
| void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers) | |||
| { | |||
| if (flags.draggingFlag) | |||
| if (flags.mouseDownFlag) | |||
| { | |||
| Desktop& desktop = Desktop::getInstance(); | |||
| flags.draggingFlag = false; | |||
| flags.mouseDownFlag = false; | |||
| BailOutChecker checker (this); | |||
| @@ -2344,7 +2409,7 @@ void Component::internalMouseUp (MouseInputSource& source, const Point<int>& rel | |||
| const MouseEvent me (source, relativePos, | |||
| oldModifiers, this, this, time, | |||
| globalPositionToRelative (source.getLastMouseDownPosition()), | |||
| getLocalPoint (0, source.getLastMouseDownPosition()), | |||
| source.getLastMouseDownTime(), | |||
| source.getNumberOfMultipleClicks(), | |||
| source.hasMouseMovedSignificantlySincePressed()); | |||
| @@ -2378,7 +2443,7 @@ void Component::internalMouseUp (MouseInputSource& source, const Point<int>& rel | |||
| void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& relativePos, const Time& time) | |||
| { | |||
| if (flags.draggingFlag) | |||
| if (flags.mouseDownFlag) | |||
| { | |||
| Desktop& desktop = Desktop::getInstance(); | |||
| @@ -2388,7 +2453,7 @@ void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& r | |||
| const MouseEvent me (source, relativePos, | |||
| source.getCurrentModifiers(), this, this, time, | |||
| globalPositionToRelative (source.getLastMouseDownPosition()), | |||
| getLocalPoint (0, source.getLastMouseDownPosition()), | |||
| source.getLastMouseDownTime(), | |||
| source.getNumberOfMultipleClicks(), | |||
| source.hasMouseMovedSignificantlySincePressed()); | |||
| @@ -2411,8 +2476,7 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r | |||
| BailOutChecker checker (this); | |||
| const MouseEvent me (source, relativePos, source.getCurrentModifiers(), | |||
| this, this, time, relativePos, | |||
| time, 0, false); | |||
| this, this, time, relativePos, time, 0, false); | |||
| if (isCurrentlyBlockedByAnotherModalComponent()) | |||
| { | |||
| @@ -2825,12 +2889,12 @@ bool Component::isMouseOver() const throw() | |||
| bool Component::isMouseButtonDown() const throw() | |||
| { | |||
| return flags.draggingFlag; | |||
| return flags.mouseDownFlag; | |||
| } | |||
| bool Component::isMouseOverOrDragging() const throw() | |||
| { | |||
| return flags.mouseOverFlag || flags.draggingFlag; | |||
| return flags.mouseOverFlag || flags.mouseDownFlag; | |||
| } | |||
| bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() throw() | |||
| @@ -2840,14 +2904,14 @@ bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() throw() | |||
| const Point<int> Component::getMouseXYRelative() const | |||
| { | |||
| return globalPositionToRelative (Desktop::getMousePosition()); | |||
| return getLocalPoint (0, Desktop::getMousePosition()); | |||
| } | |||
| //============================================================================== | |||
| const Rectangle<int> Component::getParentMonitorArea() const | |||
| { | |||
| return Desktop::getInstance() | |||
| .getMonitorAreaContaining (relativePositionToGlobal (getLocalBounds().getCentre())); | |||
| .getMonitorAreaContaining (localPointToGlobal (getLocalBounds().getCentre())); | |||
| } | |||
| //============================================================================== | |||
| @@ -73,7 +73,7 @@ public: | |||
| /** Destructor. | |||
| Note that when a component is deleted, any child components it contain are NOT | |||
| Note that when a component is deleted, any child components it contains are NOT | |||
| automatically deleted. It's your responsibilty to manage their lifespan - you | |||
| may want to use helper methods like deleteAllChildren(), or less haphazard | |||
| approaches like using ScopedPointers or normal object aggregation to manage them. | |||
| @@ -313,12 +313,12 @@ public: | |||
| //============================================================================== | |||
| /** Returns this component's x co-ordinate relative the the screen's top-left origin. | |||
| @see getX, relativePositionToGlobal | |||
| @see getX, localPointToGlobal | |||
| */ | |||
| int getScreenX() const; | |||
| /** Returns this component's y co-ordinate relative the the screen's top-left origin. | |||
| @see getY, relativePositionToGlobal | |||
| @see getY, localPointToGlobal | |||
| */ | |||
| int getScreenY() const; | |||
| @@ -332,24 +332,33 @@ public: | |||
| */ | |||
| const Rectangle<int> getScreenBounds() const; | |||
| /** Converts a position relative to this component's top-left into a screen co-ordinate. | |||
| @see globalPositionToRelative, relativePositionToOtherComponent | |||
| /** Converts a point to be relative to this component's coordinate space. | |||
| This takes a point relative to a different component, and returns its position relative to this | |||
| component. If the sourceComponent parameter is null, the source point is assumed to be a global | |||
| screen coordinate. | |||
| */ | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) const; | |||
| const Point<int> getLocalPoint (const Component* sourceComponent, | |||
| const Point<int>& pointRelativeToSourceComponent) const; | |||
| /** Converts a screen co-ordinate into a position relative to this component's top-left. | |||
| @see relativePositionToGlobal, relativePositionToOtherComponent | |||
| /** Converts a rectangle to be relative to this component's coordinate space. | |||
| This takes a rectangle that is relative to a different component, and returns its position relative | |||
| to this component. If the sourceComponent parameter is null, the source rectangle is assumed to be | |||
| a screen coordinate. | |||
| */ | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) const; | |||
| const Rectangle<int> getLocalArea (const Component* sourceComponent, | |||
| const Rectangle<int>& areaRelativeToSourceComponent) const; | |||
| /** Converts a position relative to this component's top-left into a position | |||
| relative to another component's top-left. | |||
| If the targetComponent parameter is null, the coordinate is converted to global screen | |||
| coordinates. | |||
| @see relativePositionToGlobal, globalPositionToRelative | |||
| /** Converts a point relative to this component's top-left into a screen coordinate. | |||
| @see getLocalPoint, localAreaToGlobal | |||
| */ | |||
| const Point<int> relativePositionToOtherComponent (const Component* targetComponent, | |||
| const Point<int>& positionRelativeToThis) const; | |||
| const Point<int> localPointToGlobal (const Point<int>& localPoint) const; | |||
| /** Converts a rectangle from this component's coordinate space to a screen coordinate. | |||
| @see getLocalPoint, localPointToGlobal | |||
| */ | |||
| const Rectangle<int> localAreaToGlobal (const Rectangle<int>& localArea) const; | |||
| //============================================================================== | |||
| /** Moves the component to a new position. | |||
| @@ -1981,6 +1990,22 @@ public: | |||
| BailOutChecker& operator= (const BailOutChecker&); | |||
| }; | |||
| //============================================================================== | |||
| #ifndef DOXYGEN | |||
| /** @internal | |||
| This method is deprecated - use localPointToGlobal instead. */ | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) const; | |||
| /** @internal | |||
| This method is deprecated - use getLocalPoint instead. */ | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) const; | |||
| /** @internal | |||
| This method is deprecated - use getLocalPoint instead. */ | |||
| const Point<int> relativePositionToOtherComponent (const Component* targetComponent, | |||
| const Point<int>& positionRelativeToThis) const; | |||
| #endif | |||
| //============================================================================== | |||
| juce_UseDebuggingNewOperator | |||
| @@ -2025,7 +2050,7 @@ private: | |||
| bool bufferToImageFlag : 1; | |||
| bool bringToFrontOnClickFlag : 1; | |||
| bool repaintOnMouseActivityFlag : 1; | |||
| bool draggingFlag : 1; | |||
| bool mouseDownFlag : 1; | |||
| bool mouseOverFlag : 1; | |||
| bool mouseInsideFlag : 1; | |||
| bool currentlyModalFlag : 1; | |||
| @@ -160,7 +160,7 @@ Component* Desktop::findComponentAt (const Point<int>& screenPosition) const | |||
| if (c->isVisible()) | |||
| { | |||
| const Point<int> relative (c->globalPositionToRelative (screenPosition)); | |||
| const Point<int> relative (c->getLocalPoint (0, screenPosition)); | |||
| if (c->contains (relative.getX(), relative.getY())) | |||
| return c->getComponentAt (relative.getX(), relative.getY()); | |||
| @@ -305,7 +305,7 @@ void Desktop::sendMouseMove() | |||
| if (target != 0) | |||
| { | |||
| Component::BailOutChecker checker (target); | |||
| const Point<int> pos (target->globalPositionToRelative (lastFakeMouseMove)); | |||
| const Point<int> pos (target->getLocalPoint (0, lastFakeMouseMove)); | |||
| const Time now (Time::getCurrentTime()); | |||
| const MouseEvent me (getMainMouseSource(), pos, ModifierKeys::getCurrentModifiers(), | |||
| @@ -88,7 +88,7 @@ void ComponentMovementWatcher::componentMovedOrResized (Component&, bool wasMove | |||
| if (wasMoved) | |||
| { | |||
| const Point<int> pos (component->relativePositionToOtherComponent (component->getTopLevelComponent(), Point<int>())); | |||
| const Point<int> pos (component->getTopLevelComponent()->getLocalPoint (component, Point<int>())); | |||
| wasMoved = lastBounds.getPosition() != pos; | |||
| lastBounds.setPosition (pos); | |||
| @@ -155,6 +155,9 @@ namespace LookAndFeelHelpers | |||
| return tl; | |||
| } | |||
| LookAndFeel* defaultLF = 0; | |||
| LookAndFeel* currentDefaultLF = 0; | |||
| } | |||
| //============================================================================== | |||
| @@ -309,6 +312,8 @@ LookAndFeel::LookAndFeel() | |||
| LookAndFeel::~LookAndFeel() | |||
| { | |||
| if (this == LookAndFeelHelpers::currentDefaultLF) | |||
| setDefaultLookAndFeel (0); | |||
| } | |||
| //============================================================================== | |||
| @@ -344,21 +349,20 @@ bool LookAndFeel::isColourSpecified (const int colourId) const throw() | |||
| } | |||
| //============================================================================== | |||
| static LookAndFeel* defaultLF = 0; | |||
| static LookAndFeel* currentDefaultLF = 0; | |||
| LookAndFeel& LookAndFeel::getDefaultLookAndFeel() throw() | |||
| { | |||
| // if this happens, your app hasn't initialised itself properly.. if you're | |||
| // trying to hack your own main() function, have a look at | |||
| // JUCEApplication::initialiseForGUI() | |||
| jassert (currentDefaultLF != 0); | |||
| jassert (LookAndFeelHelpers::currentDefaultLF != 0); | |||
| return *currentDefaultLF; | |||
| return *LookAndFeelHelpers::currentDefaultLF; | |||
| } | |||
| void LookAndFeel::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) throw() | |||
| { | |||
| using namespace LookAndFeelHelpers; | |||
| if (newDefaultLookAndFeel == 0) | |||
| { | |||
| if (defaultLF == 0) | |||
| @@ -367,7 +371,7 @@ void LookAndFeel::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) thr | |||
| newDefaultLookAndFeel = defaultLF; | |||
| } | |||
| currentDefaultLF = newDefaultLookAndFeel; | |||
| LookAndFeelHelpers::currentDefaultLF = newDefaultLookAndFeel; | |||
| for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;) | |||
| { | |||
| @@ -380,6 +384,8 @@ void LookAndFeel::setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) thr | |||
| void LookAndFeel::clearDefaultLookAndFeel() throw() | |||
| { | |||
| using namespace LookAndFeelHelpers; | |||
| if (currentDefaultLF == defaultLF) | |||
| currentDefaultLF = 0; | |||
| @@ -580,7 +580,7 @@ public: | |||
| // move rather than a real timer callback | |||
| const Point<int> globalMousePos (Desktop::getMousePosition()); | |||
| const Point<int> localMousePos (globalPositionToRelative (globalMousePos)); | |||
| const Point<int> localMousePos (getLocalPoint (0, globalMousePos)); | |||
| const uint32 now = Time::getMillisecondCounter(); | |||
| @@ -750,7 +750,7 @@ private: | |||
| void updateMouseOverStatus (const Point<int>& globalMousePos) | |||
| { | |||
| const Point<int> relPos (globalPositionToRelative (globalMousePos)); | |||
| const Point<int> relPos (getLocalPoint (0, globalMousePos)); | |||
| isOver = reallyContains (relPos.getX(), relPos.getY(), true); | |||
| if (activeSubMenu != 0) | |||
| @@ -50,7 +50,7 @@ void ComponentDragger::startDraggingComponent (Component* const componentToDrag, | |||
| if (componentToDrag != 0) | |||
| { | |||
| constrainer = constrainer_; | |||
| originalPos = componentToDrag->relativePositionToGlobal (Point<int>()); | |||
| originalPos = componentToDrag->localPointToGlobal (Point<int>()); | |||
| } | |||
| } | |||
| @@ -65,7 +65,7 @@ void ComponentDragger::dragComponent (Component* const componentToDrag, const Mo | |||
| const Component* const parentComp = componentToDrag->getParentComponent(); | |||
| if (parentComp != 0) | |||
| bounds.setPosition (parentComp->globalPositionToRelative (originalPos)); | |||
| bounds.setPosition (parentComp->getLocalPoint (0, originalPos)); | |||
| bounds.setPosition (bounds.getPosition() + e.getOffsetFromDragStart()); | |||
| @@ -110,7 +110,7 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const Point<int> relPos (hit->globalPositionToRelative (screenPos)); | |||
| const Point<int> relPos (hit->getLocalPoint (0, screenPos)); | |||
| hit = hit->getComponentAt (relPos.getX(), relPos.getY()); | |||
| } | |||
| @@ -124,7 +124,7 @@ public: | |||
| if (ddt != 0 && ddt->isInterestedInDragSource (dragDescLocal, source)) | |||
| { | |||
| relativePos = hit->globalPositionToRelative (screenPos); | |||
| relativePos = hit->getLocalPoint (0, screenPos); | |||
| return ddt; | |||
| } | |||
| @@ -162,8 +162,8 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const Point<int> target (source->relativePositionToGlobal (source->getLocalBounds().getCentre())); | |||
| const Point<int> ourCentre (relativePositionToGlobal (getLocalBounds().getCentre())); | |||
| const Point<int> target (source->localPointToGlobal (source->getLocalBounds().getCentre())); | |||
| const Point<int> ourCentre (localPointToGlobal (getLocalBounds().getCentre())); | |||
| Desktop::getInstance().getAnimator().animateComponent (this, | |||
| getBounds() + (target - ourCentre), | |||
| @@ -199,7 +199,7 @@ public: | |||
| Point<int> newPos (screenPos + imageOffset); | |||
| if (getParentComponent() != 0) | |||
| newPos = getParentComponent()->globalPositionToRelative (newPos); | |||
| newPos = getParentComponent()->getLocalPoint (0, newPos); | |||
| //if (newX != getX() || newY != getY()) | |||
| { | |||
| @@ -347,7 +347,7 @@ void DragAndDropContainer::startDragging (const String& sourceDescription, | |||
| const int lo = 150; | |||
| const int hi = 400; | |||
| Point<int> relPos (sourceComponent->globalPositionToRelative (lastMouseDown)); | |||
| Point<int> relPos (sourceComponent->getLocalPoint (0, lastMouseDown)); | |||
| Point<int> clipped (dragImage.getBounds().getConstrainedPoint (relPos)); | |||
| for (int y = dragImage.getHeight(); --y >= 0;) | |||
| @@ -69,9 +69,9 @@ const MouseEvent MouseEvent::getEventRelativeTo (Component* const otherComponent | |||
| return *this; | |||
| } | |||
| return MouseEvent (source, eventComponent->relativePositionToOtherComponent (otherComponent, getPosition()), | |||
| return MouseEvent (source, otherComponent->getLocalPoint (eventComponent, getPosition()), | |||
| mods, otherComponent, originalComponent, eventTime, | |||
| eventComponent->relativePositionToOtherComponent (otherComponent, mouseDownPos), | |||
| otherComponent->getLocalPoint (eventComponent, mouseDownPos), | |||
| mouseDownTime, numberOfClicks, wasMovedSinceMouseDown); | |||
| } | |||
| @@ -149,7 +149,7 @@ int MouseEvent::getScreenY() const | |||
| const Point<int> MouseEvent::getScreenPosition() const | |||
| { | |||
| return eventComponent->relativePositionToGlobal (Point<int> (x, y)); | |||
| return eventComponent->localPointToGlobal (Point<int> (x, y)); | |||
| } | |||
| int MouseEvent::getMouseDownScreenX() const | |||
| @@ -164,7 +164,7 @@ int MouseEvent::getMouseDownScreenY() const | |||
| const Point<int> MouseEvent::getMouseDownScreenPosition() const | |||
| { | |||
| return eventComponent->relativePositionToGlobal (mouseDownPos); | |||
| return eventComponent->localPointToGlobal (mouseDownPos); | |||
| } | |||
| //============================================================================== | |||
| @@ -45,7 +45,6 @@ public: | |||
| isUnboundedMouseModeOn (false), isCursorVisibleUntilOffscreen (false), currentCursorHandle (0), | |||
| mouseEventCounter (0), lastTime (0) | |||
| { | |||
| zerostruct (mouseDowns); | |||
| } | |||
| ~MouseInputSourceInternal() | |||
| @@ -83,7 +82,7 @@ public: | |||
| if (peer != 0) | |||
| { | |||
| Component* const comp = peer->getComponent(); | |||
| const Point<int> relativePos (comp->globalPositionToRelative (screenPos)); | |||
| const Point<int> relativePos (comp->getLocalPoint (0, screenPos)); | |||
| // (the contains() call is needed to test for overlapping desktop windows) | |||
| if (comp->contains (relativePos.getX(), relativePos.getY())) | |||
| @@ -101,44 +100,44 @@ public: | |||
| //============================================================================== | |||
| void sendMouseEnter (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " enter: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseEnter (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " enter: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseEnter (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseExit (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " exit: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseExit (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " exit: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseExit (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseMove (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " move: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseMove (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " move: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseMove (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseDown (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " down: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDown (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " down: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDown (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseDrag (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " drag: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDrag (source, comp->globalPositionToRelative (screenPos), time); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " drag: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseDrag (source, comp->getLocalPoint (0, screenPos), time); | |||
| } | |||
| void sendMouseUp (Component* const comp, const Point<int>& screenPos, const int64 time) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " up: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseUp (source, comp->globalPositionToRelative (screenPos), time, getCurrentModifiers()); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " up: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseUp (source, comp->getLocalPoint (0, screenPos), time, getCurrentModifiers()); | |||
| } | |||
| void sendMouseWheel (Component* const comp, const Point<int>& screenPos, const int64 time, float x, float y) | |||
| { | |||
| //DBG ("Mouse " + String (source.getIndex()) + " wheel: " + comp->globalPositionToRelative (screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseWheel (source, comp->globalPositionToRelative (screenPos), time, x, y); | |||
| //DBG ("Mouse " + String (source.getIndex()) + " wheel: " + comp->getLocalPoint (0, screenPos).toString() + " - Comp: " + String::toHexString ((int) comp)); | |||
| comp->internalMouseWheel (source, comp->getLocalPoint (0, screenPos), time, x, y); | |||
| } | |||
| //============================================================================== | |||
| @@ -264,7 +263,7 @@ public: | |||
| jassert (newPeer != 0); | |||
| lastTime = time; | |||
| ++mouseEventCounter; | |||
| const Point<int> screenPos (newPeer->relativePositionToGlobal (positionWithinPeer)); | |||
| const Point<int> screenPos (newPeer->localToGlobal (positionWithinPeer)); | |||
| if (isDragging() && newMods.isAnyMouseButtonDown()) | |||
| { | |||
| @@ -292,7 +291,7 @@ public: | |||
| jassert (peer != 0); | |||
| lastTime = time; | |||
| ++mouseEventCounter; | |||
| const Point<int> screenPos (peer->relativePositionToGlobal (positionWithinPeer)); | |||
| const Point<int> screenPos (peer->localToGlobal (positionWithinPeer)); | |||
| setPeer (peer, screenPos, time); | |||
| setScreenPos (screenPos, time, false); | |||
| @@ -328,7 +327,7 @@ public: | |||
| for (int i = 1; i < numElementsInArray (mouseDowns); ++i) | |||
| { | |||
| if (mouseDowns[0].canBePartOfMultipleClickWith (mouseDowns[1], (int) (MouseEvent::getDoubleClickTimeout() * (1.0 + 0.25 * (i - 1))))) | |||
| if (mouseDowns[0].canBePartOfMultipleClickWith (mouseDowns[i], (int) (MouseEvent::getDoubleClickTimeout() * (1.0 + 0.25 * (i - 1))))) | |||
| ++numClicks; | |||
| else | |||
| break; | |||
| @@ -448,6 +447,11 @@ private: | |||
| struct RecentMouseDown | |||
| { | |||
| RecentMouseDown() | |||
| : time (0), component (0) | |||
| { | |||
| } | |||
| Point<int> position; | |||
| int64 time; | |||
| Component* component; | |||
| @@ -101,9 +101,9 @@ void BubbleComponent::setPosition (Component* componentToPointTo) | |||
| Point<int> pos; | |||
| if (getParentComponent() != 0) | |||
| pos = componentToPointTo->relativePositionToOtherComponent (getParentComponent(), pos); | |||
| pos = getParentComponent()->getLocalPoint (componentToPointTo, pos); | |||
| else | |||
| pos = componentToPointTo->relativePositionToGlobal (pos); | |||
| pos = componentToPointTo->localPointToGlobal (pos); | |||
| setPosition (Rectangle<int> (pos.getX(), pos.getY(), componentToPointTo->getWidth(), componentToPointTo->getHeight())); | |||
| } | |||
| @@ -96,16 +96,16 @@ public: | |||
| return magnifierComp->getScreenPosition(); | |||
| } | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| const double zoom = magnifierComp->getScaleFactor(); | |||
| return magnifierComp->relativePositionToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom), | |||
| roundToInt (relativePosition.getY() * zoom))); | |||
| return magnifierComp->localPointToGlobal (Point<int> (roundToInt (relativePosition.getX() * zoom), | |||
| roundToInt (relativePosition.getY() * zoom))); | |||
| } | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| const Point<int> p (magnifierComp->globalPositionToRelative (screenPosition)); | |||
| const Point<int> p (magnifierComp->getLocalPoint (0, screenPosition)); | |||
| const double zoom = magnifierComp->getScaleFactor(); | |||
| return Point<int> (roundToInt (p.getX() / zoom), | |||
| @@ -45,8 +45,7 @@ CallOutBox::CallOutBox (Component& contentComponent, | |||
| { | |||
| parentComponent->addChildComponent (this); | |||
| updatePosition (componentToPointTo.getLocalBounds() | |||
| + componentToPointTo.relativePositionToOtherComponent (parentComponent, Point<int>()), | |||
| updatePosition (parentComponent->getLocalArea (&componentToPointTo, componentToPointTo.getLocalBounds()), | |||
| parentComponent->getLocalBounds()); | |||
| setVisible (true); | |||
| @@ -399,6 +399,16 @@ const Rectangle<int>& ComponentPeer::getNonFullScreenBounds() const throw() | |||
| return lastNonFullscreenBounds; | |||
| } | |||
| const Rectangle<int> ComponentPeer::localToGlobal (const Rectangle<int>& relativePosition) | |||
| { | |||
| return relativePosition.withPosition (localToGlobal (relativePosition.getPosition())); | |||
| } | |||
| const Rectangle<int> ComponentPeer::globalToLocal (const Rectangle<int>& screenPosition) | |||
| { | |||
| return screenPosition.withPosition (globalToLocal (screenPosition.getPosition())); | |||
| } | |||
| //============================================================================== | |||
| namespace ComponentPeerHelpers | |||
| { | |||
| @@ -446,7 +456,7 @@ void ComponentPeer::handleFileDragMove (const StringArray& files, const Point<in | |||
| if (newTarget != 0) | |||
| { | |||
| dragAndDropTargetComponent = dynamic_cast <Component*> (newTarget); | |||
| const Point<int> pos (component->relativePositionToOtherComponent (dragAndDropTargetComponent, position)); | |||
| const Point<int> pos (dragAndDropTargetComponent->getLocalPoint (component, position)); | |||
| newTarget->fileDragEnter (files, pos.getX(), pos.getY()); | |||
| } | |||
| } | |||
| @@ -459,7 +469,7 @@ void ComponentPeer::handleFileDragMove (const StringArray& files, const Point<in | |||
| if (newTarget != 0) | |||
| { | |||
| Component* const targetComp = dynamic_cast <Component*> (newTarget); | |||
| const Point<int> pos (component->relativePositionToOtherComponent (targetComp, position)); | |||
| const Point<int> pos (targetComp->getLocalPoint (component, position)); | |||
| newTarget->fileDragMove (files, pos.getX(), pos.getY()); | |||
| } | |||
| @@ -497,7 +507,7 @@ void ComponentPeer::handleFileDragDrop (const StringArray& files, const Point<in | |||
| return; | |||
| } | |||
| const Point<int> pos (component->relativePositionToOtherComponent (targetComp, position)); | |||
| const Point<int> pos (targetComp->getLocalPoint (component, position)); | |||
| target->filesDropped (files, pos.getX(), pos.getY()); | |||
| } | |||
| } | |||
| @@ -152,10 +152,16 @@ public: | |||
| virtual const Point<int> getScreenPosition() const = 0; | |||
| /** Converts a position relative to the top-left of this component to screen co-ordinates. */ | |||
| virtual const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) = 0; | |||
| virtual const Point<int> localToGlobal (const Point<int>& relativePosition) = 0; | |||
| /** Converts a rectangle relative to the top-left of this component to screen co-ordinates. */ | |||
| virtual const Rectangle<int> localToGlobal (const Rectangle<int>& relativePosition); | |||
| /** Converts a screen co-ordinate to a position relative to the top-left of this component. */ | |||
| virtual const Point<int> globalPositionToRelative (const Point<int>& screenPosition) = 0; | |||
| virtual const Point<int> globalToLocal (const Point<int>& screenPosition) = 0; | |||
| /** Converts a screen area to a position relative to the top-left of this component. */ | |||
| virtual const Rectangle<int> globalToLocal (const Rectangle<int>& screenPosition); | |||
| /** Minimises the window. */ | |||
| virtual void setMinimised (bool shouldBeMinimised) = 0; | |||
| @@ -87,7 +87,7 @@ void TooltipWindow::showFor (const String& tip) | |||
| Point<int> mousePos (Desktop::getMousePosition()); | |||
| if (getParentComponent() != 0) | |||
| mousePos = getParentComponent()->globalPositionToRelative (mousePos); | |||
| mousePos = getParentComponent()->getLocalPoint (0, mousePos); | |||
| int x, y, w, h; | |||
| getLookAndFeel().getTooltipSize (tip, w, h); | |||
| @@ -291,21 +291,19 @@ void TopLevelWindow::centreAroundComponent (Component* c, const int width, const | |||
| } | |||
| else | |||
| { | |||
| Point<int> p (c->relativePositionToGlobal (Point<int> ((c->getWidth() - width) / 2, | |||
| (c->getHeight() - height) / 2))); | |||
| Point<int> targetCentre (c->localPointToGlobal (c->getLocalBounds().getCentre())); | |||
| Rectangle<int> parentArea (c->getParentMonitorArea()); | |||
| if (getParentComponent() != 0) | |||
| { | |||
| p = getParentComponent()->globalPositionToRelative (p); | |||
| parentArea.setBounds (0, 0, getParentWidth(), getParentHeight()); | |||
| targetCentre = getParentComponent()->getLocalPoint (0, targetCentre); | |||
| parentArea = getParentComponent()->getLocalBounds(); | |||
| } | |||
| parentArea.reduce (12, 12); | |||
| setBounds (jlimit (parentArea.getX(), jmax (parentArea.getX(), parentArea.getRight() - width), p.getX()), | |||
| jlimit (parentArea.getY(), jmax (parentArea.getY(), parentArea.getBottom() - height), p.getY()), | |||
| setBounds (jlimit (parentArea.getX(), jmax (parentArea.getX(), parentArea.getRight() - width), targetCentre.getX() - width / 2), | |||
| jlimit (parentArea.getY(), jmax (parentArea.getY(), parentArea.getBottom() - height), targetCentre.getY() - height / 2), | |||
| width, height); | |||
| } | |||
| } | |||
| @@ -810,12 +810,12 @@ public: | |||
| const Rectangle<int> getBounds() const { return Rectangle<int> (wx, wy, ww, wh); } | |||
| const Point<int> getScreenPosition() const { return Point<int> (wx, wy); } | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -109,8 +109,8 @@ public: | |||
| const Rectangle<int> getBounds() const; | |||
| const Rectangle<int> getBounds (const bool global) const; | |||
| const Point<int> getScreenPosition() const; | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition); | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition); | |||
| void setAlpha (float newAlpha); | |||
| void setMinimised (bool shouldBeMinimised); | |||
| bool isMinimised() const; | |||
| @@ -539,12 +539,12 @@ const Point<int> UIViewComponentPeer::getScreenPosition() const | |||
| return getBounds (true).getPosition(); | |||
| } | |||
| const Point<int> UIViewComponentPeer::relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> UIViewComponentPeer::localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> UIViewComponentPeer::globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> UIViewComponentPeer::globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -863,7 +863,7 @@ void UIViewComponentPeer::globalFocusChanged (Component*) | |||
| { | |||
| Component* comp = dynamic_cast<Component*> (target); | |||
| Point<int> pos (comp->relativePositionToOtherComponent (component, Point<int>())); | |||
| Point<int> pos (component->getLocalPoint (comp, Point<int>())); | |||
| view->hiddenTextView.frame = CGRectMake (pos.getX(), pos.getY(), 0, 0); | |||
| updateHiddenTextContent (target); | |||
| @@ -76,7 +76,7 @@ public: | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (owner->relativePositionToOtherComponent (topComp, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (owner, Point<int>())); | |||
| NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner->getWidth(), (float) owner->getHeight()); | |||
| r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height); | |||
| @@ -158,8 +158,8 @@ public: | |||
| const Rectangle<int> getBounds (const bool global) const; | |||
| const Rectangle<int> getBounds() const; | |||
| const Point<int> getScreenPosition() const; | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition); | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition); | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition); | |||
| void setAlpha (float newAlpha); | |||
| void setMinimised (bool shouldBeMinimised); | |||
| bool isMinimised() const; | |||
| @@ -1050,12 +1050,12 @@ const Point<int> NSViewComponentPeer::getScreenPosition() const | |||
| return getBounds (true).getPosition(); | |||
| } | |||
| const Point<int> NSViewComponentPeer::relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> NSViewComponentPeer::localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> NSViewComponentPeer::globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> NSViewComponentPeer::globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -153,6 +153,14 @@ public: | |||
| [webView reload: nil]; | |||
| } | |||
| void mouseMove (const MouseEvent&) | |||
| { | |||
| // WebKit doesn't capture mouse-moves itself, so it seems the only way to make | |||
| // them work is to push them via this non-public method.. | |||
| if ([webView respondsToSelector: @selector (_updateMouseoverWithFakeEvent)]) | |||
| [webView performSelector: @selector (_updateMouseoverWithFakeEvent)]; | |||
| } | |||
| private: | |||
| WebView* webView; | |||
| DownloadClickDetector* clickListener; | |||
| @@ -256,8 +256,7 @@ public: | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (owner.relativePositionToOtherComponent (topComp, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (&owner, Point<int>())); | |||
| owner.setControlBounds (Rectangle<int> (pos.getX(), pos.getY(), owner.getWidth(), owner.getHeight())); | |||
| } | |||
| } | |||
| @@ -356,7 +355,7 @@ bool ActiveXControlComponent::createControl (const void* controlIID) | |||
| if (dynamic_cast <Win32ComponentPeer*> (peer) != 0) | |||
| { | |||
| const Point<int> pos (relativePositionToOtherComponent (getTopLevelComponent(), Point<int>())); | |||
| const Point<int> pos (getTopLevelComponent()->getLocalPoint (this, Point<int>())); | |||
| HWND hwnd = (HWND) peer->getNativeHandle(); | |||
| ScopedPointer<Pimpl> newControl (new Pimpl (hwnd, *this)); | |||
| @@ -649,12 +649,12 @@ public: | |||
| r.top + windowBorder.getTop()); | |||
| } | |||
| const Point<int> relativePositionToGlobal (const Point<int>& relativePosition) | |||
| const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
| { | |||
| return relativePosition + getScreenPosition(); | |||
| } | |||
| const Point<int> globalPositionToRelative (const Point<int>& screenPosition) | |||
| const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
| { | |||
| return screenPosition - getScreenPosition(); | |||
| } | |||
| @@ -1745,7 +1745,7 @@ private: | |||
| HRESULT __stdcall DragEnter (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) | |||
| { | |||
| updateFileList (pDataObject); | |||
| owner->handleFileDragMove (files, owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y))); | |||
| owner->handleFileDragMove (files, owner->globalToLocal (Point<int> (mousePos.x, mousePos.y))); | |||
| *pdwEffect = DROPEFFECT_COPY; | |||
| return S_OK; | |||
| } | |||
| @@ -1758,7 +1758,7 @@ private: | |||
| HRESULT __stdcall DragOver (DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) | |||
| { | |||
| owner->handleFileDragMove (files, owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y))); | |||
| owner->handleFileDragMove (files, owner->globalToLocal (Point<int> (mousePos.x, mousePos.y))); | |||
| *pdwEffect = DROPEFFECT_COPY; | |||
| return S_OK; | |||
| } | |||
| @@ -1766,7 +1766,7 @@ private: | |||
| HRESULT __stdcall Drop (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) | |||
| { | |||
| updateFileList (pDataObject); | |||
| owner->handleFileDragDrop (files, owner->globalPositionToRelative (Point<int> (mousePos.x, mousePos.y))); | |||
| owner->handleFileDragDrop (files, owner->globalToLocal (Point<int> (mousePos.x, mousePos.y))); | |||
| *pdwEffect = DROPEFFECT_COPY; | |||
| return S_OK; | |||
| } | |||