Browse Source

Multi-touch handling changes for Component class. 64-bit VST keypress fix.

tags/2021-05-28
Julian Storer 14 years ago
parent
commit
b317b47533
26 changed files with 414 additions and 403 deletions
  1. +214
    -200
      juce_amalgamated.cpp
  2. +20
    -22
      juce_amalgamated.h
  3. +15
    -0
      src/audio/audio_file_formats/juce_CoreAudioFormat.cpp
  4. +3
    -4
      src/audio/plugin_client/VST/juce_VST_Wrapper.cpp
  5. +5
    -2
      src/audio/plugin_client/VST/juce_VST_Wrapper.mm
  6. +1
    -1
      src/core/juce_StandardHeader.h
  7. +97
    -123
      src/gui/components/juce_Component.cpp
  8. +2
    -5
      src/gui/components/juce_Component.h
  9. +16
    -10
      src/gui/components/juce_Desktop.cpp
  10. +1
    -0
      src/gui/components/juce_Desktop.h
  11. +1
    -1
      src/gui/components/keyboard/juce_ModifierKeys.cpp
  12. +7
    -7
      src/gui/components/keyboard/juce_ModifierKeys.h
  13. +9
    -5
      src/gui/components/mouse/juce_MouseInputSource.cpp
  14. +3
    -3
      src/gui/components/mouse/juce_MouseInputSource.h
  15. +1
    -1
      src/gui/graphics/fonts/juce_GlyphArrangement.cpp
  16. +2
    -2
      src/gui/graphics/fonts/juce_GlyphArrangement.h
  17. +4
    -4
      src/gui/graphics/geometry/juce_Rectangle.h
  18. +2
    -2
      src/native/android/juce_android_Windowing.cpp
  19. +2
    -2
      src/native/linux/juce_linux_Windowing.cpp
  20. +1
    -1
      src/native/mac/juce_ios_UIViewComponentPeer.mm
  21. +1
    -1
      src/native/mac/juce_ios_Windowing.mm
  22. +2
    -2
      src/native/mac/juce_mac_CoreGraphicsContext.mm
  23. +1
    -1
      src/native/mac/juce_mac_NSViewComponent.mm
  24. +1
    -1
      src/native/mac/juce_mac_NSViewComponentPeer.mm
  25. +1
    -1
      src/native/mac/juce_mac_Windowing.mm
  26. +2
    -2
      src/native/windows/juce_win32_Windowing.cpp

+ 214
- 200
juce_amalgamated.cpp View File

@@ -41477,7 +41477,7 @@ public:
&& comp.hitTest (localPoint.getX(), localPoint.getY()); && comp.hitTest (localPoint.getX(), localPoint.getY());
} }


static const Point<int> convertFromParentSpace (const Component& comp, const Point<int>& pointInParentSpace)
static Point<int> convertFromParentSpace (const Component& comp, const Point<int>& pointInParentSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return pointInParentSpace - comp.getPosition(); return pointInParentSpace - comp.getPosition();
@@ -41485,7 +41485,7 @@ public:
return pointInParentSpace.toFloat().transformedBy (comp.affineTransform->inverted()).toInt() - comp.getPosition(); return pointInParentSpace.toFloat().transformedBy (comp.affineTransform->inverted()).toInt() - comp.getPosition();
} }


static const Rectangle<int> convertFromParentSpace (const Component& comp, const Rectangle<int>& areaInParentSpace)
static Rectangle<int> convertFromParentSpace (const Component& comp, const Rectangle<int>& areaInParentSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return areaInParentSpace - comp.getPosition(); return areaInParentSpace - comp.getPosition();
@@ -41493,7 +41493,7 @@ public:
return areaInParentSpace.toFloat().transformed (comp.affineTransform->inverted()).getSmallestIntegerContainer() - comp.getPosition(); return areaInParentSpace.toFloat().transformed (comp.affineTransform->inverted()).getSmallestIntegerContainer() - comp.getPosition();
} }


static const Point<int> convertToParentSpace (const Component& comp, const Point<int>& pointInLocalSpace)
static Point<int> convertToParentSpace (const Component& comp, const Point<int>& pointInLocalSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return pointInLocalSpace + comp.getPosition(); return pointInLocalSpace + comp.getPosition();
@@ -41501,7 +41501,7 @@ public:
return (pointInLocalSpace + comp.getPosition()).toFloat().transformedBy (*comp.affineTransform).toInt(); return (pointInLocalSpace + comp.getPosition()).toFloat().transformedBy (*comp.affineTransform).toInt();
} }


static const Rectangle<int> convertToParentSpace (const Component& comp, const Rectangle<int>& areaInLocalSpace)
static Rectangle<int> convertToParentSpace (const Component& comp, const Rectangle<int>& areaInLocalSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return areaInLocalSpace + comp.getPosition(); return areaInLocalSpace + comp.getPosition();
@@ -41510,7 +41510,7 @@ public:
} }


template <typename Type> template <typename Type>
static const Type convertFromDistantParentSpace (const Component* parent, const Component& target, Type coordInParent)
static Type convertFromDistantParentSpace (const Component* parent, const Component& target, const Type& coordInParent)
{ {
const Component* const directParent = target.getParentComponent(); const Component* const directParent = target.getParentComponent();
jassert (directParent != nullptr); jassert (directParent != nullptr);
@@ -41522,7 +41522,7 @@ public:
} }


template <typename Type> template <typename Type>
static const Type convertCoordinate (const Component* target, const Component* source, Type p)
static Type convertCoordinate (const Component* target, const Component* source, Type p)
{ {
while (source != nullptr) while (source != nullptr)
{ {
@@ -43528,66 +43528,41 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
return; return;
} }


if (! flags.mouseInsideFlag)
{
flags.mouseInsideFlag = true;
flags.mouseOverFlag = true;
flags.mouseDownFlag = false;

BailOutChecker checker (this);
if (flags.repaintOnMouseActivityFlag)
repaint();


if (flags.repaintOnMouseActivityFlag)
repaint();
BailOutChecker checker (this);


const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
mouseEnter (me);
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
mouseEnter (me);


if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;


Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseEnter, me);
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseEnter, me);


MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me);
}
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me);
} }


void Component::internalMouseExit (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseExit (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
{ {
BailOutChecker checker (this);

if (flags.mouseDownFlag)
{
internalMouseUp (source, relativePos, time, source.getCurrentModifiers().getRawFlags());

if (checker.shouldBailOut())
return;
}
if (flags.repaintOnMouseActivityFlag)
repaint();


if (flags.mouseInsideFlag || flags.mouseOverFlag)
{
flags.mouseInsideFlag = false;
flags.mouseOverFlag = false;
flags.mouseDownFlag = false;
BailOutChecker checker (this);


if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);


const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
mouseExit (me);
mouseExit (me);


if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;


Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseExit, me);
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseExit, me);


MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me);
}
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me);
} }


void Component::internalMouseDown (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseDown (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
@@ -43612,8 +43587,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
this, this, time, relativePos, time, this, this, time, relativePos, time,
source.getNumberOfMultipleClicks(), false); source.getNumberOfMultipleClicks(), false);


desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me);
return; return;
} }
} }
@@ -43643,9 +43617,6 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
return; return;
} }


flags.mouseDownFlag = true;
flags.mouseOverFlag = true;

if (flags.repaintOnMouseActivityFlag) if (flags.repaintOnMouseActivityFlag)
repaint(); repaint();


@@ -43657,84 +43628,70 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
if (checker.shouldBailOut()) if (checker.shouldBailOut())
return; return;


desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me);


MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me); MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me);
} }


void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers) void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers)
{ {
if (flags.mouseDownFlag)
{
flags.mouseDownFlag = false;
BailOutChecker checker (this);


BailOutChecker checker (this);
if (flags.repaintOnMouseActivityFlag)
repaint();


if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (source, relativePos,
oldModifiers, this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());


const MouseEvent me (source, relativePos,
oldModifiers, this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());
mouseUp (me);

if (checker.shouldBailOut())
return;


mouseUp (me);
Desktop& desktop = Desktop::getInstance();
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseUp, me);


if (checker.shouldBailOut())
return;
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);


Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseUp, me);
if (checker.shouldBailOut())
return;


MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
// check for double-click
if (me.getNumberOfClicks() >= 2)
{
mouseDoubleClick (me);


if (checker.shouldBailOut()) if (checker.shouldBailOut())
return; return;


// check for double-click
if (me.getNumberOfClicks() >= 2)
{
mouseDoubleClick (me);

if (checker.shouldBailOut())
return;

desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDoubleClick, me);
}
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDoubleClick, me);
} }
} }


void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
{ {
if (flags.mouseDownFlag)
{
flags.mouseOverFlag = reallyContains (relativePos, false);

BailOutChecker checker (this);
BailOutChecker checker (this);


const MouseEvent me (source, relativePos,
source.getCurrentModifiers(), this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());
const MouseEvent me (source, relativePos,
source.getCurrentModifiers(), this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());


mouseDrag (me);
mouseDrag (me);


if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;


Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDrag, me);
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseDrag, me);


MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDrag, me);
}
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDrag, me);
} }


void Component::internalMouseMove (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseMove (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
@@ -43752,15 +43709,12 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r
} }
else else
{ {
flags.mouseOverFlag = true;

mouseMove (me); mouseMove (me);


if (checker.shouldBailOut()) if (checker.shouldBailOut())
return; return;


desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseMove, me);
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseMove, me);


MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseMove, me); MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseMove, me);
} }
@@ -44138,27 +44092,47 @@ void Component::giveAwayFocus (const bool sendFocusLossEvent)


bool Component::isMouseOver (const bool includeChildren) const bool Component::isMouseOver (const bool includeChildren) const
{ {
if (flags.mouseOverFlag)
return true;
const Desktop& desktop = Desktop::getInstance();


if (includeChildren)
for (int i = desktop.getNumMouseSources(); --i >= 0;)
{ {
Desktop& desktop = Desktop::getInstance();
const MouseInputSource* const mi = desktop.getMouseSource(i);


for (int i = desktop.getNumMouseSources(); --i >= 0;)
{
Component* const c = desktop.getMouseSource(i)->getComponentUnderMouse();
Component* const c = mi->getComponentUnderMouse();


if (isParentOf (c) && c->flags.mouseOverFlag) // (mouseOverFlag checked in case it's being dragged outside the comp)
return true;
}
if ((c == this || (includeChildren && isParentOf (c)))
&& c->reallyContains (c->getLocalPoint (nullptr, mi->getScreenPosition()), false))
return true;
}

return false;
}

bool Component::isMouseButtonDown() const
{
const Desktop& desktop = Desktop::getInstance();

for (int i = desktop.getNumMouseSources(); --i >= 0;)
{
const MouseInputSource* const mi = desktop.getMouseSource(i);

if (mi->isDragging() && mi->getComponentUnderMouse() == this)
return true;
} }


return false; return false;
} }


bool Component::isMouseButtonDown() const noexcept { return flags.mouseDownFlag; }
bool Component::isMouseOverOrDragging() const noexcept { return flags.mouseOverFlag || flags.mouseDownFlag; }
bool Component::isMouseOverOrDragging() const
{
const Desktop& desktop = Desktop::getInstance();

for (int i = desktop.getNumMouseSources(); --i >= 0;)
if (desktop.getMouseSource(i)->getComponentUnderMouse() == this)
return true;

return false;
}


bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() noexcept bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() noexcept
{ {
@@ -44566,6 +44540,22 @@ void Desktop::handleAsyncUpdate()
focusListeners.call (&FocusChangeListener::globalFocusChanged, currentFocus); focusListeners.call (&FocusChangeListener::globalFocusChanged, currentFocus);
} }


void Desktop::resetTimer()
{
if (mouseListeners.size() == 0)
stopTimer();
else
startTimer (100);

lastFakeMouseMove = getMousePosition();
}

ListenerList <MouseListener>& Desktop::getMouseListeners()
{
resetTimer();
return mouseListeners;
}

void Desktop::addGlobalMouseListener (MouseListener* const listener) void Desktop::addGlobalMouseListener (MouseListener* const listener)
{ {
mouseListeners.add (listener); mouseListeners.add (listener);
@@ -44611,16 +44601,6 @@ void Desktop::sendMouseMove()
} }
} }


void Desktop::resetTimer()
{
if (mouseListeners.size() == 0)
stopTimer();
else
startTimer (100);

lastFakeMouseMove = getMousePosition();
}

void Desktop::setKioskModeComponent (Component* componentToUse, const bool allowMenusAndBars) void Desktop::setKioskModeComponent (Component* componentToUse, const bool allowMenusAndBars)
{ {
if (kioskModeComponent != componentToUse) if (kioskModeComponent != componentToUse)
@@ -63082,7 +63062,7 @@ ModifierKeys& ModifierKeys::operator= (const ModifierKeys& other) noexcept


ModifierKeys ModifierKeys::currentModifiers; ModifierKeys ModifierKeys::currentModifiers;


const ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
{ {
return currentModifiers; return currentModifiers;
} }
@@ -73580,7 +73560,7 @@ public:
return static_cast <Component*> (componentUnderMouse); return static_cast <Component*> (componentUnderMouse);
} }


const ModifierKeys getCurrentModifiers() const
ModifierKeys getCurrentModifiers() const
{ {
return ModifierKeys::getCurrentModifiers().withoutMouseButtons().withFlags (buttonState.getRawFlags()); return ModifierKeys::getCurrentModifiers().withoutMouseButtons().withFlags (buttonState.getRawFlags());
} }
@@ -73610,7 +73590,7 @@ public:
return nullptr; return nullptr;
} }


const Point<int> getScreenPosition() const
Point<int> getScreenPosition() const
{ {
// This needs to return the live position if possible, but it mustn't update the lastScreenPos // This needs to return the live position if possible, but it mustn't update the lastScreenPos
// value, because that can cause continuity problems. // value, because that can cause continuity problems.
@@ -73716,8 +73696,12 @@ public:


if (current != nullptr) if (current != nullptr)
{ {
WeakReference<Component> safeOldComp (current);
setButtons (screenPos, time, ModifierKeys()); setButtons (screenPos, time, ModifierKeys());
sendMouseExit (current, screenPos, time);

if (safeOldComp != nullptr)
sendMouseExit (current, screenPos, time);

buttonState = originalButtonState; buttonState = originalButtonState;
} }


@@ -74019,8 +74003,8 @@ bool MouseInputSource::canHover() const { return isMouse(); }
bool MouseInputSource::hasMouseWheel() const { return isMouse(); } bool MouseInputSource::hasMouseWheel() const { return isMouse(); }
int MouseInputSource::getIndex() const { return pimpl->index; } int MouseInputSource::getIndex() const { return pimpl->index; }
bool MouseInputSource::isDragging() const { return pimpl->isDragging(); } bool MouseInputSource::isDragging() const { return pimpl->isDragging(); }
const Point<int> MouseInputSource::getScreenPosition() const { return pimpl->getScreenPosition(); }
const ModifierKeys MouseInputSource::getCurrentModifiers() const { return pimpl->getCurrentModifiers(); }
Point<int> MouseInputSource::getScreenPosition() const { return pimpl->getScreenPosition(); }
ModifierKeys MouseInputSource::getCurrentModifiers() const { return pimpl->getCurrentModifiers(); }
Component* MouseInputSource::getComponentUnderMouse() const { return pimpl->getComponentUnderMouse(); } Component* MouseInputSource::getComponentUnderMouse() const { return pimpl->getComponentUnderMouse(); }
void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); } void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); }
int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); } int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); }
@@ -93447,7 +93431,7 @@ void GlyphArrangement::stretchRangeOfGlyphs (int startIndex, int num,
} }
} }


const Rectangle<float> GlyphArrangement::getBoundingBox (int startIndex, int num, const bool includeWhitespace) const
Rectangle<float> GlyphArrangement::getBoundingBox (int startIndex, int num, const bool includeWhitespace) const
{ {
jassert (startIndex >= 0); jassert (startIndex >= 0);


@@ -108537,6 +108521,21 @@ public:
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
int64 startSampleInFile, int numSamples) int64 startSampleInFile, int numSamples)
{ {
jassert (destSamples != nullptr);
const int64 samplesAvailable = lengthInSamples - startSampleInFile;

if (samplesAvailable < numSamples)
{
for (int i = numDestChannels; --i >= 0;)
if (destSamples[i] != nullptr)
zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * numSamples);

numSamples = (int) samplesAvailable;
}

if (numSamples <= 0)
return true;

OSStatus status = ExtAudioFileSeek (audioFileRef, startSampleInFile); OSStatus status = ExtAudioFileSeek (audioFileRef, startSampleInFile);
if (status != noErr) if (status != noErr)
return false; return false;
@@ -251296,7 +251295,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
currentModifiers = Win32ComponentPeer::currentModifiers; currentModifiers = Win32ComponentPeer::currentModifiers;
} }


const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
Win32ComponentPeer::updateKeyModifiers(); Win32ComponentPeer::updateKeyModifiers();


@@ -251499,7 +251498,7 @@ void Desktop::createMouseInputSources()
mouseSources.add (new MouseInputSource (0, true)); mouseSources.add (new MouseInputSource (0, true));
} }


const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
POINT mousePos; POINT mousePos;
GetCursorPos (&mousePos); GetCursorPos (&mousePos);
@@ -268009,7 +268008,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
currentModifiers = LinuxComponentPeer::currentModifiers; currentModifiers = LinuxComponentPeer::currentModifiers;
} }


const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
Window root, child; Window root, child;
int x, y, winx, winy; int x, y, winx, winy;
@@ -268184,7 +268183,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
&& (matchedDepth == desiredDepth); && (matchedDepth == desiredDepth);
} }


const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
Window root, child; Window root, child;
int x, y, winx, winy; int x, y, winx, winy;
@@ -271048,6 +271047,16 @@ namespace
{ {
return [NSString stringWithUTF8String: s.toUTF8()]; return [NSString stringWithUTF8String: s.toUTF8()];
} }

NSString* nsStringLiteral (const char* const s) noexcept
{
return [NSString stringWithUTF8String: s];
}

NSString* nsEmptyString() noexcept
{
return [NSString string];
}
} }


#endif // __JUCE_OSX_OBJCHELPERS_JUCEHEADER__ #endif // __JUCE_OSX_OBJCHELPERS_JUCEHEADER__
@@ -271795,7 +271804,7 @@ private:
if (req == nil) if (req == nil)
return nil; return nil;


[req setHTTPMethod: isPost ? @"POST" : @"GET"];
[req setHTTPMethod: nsStringLiteral (isPost ? "POST" : "GET")];
//[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; //[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData];


StringArray headerLines; StringArray headerLines;
@@ -273219,7 +273228,7 @@ String File::getVersion() const


if (info != nil) if (info != nil)
{ {
NSString* name = [info valueForKey: @"CFBundleShortVersionString"];
NSString* name = [info valueForKey: nsStringLiteral ("CFBundleShortVersionString")];


if (name != nil) if (name != nil)
result = nsStringToJuce (name); result = nsStringToJuce (name);
@@ -273260,7 +273269,7 @@ bool File::moveToTrash() const
return [[NSWorkspace sharedWorkspace] return [[NSWorkspace sharedWorkspace]
performFileOperation: NSWorkspaceRecycleOperation performFileOperation: NSWorkspaceRecycleOperation
source: [p stringByDeletingLastPathComponent] source: [p stringByDeletingLastPathComponent]
destination: @""
destination: nsEmptyString()
files: [NSArray arrayWithObject: [p lastPathComponent]] files: [NSArray arrayWithObject: [p lastPathComponent]]
tag: nil ]; tag: nil ];
#endif #endif
@@ -273383,7 +273392,7 @@ void File::revealToUser() const
{ {
#if ! JUCE_IOS #if ! JUCE_IOS
if (exists()) if (exists())
[[NSWorkspace sharedWorkspace] selectFile: juceStringToNS (getFullPathName()) inFileViewerRootedAtPath: @""];
[[NSWorkspace sharedWorkspace] selectFile: juceStringToNS (getFullPathName()) inFileViewerRootedAtPath: nsEmptyString()];
else if (getParentDirectory().exists()) else if (getParentDirectory().exists())
getParentDirectory().revealToUser(); getParentDirectory().revealToUser();
#endif #endif
@@ -274467,13 +274476,13 @@ void Font::getPlatformDefaultFontNames (String& defaultSans, String& defaultSeri
namespace namespace
{ {
template <class RectType> template <class RectType>
const Rectangle<int> convertToRectInt (const RectType& r)
Rectangle<int> convertToRectInt (const RectType& r)
{ {
return Rectangle<int> ((int) r.origin.x, (int) r.origin.y, (int) r.size.width, (int) r.size.height); return Rectangle<int> ((int) r.origin.x, (int) r.origin.y, (int) r.size.width, (int) r.size.height);
} }


template <class RectType> template <class RectType>
const Rectangle<float> convertToRectFloat (const RectType& r)
Rectangle<float> convertToRectFloat (const RectType& r)
{ {
return Rectangle<float> (r.origin.x, r.origin.y, r.size.width, r.size.height); return Rectangle<float> (r.origin.x, r.origin.y, r.size.width, r.size.height);
} }
@@ -275618,7 +275627,7 @@ bool KeyPress::isKeyCurrentlyDown (const int keyCode)


ModifierKeys UIViewComponentPeer::currentModifiers; ModifierKeys UIViewComponentPeer::currentModifiers;


const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
return UIViewComponentPeer::currentModifiers; return UIViewComponentPeer::currentModifiers;
} }
@@ -276558,7 +276567,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
return true; return true;
} }


const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
return juce_lastMousePos; return juce_lastMousePos;
} }
@@ -277422,7 +277431,7 @@ END_JUCE_NAMESPACE
(void) request; (void) request;
(void) frame; (void) frame;


NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];
NSURL* url = [actionInformation valueForKey: nsStringLiteral ("WebActionOriginalURLKey")];


if (ownerComponent->pageAboutToLoad (nsStringToJuce ([url absoluteString]))) if (ownerComponent->pageAboutToLoad (nsStringToJuce ([url absoluteString])))
[listener use]; [listener use];
@@ -277440,8 +277449,8 @@ public:
WebBrowserComponentInternal (WebBrowserComponent* owner) WebBrowserComponentInternal (WebBrowserComponent* owner)
{ {
webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)
frameName: @""
groupName: @""];
frameName: nsEmptyString()
groupName: nsEmptyString()];
setView (webView); setView (webView);


clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner]; clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner];
@@ -277466,7 +277475,7 @@ public:


if (postData != nullptr && postData->getSize() > 0) if (postData != nullptr && postData->getSize() > 0)
{ {
[r setHTTPMethod: @"POST"];
[r setHTTPMethod: nsStringLiteral ("POST")];
[r setHTTPBody: [NSData dataWithBytes: postData->getData() [r setHTTPBody: [NSData dataWithBytes: postData->getData()
length: postData->getSize()]]; length: postData->getSize()]];
} }
@@ -279051,7 +279060,7 @@ using namespace JUCE_NAMESPACE;
- (void) broadcastMessageCallback: (NSNotification*) n - (void) broadcastMessageCallback: (NSNotification*) n
{ {
NSDictionary* dict = (NSDictionary*) [n userInfo]; NSDictionary* dict = (NSDictionary*) [n userInfo];
const String messageString (nsStringToJuce ((NSString*) [dict valueForKey: @"message"]));
const String messageString (nsStringToJuce ((NSString*) [dict valueForKey: nsStringLiteral ("message")]));
MessageManager::getInstance()->deliverBroadcastMessage (messageString); MessageManager::getInstance()->deliverBroadcastMessage (messageString);
} }


@@ -279170,7 +279179,7 @@ bool MessageManager::postMessageToSystemQueue (Message* message)
void MessageManager::broadcastMessage (const String& message) void MessageManager::broadcastMessage (const String& message)
{ {
NSDictionary* info = [NSDictionary dictionaryWithObject: juceStringToNS (message) NSDictionary* info = [NSDictionary dictionaryWithObject: juceStringToNS (message)
forKey: @"message"];
forKey: nsStringLiteral ("message")];


[[NSDistributedNotificationCenter defaultCenter] postNotificationName: AppDelegateRedirector::getBroacastEventName() [[NSDistributedNotificationCenter defaultCenter] postNotificationName: AppDelegateRedirector::getBroacastEventName()
object: nil object: nil
@@ -279973,13 +279982,13 @@ void Font::getPlatformDefaultFontNames (String& defaultSans, String& defaultSeri
namespace namespace
{ {
template <class RectType> template <class RectType>
const Rectangle<int> convertToRectInt (const RectType& r)
Rectangle<int> convertToRectInt (const RectType& r)
{ {
return Rectangle<int> ((int) r.origin.x, (int) r.origin.y, (int) r.size.width, (int) r.size.height); return Rectangle<int> ((int) r.origin.x, (int) r.origin.y, (int) r.size.width, (int) r.size.height);
} }


template <class RectType> template <class RectType>
const Rectangle<float> convertToRectFloat (const RectType& r)
Rectangle<float> convertToRectFloat (const RectType& r)
{ {
return Rectangle<float> (r.origin.x, r.origin.y, r.size.width, r.size.height); return Rectangle<float> (r.origin.x, r.origin.y, r.size.width, r.size.height);
} }
@@ -281736,7 +281745,7 @@ void NSViewComponentPeer::updateKeysDown (NSEvent* ev, bool isKeyDown)
} }
} }


const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
return NSViewComponentPeer::currentModifiers; return NSViewComponentPeer::currentModifiers;
} }
@@ -282369,7 +282378,7 @@ BOOL NSViewComponentPeer::sendDragCallback (const int type, id <NSDraggingInfo>
NSPasteboard* pasteBoard = [sender draggingPasteboard]; NSPasteboard* pasteBoard = [sender draggingPasteboard];
StringArray files; StringArray files;


NSString* iTunesPasteboardType = @"CorePasteboardFlavorType 0x6974756E"; // 'itun'
NSString* iTunesPasteboardType = nsStringLiteral ("CorePasteboardFlavorType 0x6974756E"); // 'itun'


if (bestType == NSFilesPromisePboardType if (bestType == NSFilesPromisePboardType
&& [[pasteBoard types] containsObject: iTunesPasteboardType]) && [[pasteBoard types] containsObject: iTunesPasteboardType])
@@ -282379,13 +282388,13 @@ BOOL NSViewComponentPeer::sendDragCallback (const int type, id <NSDraggingInfo>
if ([list isKindOfClass: [NSDictionary class]]) if ([list isKindOfClass: [NSDictionary class]])
{ {
NSDictionary* iTunesDictionary = (NSDictionary*) list; NSDictionary* iTunesDictionary = (NSDictionary*) list;
NSArray* tracks = [iTunesDictionary valueForKey: @"Tracks"];
NSArray* tracks = [iTunesDictionary valueForKey: nsStringLiteral ("Tracks")];
NSEnumerator* enumerator = [tracks objectEnumerator]; NSEnumerator* enumerator = [tracks objectEnumerator];
NSDictionary* track; NSDictionary* track;


while ((track = [enumerator nextObject]) != nil) while ((track = [enumerator nextObject]) != nil)
{ {
NSURL* url = [NSURL URLWithString: [track valueForKey: @"Location"]];
NSURL* url = [NSURL URLWithString: [track valueForKey: nsStringLiteral ("Location")]];


if ([url isFileURL]) if ([url isFileURL])
files.add (nsStringToJuce ([url path])); files.add (nsStringToJuce ([url path]));
@@ -282769,7 +282778,7 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType
const String& title, const String& message, const String& title, const String& message,
Component* associatedComponent) Component* associatedComponent)
{ {
OSXMessageBox box (iconType, title, message, @"OK", nil, nil, 0, false);
OSXMessageBox box (iconType, title, message, nsStringLiteral ("OK"), nil, nil, 0, false);
(void) box.getResult(); (void) box.getResult();
} }


@@ -282777,7 +282786,7 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIcon
const String& title, const String& message, const String& title, const String& message,
Component* associatedComponent) Component* associatedComponent)
{ {
new OSXMessageBox (iconType, title, message, @"OK", nil, nil, 0, true);
new OSXMessageBox (iconType, title, message, nsStringLiteral ("OK"), nil, nil, 0, true);
} }


bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType,
@@ -282786,7 +282795,9 @@ bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType
ModalComponentManager::Callback* callback) ModalComponentManager::Callback* callback)
{ {
ScopedPointer<OSXMessageBox> mb (new OSXMessageBox (iconType, title, message, ScopedPointer<OSXMessageBox> mb (new OSXMessageBox (iconType, title, message,
@"OK", @"Cancel", nil, callback, callback != nullptr));
nsStringLiteral ("OK"),
nsStringLiteral ("Cancel"),
nil, callback, callback != nullptr));
if (callback == nullptr) if (callback == nullptr)
return mb->getResult() == 1; return mb->getResult() == 1;


@@ -282800,7 +282811,10 @@ int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconTy
ModalComponentManager::Callback* callback) ModalComponentManager::Callback* callback)
{ {
ScopedPointer<OSXMessageBox> mb (new OSXMessageBox (iconType, title, message, ScopedPointer<OSXMessageBox> mb (new OSXMessageBox (iconType, title, message,
@"Yes", @"Cancel", @"No", callback, callback != nullptr));
nsStringLiteral ("Yes"),
nsStringLiteral ("Cancel"),
nsStringLiteral ("No"),
callback, callback != nullptr));
if (callback == nullptr) if (callback == nullptr)
return mb->getResult(); return mb->getResult();


@@ -282874,7 +282888,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
return true; return true;
} }


const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
JUCE_AUTORELEASEPOOL JUCE_AUTORELEASEPOOL
const NSPoint p ([NSEvent mouseLocation]); const NSPoint p ([NSEvent mouseLocation]);
@@ -283226,7 +283240,7 @@ public:
componentPeerChanged(); componentPeerChanged();
} }


const Rectangle<int> getViewBounds() const
Rectangle<int> getViewBounds() const
{ {
NSRect r = [view frame]; NSRect r = [view frame];
return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height); return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height);
@@ -284122,7 +284136,7 @@ public:
{ {
NSMenuItem* item = [parent addItemWithTitle: juceStringToNS (name) NSMenuItem* item = [parent addItemWithTitle: juceStringToNS (name)
action: nil action: nil
keyEquivalent: @""];
keyEquivalent: nsEmptyString()];
[item setTag: tag]; [item setTag: tag];


NSMenu* sub = createMenu (child, name, menuId, tag); NSMenu* sub = createMenu (child, name, menuId, tag);
@@ -284226,7 +284240,7 @@ public:
NSString* text = juceStringToNS (iter.itemName.upToFirstOccurrenceOf ("<end>", false, true)); NSString* text = juceStringToNS (iter.itemName.upToFirstOccurrenceOf ("<end>", false, true));


if (text == nil) if (text == nil)
text = @"";
text = nsEmptyString();


if (iter.isSeparator) if (iter.isSeparator)
{ {
@@ -284236,7 +284250,7 @@ public:
{ {
NSMenuItem* item = [menuToAddTo addItemWithTitle: text NSMenuItem* item = [menuToAddTo addItemWithTitle: text
action: nil action: nil
keyEquivalent: @""];
keyEquivalent: nsEmptyString()];


[item setEnabled: false]; [item setEnabled: false];
} }
@@ -284244,7 +284258,7 @@ public:
{ {
NSMenuItem* item = [menuToAddTo addItemWithTitle: text NSMenuItem* item = [menuToAddTo addItemWithTitle: text
action: nil action: nil
keyEquivalent: @""];
keyEquivalent: nsEmptyString()];


[item setTag: iter.itemId]; [item setTag: iter.itemId];
[item setEnabled: iter.isEnabled]; [item setEnabled: iter.isEnabled];
@@ -284258,7 +284272,7 @@ public:
{ {
NSMenuItem* item = [menuToAddTo addItemWithTitle: text NSMenuItem* item = [menuToAddTo addItemWithTitle: text
action: @selector (menuItemInvoked:) action: @selector (menuItemInvoked:)
keyEquivalent: @""];
keyEquivalent: nsEmptyString()];


[item setTag: iter.itemId]; [item setTag: iter.itemId];
[item setEnabled: iter.isEnabled]; [item setEnabled: iter.isEnabled];
@@ -284341,7 +284355,7 @@ private:


static void flashMenuBar (NSMenu* menu) static void flashMenuBar (NSMenu* menu)
{ {
if ([[menu title] isEqualToString: @"Apple"])
if ([[menu title] isEqualToString: nsStringLiteral ("Apple")])
return; return;


[menu retain]; [menu retain];
@@ -284349,7 +284363,7 @@ private:
const unichar f35Key = NSF35FunctionKey; const unichar f35Key = NSF35FunctionKey;
NSString* f35String = [NSString stringWithCharacters: &f35Key length: 1]; NSString* f35String = [NSString stringWithCharacters: &f35Key length: 1];


NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"x"
NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: nsStringLiteral ("x")
action: nil action: nil
keyEquivalent: f35String]; keyEquivalent: f35String];
[item setTarget: nil]; [item setTarget: nil];
@@ -284504,11 +284518,11 @@ namespace MainMenuHelpers
NSMenuItem* item; NSMenuItem* item;


// Services... // Services...
item = [[NSMenuItem alloc] initWithTitle: NSLocalizedString (@"Services", nil)
action: nil keyEquivalent: @""];
item = [[NSMenuItem alloc] initWithTitle: NSLocalizedString (nsStringLiteral ("Services"), nil)
action: nil keyEquivalent: nsEmptyString()];
[menu addItem: item]; [menu addItem: item];
[item release]; [item release];
NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle: @"Services"];
NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle: nsStringLiteral ("Services")];
[menu setSubmenu: servicesMenu forItem: item]; [menu setSubmenu: servicesMenu forItem: item];
[NSApp setServicesMenu: servicesMenu]; [NSApp setServicesMenu: servicesMenu];
[servicesMenu release]; [servicesMenu release];
@@ -284516,20 +284530,20 @@ namespace MainMenuHelpers


// Hide + Show stuff... // Hide + Show stuff...
item = [[NSMenuItem alloc] initWithTitle: juceStringToNS ("Hide " + appName) item = [[NSMenuItem alloc] initWithTitle: juceStringToNS ("Hide " + appName)
action: @selector (hide:) keyEquivalent: @"h"];
action: @selector (hide:) keyEquivalent: nsStringLiteral ("h")];
[item setTarget: NSApp]; [item setTarget: NSApp];
[menu addItem: item]; [menu addItem: item];
[item release]; [item release];


item = [[NSMenuItem alloc] initWithTitle: NSLocalizedString (@"Hide Others", nil)
action: @selector (hideOtherApplications:) keyEquivalent: @"h"];
item = [[NSMenuItem alloc] initWithTitle: NSLocalizedString (nsStringLiteral ("Hide Others"), nil)
action: @selector (hideOtherApplications:) keyEquivalent: nsStringLiteral ("h")];
[item setKeyEquivalentModifierMask: NSCommandKeyMask | NSAlternateKeyMask]; [item setKeyEquivalentModifierMask: NSCommandKeyMask | NSAlternateKeyMask];
[item setTarget: NSApp]; [item setTarget: NSApp];
[menu addItem: item]; [menu addItem: item];
[item release]; [item release];


item = [[NSMenuItem alloc] initWithTitle: NSLocalizedString (@"Show All", nil)
action: @selector (unhideAllApplications:) keyEquivalent: @""];
item = [[NSMenuItem alloc] initWithTitle: NSLocalizedString (nsStringLiteral ("Show All"), nil)
action: @selector (unhideAllApplications:) keyEquivalent: nsEmptyString()];
[item setTarget: NSApp]; [item setTarget: NSApp];
[menu addItem: item]; [menu addItem: item];
[item release]; [item release];
@@ -284538,7 +284552,7 @@ namespace MainMenuHelpers


// Quit item.... // Quit item....
item = [[NSMenuItem alloc] initWithTitle: juceStringToNS ("Quit " + appName) item = [[NSMenuItem alloc] initWithTitle: juceStringToNS ("Quit " + appName)
action: @selector (terminate:) keyEquivalent: @"q"];
action: @selector (terminate:) keyEquivalent: nsStringLiteral ("q")];


[item setTarget: NSApp]; [item setTarget: NSApp];
[menu addItem: item]; [menu addItem: item];
@@ -284557,10 +284571,10 @@ namespace MainMenuHelpers
{ {
JUCE_AUTORELEASEPOOL JUCE_AUTORELEASEPOOL


NSMenu* mainMenu = [[NSMenu alloc] initWithTitle: @"MainMenu"];
NSMenuItem* item = [mainMenu addItemWithTitle: @"Apple" action: nil keyEquivalent: @""];
NSMenu* mainMenu = [[NSMenu alloc] initWithTitle: nsStringLiteral ("MainMenu")];
NSMenuItem* item = [mainMenu addItemWithTitle: nsStringLiteral ("Apple") action: nil keyEquivalent: nsEmptyString()];


NSMenu* appMenu = [[NSMenu alloc] initWithTitle: @"Apple"];
NSMenu* appMenu = [[NSMenu alloc] initWithTitle: nsStringLiteral ("Apple")];


[NSApp performSelector: @selector (setAppleMenu:) withObject: appMenu]; [NSApp performSelector: @selector (setAppleMenu:) withObject: appMenu];
[mainMenu setSubmenu: appMenu forItem: item]; [mainMenu setSubmenu: appMenu forItem: item];
@@ -284874,7 +284888,7 @@ static QTMovie* openMovieFromStream (InputStream* movieStream, File& movieFile)
movie = [QTMovie movieWithDataReference: [QTDataReference dataReferenceWithReferenceToData: [NSData dataWithBytes: temp.getData() movie = [QTMovie movieWithDataReference: [QTDataReference dataReferenceWithReferenceToData: [NSData dataWithBytes: temp.getData()
length: temp.getSize()] length: temp.getSize()]
name: [NSString stringWithUTF8String: suffixesToTry[i]] name: [NSString stringWithUTF8String: suffixesToTry[i]]
MIMEType: @""]
MIMEType: nsEmptyString()]
error: nil]; error: nil];


if (movie != 0) if (movie != 0)
@@ -285937,7 +285951,7 @@ END_JUCE_NAMESPACE
(void) request; (void) request;
(void) frame; (void) frame;


NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];
NSURL* url = [actionInformation valueForKey: nsStringLiteral ("WebActionOriginalURLKey")];


if (ownerComponent->pageAboutToLoad (nsStringToJuce ([url absoluteString]))) if (ownerComponent->pageAboutToLoad (nsStringToJuce ([url absoluteString])))
[listener use]; [listener use];
@@ -285955,8 +285969,8 @@ public:
WebBrowserComponentInternal (WebBrowserComponent* owner) WebBrowserComponentInternal (WebBrowserComponent* owner)
{ {
webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)
frameName: @""
groupName: @""];
frameName: nsEmptyString()
groupName: nsEmptyString()];
setView (webView); setView (webView);


clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner]; clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner];
@@ -285981,7 +285995,7 @@ public:


if (postData != nullptr && postData->getSize() > 0) if (postData != nullptr && postData->getSize() > 0)
{ {
[r setHTTPMethod: @"POST"];
[r setHTTPMethod: nsStringLiteral ("POST")];
[r setHTTPBody: [NSData dataWithBytes: postData->getData() [r setHTTPBody: [NSData dataWithBytes: postData->getData()
length: postData->getSize()]]; length: postData->getSize()]];
} }
@@ -288217,7 +288231,7 @@ END_JUCE_NAMESPACE
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: QTSampleBufferHostTimeAttribute]; NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: QTSampleBufferHostTimeAttribute];
#else #else
NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: @"hostTime"];
NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: nsStringLiteral ("hostTime")];
#endif #endif


int64 presentationTime = (hosttime != nil) int64 presentationTime = (hosttime != nil)
@@ -288314,10 +288328,10 @@ void CameraDevice::startRecordingToFile (const File& file, int quality)


if ([mediaType isEqualToString: QTMediaTypeVideo]) if ([mediaType isEqualToString: QTMediaTypeVideo])
options = [QTCompressionOptions compressionOptionsWithIdentifier: options = [QTCompressionOptions compressionOptionsWithIdentifier:
quality >= 1 ? @"QTCompressionOptionsSD480SizeH264Video"
: @"QTCompressionOptions240SizeH264Video"];
quality >= 1 ? nsStringLiteral ("QTCompressionOptionsSD480SizeH264Video")_
nsStringLiteral ("QTCompressionOptions240SizeH264Video")];
else if ([mediaType isEqualToString: QTMediaTypeSound]) else if ([mediaType isEqualToString: QTMediaTypeSound])
options = [QTCompressionOptions compressionOptionsWithIdentifier: @"QTCompressionOptionsHighQualityAACAudio"];
options = [QTCompressionOptions compressionOptionsWithIdentifier: nsStringLiteral ("QTCompressionOptionsHighQualityAACAudio")];


[d->fileOutput setCompressionOptions: options forConnection: connection]; [d->fileOutput setCompressionOptions: options forConnection: connection];
} }
@@ -292296,7 +292310,7 @@ void Desktop::createMouseInputSources()
mouseSources.add (new MouseInputSource (i, false)); mouseSources.add (new MouseInputSource (i, false));
} }


const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
return AndroidComponentPeer::lastMousePos; return AndroidComponentPeer::lastMousePos;
} }
@@ -292317,7 +292331,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
currentModifiers = AndroidComponentPeer::currentModifiers; currentModifiers = AndroidComponentPeer::currentModifiers;
} }


const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
return AndroidComponentPeer::currentModifiers; return AndroidComponentPeer::currentModifiers;
} }


+ 20
- 22
juce_amalgamated.h View File

@@ -73,7 +73,7 @@ namespace JuceDummyNamespace {}
*/ */
#define JUCE_MAJOR_VERSION 1 #define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 54 #define JUCE_MINOR_VERSION 54
#define JUCE_BUILDNUMBER 18
#define JUCE_BUILDNUMBER 19


/** Current Juce version number. /** Current Juce version number.


@@ -23937,21 +23937,21 @@ public:
/** Middle mouse button flag. */ /** Middle mouse button flag. */
middleButtonModifier = 64, middleButtonModifier = 64,


#if JUCE_MAC
#if JUCE_MAC
/** Command key flag - on windows this is the same as the CTRL key flag. */ /** Command key flag - on windows this is the same as the CTRL key flag. */
commandModifier = 8, commandModifier = 8,


/** Popup menu flag - on windows this is the same as rightButtonModifier, on the /** Popup menu flag - on windows this is the same as rightButtonModifier, on the
Mac it's the same as (rightButtonModifier | ctrlModifier). */ Mac it's the same as (rightButtonModifier | ctrlModifier). */
popupMenuClickModifier = rightButtonModifier | ctrlModifier, popupMenuClickModifier = rightButtonModifier | ctrlModifier,
#else
#else
/** Command key flag - on windows this is the same as the CTRL key flag. */ /** Command key flag - on windows this is the same as the CTRL key flag. */
commandModifier = ctrlModifier, commandModifier = ctrlModifier,


/** Popup menu flag - on windows this is the same as rightButtonModifier, on the /** Popup menu flag - on windows this is the same as rightButtonModifier, on the
Mac it's the same as (rightButtonModifier | ctrlModifier). */ Mac it's the same as (rightButtonModifier | ctrlModifier). */
popupMenuClickModifier = rightButtonModifier, popupMenuClickModifier = rightButtonModifier,
#endif
#endif


/** Represents a combination of all the shift, alt, ctrl and command key modifiers. */ /** Represents a combination of all the shift, alt, ctrl and command key modifiers. */
allKeyboardModifiers = shiftModifier | ctrlModifier | altModifier | commandModifier, allKeyboardModifiers = shiftModifier | ctrlModifier | altModifier | commandModifier,
@@ -23961,10 +23961,10 @@ public:
}; };


/** Returns a copy of only the mouse-button flags */ /** Returns a copy of only the mouse-button flags */
const ModifierKeys withOnlyMouseButtons() const noexcept { return ModifierKeys (flags & allMouseButtonModifiers); }
ModifierKeys withOnlyMouseButtons() const noexcept { return ModifierKeys (flags & allMouseButtonModifiers); }


/** Returns a copy of only the non-mouse flags */ /** Returns a copy of only the non-mouse flags */
const ModifierKeys withoutMouseButtons() const noexcept { return ModifierKeys (flags & ~allMouseButtonModifiers); }
ModifierKeys withoutMouseButtons() const noexcept { return ModifierKeys (flags & ~allMouseButtonModifiers); }


bool operator== (const ModifierKeys& other) const noexcept { return flags == other.flags; } bool operator== (const ModifierKeys& other) const noexcept { return flags == other.flags; }
bool operator!= (const ModifierKeys& other) const noexcept { return flags != other.flags; } bool operator!= (const ModifierKeys& other) const noexcept { return flags != other.flags; }
@@ -23986,7 +23986,7 @@ public:


@see getCurrentModifiersRealtime @see getCurrentModifiersRealtime
*/ */
static const ModifierKeys getCurrentModifiers() noexcept;
static ModifierKeys getCurrentModifiers() noexcept;


/** Creates a ModifierKeys object to represent the current state of the /** Creates a ModifierKeys object to represent the current state of the
keyboard and mouse buttons. keyboard and mouse buttons.
@@ -24002,7 +24002,7 @@ public:
update the value returned by getCurrentModifiers(), which could cause subtle changes update the value returned by getCurrentModifiers(), which could cause subtle changes
in the behaviour of some components. in the behaviour of some components.
*/ */
static const ModifierKeys getCurrentModifiersRealtime() noexcept;
static ModifierKeys getCurrentModifiersRealtime() noexcept;


private: private:


@@ -26185,12 +26185,12 @@ public:
This is only relevent for floating-point rectangles, of course. This is only relevent for floating-point rectangles, of course.
@see toFloat() @see toFloat()
*/ */
const Rectangle<int> getSmallestIntegerContainer() const noexcept
Rectangle<int> getSmallestIntegerContainer() const noexcept
{ {
const int x1 = (int) std::floor (static_cast<float> (x)); const int x1 = (int) std::floor (static_cast<float> (x));
const int y1 = (int) std::floor (static_cast<float> (y)); const int y1 = (int) std::floor (static_cast<float> (y));
const int x2 = (int) std::ceil (static_cast<float> (x + w));
const int y2 = (int) std::ceil (static_cast<float> (y + h));
const int x2 = (int) std::ceil (static_cast<float> (x + w));
const int y2 = (int) std::ceil (static_cast<float> (y + h));


return Rectangle<int> (x1, y1, x2 - x1, y2 - y1); return Rectangle<int> (x1, y1, x2 - x1, y2 - y1);
} }
@@ -26221,7 +26221,7 @@ public:
Obviously this is mainly useful for rectangles that use integer types. Obviously this is mainly useful for rectangles that use integer types.
@see getSmallestIntegerContainer @see getSmallestIntegerContainer
*/ */
const Rectangle<float> toFloat() const noexcept
Rectangle<float> toFloat() const noexcept
{ {
return Rectangle<float> (static_cast<float> (x), static_cast<float> (y), return Rectangle<float> (static_cast<float> (x), static_cast<float> (y),
static_cast<float> (w), static_cast<float> (h)); static_cast<float> (w), static_cast<float> (h));
@@ -32500,7 +32500,7 @@ public:


@see isMouseButtonDownAnywhere, isMouseOver, isMouseOverOrDragging @see isMouseButtonDownAnywhere, isMouseOver, isMouseOverOrDragging
*/ */
bool isMouseButtonDown() const noexcept;
bool isMouseButtonDown() const;


/** True if the mouse is over this component, or if it's being dragged in this component. /** True if the mouse is over this component, or if it's being dragged in this component.


@@ -32508,7 +32508,7 @@ public:


@see isMouseOver, isMouseButtonDown, isMouseButtonDownAnywhere @see isMouseOver, isMouseButtonDown, isMouseButtonDownAnywhere
*/ */
bool isMouseOverOrDragging() const noexcept;
bool isMouseOverOrDragging() const;


/** Returns true if a mouse button is currently down. /** Returns true if a mouse button is currently down.


@@ -32989,9 +32989,6 @@ private:
bool bufferToImageFlag : 1; bool bufferToImageFlag : 1;
bool bringToFrontOnClickFlag : 1; bool bringToFrontOnClickFlag : 1;
bool repaintOnMouseActivityFlag : 1; bool repaintOnMouseActivityFlag : 1;
bool mouseDownFlag : 1;
bool mouseOverFlag : 1;
bool mouseInsideFlag : 1;
bool currentlyModalFlag : 1; bool currentlyModalFlag : 1;
bool isDisabledFlag : 1; bool isDisabledFlag : 1;
bool childCompFocusedFlag : 1; bool childCompFocusedFlag : 1;
@@ -34462,6 +34459,7 @@ private:


void timerCallback(); void timerCallback();
void resetTimer(); void resetTimer();
ListenerList <MouseListener>& getMouseListeners();


int getNumDisplayMonitors() const noexcept; int getNumDisplayMonitors() const noexcept;
const Rectangle<int> getDisplayMonitorCoordinates (int index, bool clippedToWorkArea) const noexcept; const Rectangle<int> getDisplayMonitorCoordinates (int index, bool clippedToWorkArea) const noexcept;
@@ -57762,7 +57760,7 @@ public:
/** Returns the y position of the bottom of the glyph. */ /** Returns the y position of the bottom of the glyph. */
float getBottom() const { return y + font.getDescent(); } float getBottom() const { return y + font.getDescent(); }
/** Returns the bounds of the glyph. */ /** Returns the bounds of the glyph. */
const Rectangle<float> getBounds() const { return Rectangle<float> (x, getTop(), w, font.getHeight()); }
Rectangle<float> getBounds() const { return Rectangle<float> (x, getTop(), w, font.getHeight()); }


/** Shifts the glyph's position by a relative amount. */ /** Shifts the glyph's position by a relative amount. */
void moveBy (float deltaX, float deltaY); void moveBy (float deltaX, float deltaY);
@@ -57941,7 +57939,7 @@ public:
@param includeWhitespace if true, the extent of any whitespace characters will also @param includeWhitespace if true, the extent of any whitespace characters will also
be taken into account be taken into account
*/ */
const Rectangle<float> getBoundingBox (int startIndex, int numGlyphs, bool includeWhitespace) const;
Rectangle<float> getBoundingBox (int startIndex, int numGlyphs, bool includeWhitespace) const;


/** Shifts a set of glyphs by a given amount. /** Shifts a set of glyphs by a given amount.


@@ -62943,12 +62941,12 @@ public:
bool isDragging() const; bool isDragging() const;


/** Returns the last-known screen position of this source. */ /** Returns the last-known screen position of this source. */
const Point<int> getScreenPosition() const;
Point<int> getScreenPosition() const;


/** Returns a set of modifiers that indicate which buttons are currently /** Returns a set of modifiers that indicate which buttons are currently
held down on this device. held down on this device.
*/ */
const ModifierKeys getCurrentModifiers() const;
ModifierKeys getCurrentModifiers() const;


/** Returns the component that was last known to be under this pointer. */ /** Returns the component that was last known to be under this pointer. */
Component* getComponentUnderMouse() const; Component* getComponentUnderMouse() const;
@@ -63025,7 +63023,7 @@ private:
friend class MouseInputSourceInternal; friend class MouseInputSourceInternal;
ScopedPointer<MouseInputSourceInternal> pimpl; ScopedPointer<MouseInputSourceInternal> pimpl;


static const Point<int> getCurrentMousePosition();
static Point<int> getCurrentMousePosition();


JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MouseInputSource); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MouseInputSource);
}; };


+ 15
- 0
src/audio/audio_file_formats/juce_CoreAudioFormat.cpp View File

@@ -135,6 +135,21 @@ public:
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
int64 startSampleInFile, int numSamples) int64 startSampleInFile, int numSamples)
{ {
jassert (destSamples != nullptr);
const int64 samplesAvailable = lengthInSamples - startSampleInFile;
if (samplesAvailable < numSamples)
{
for (int i = numDestChannels; --i >= 0;)
if (destSamples[i] != nullptr)
zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * numSamples);
numSamples = (int) samplesAvailable;
}
if (numSamples <= 0)
return true;
OSStatus status = ExtAudioFileSeek (audioFileRef, startSampleInFile); OSStatus status = ExtAudioFileSeek (audioFileRef, startSampleInFile);
if (status != noErr) if (status != noErr)
return false; return false;


+ 3
- 4
src/audio/plugin_client/VST/juce_VST_Wrapper.cpp View File

@@ -155,7 +155,7 @@ BEGIN_JUCE_NAMESPACE
extern void detachComponentFromWindowRef (Component* component, void* nsWindow); extern void detachComponentFromWindowRef (Component* component, void* nsWindow);
extern void setNativeHostWindowSize (void* nsWindow, Component* editorComp, int newWidth, int newHeight, const PluginHostType& host); extern void setNativeHostWindowSize (void* nsWindow, Component* editorComp, int newWidth, int newHeight, const PluginHostType& host);
extern void checkWindowVisibility (void* nsWindow, Component* component); extern void checkWindowVisibility (void* nsWindow, Component* component);
extern void forwardCurrentKeyEventToHost (Component* component);
extern bool forwardCurrentKeyEventToHost (Component* component);
#endif #endif
#if JUCE_LINUX #if JUCE_LINUX
@@ -1275,12 +1275,11 @@ public:
} }
#if JUCE_MAC #if JUCE_MAC
bool keyPressed (const KeyPress& kp)
bool keyPressed (const KeyPress&)
{ {
// If we have an unused keypress, move the key-focus to a host window // If we have an unused keypress, move the key-focus to a host window
// and re-inject the event.. // and re-inject the event..
forwardCurrentKeyEventToHost (this);
return true;
return forwardCurrentKeyEventToHost (this);
} }
#endif #endif


+ 5
- 2
src/audio/plugin_client/VST/juce_VST_Wrapper.mm View File

@@ -229,12 +229,15 @@ void checkWindowVisibility (void* nsWindow, Component* comp)
#endif #endif
} }
void forwardCurrentKeyEventToHost (Component* comp)
bool forwardCurrentKeyEventToHost (Component* comp)
{ {
#if ! JUCE_64BIT
#if JUCE_64BIT
return false;
#else
NSWindow* win = [(NSView*) comp->getWindowHandle() window]; NSWindow* win = [(NSView*) comp->getWindowHandle() window];
[[win parentWindow] makeKeyWindow]; [[win parentWindow] makeKeyWindow];
[NSApp postEvent: [NSApp currentEvent] atStart: YES]; [NSApp postEvent: [NSApp currentEvent] atStart: YES];
return true;
#endif #endif
} }


+ 1
- 1
src/core/juce_StandardHeader.h View File

@@ -33,7 +33,7 @@
*/ */
#define JUCE_MAJOR_VERSION 1 #define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 54 #define JUCE_MINOR_VERSION 54
#define JUCE_BUILDNUMBER 18
#define JUCE_BUILDNUMBER 19
/** Current Juce version number. /** Current Juce version number.


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

@@ -236,7 +236,7 @@ public:
&& comp.hitTest (localPoint.getX(), localPoint.getY()); && comp.hitTest (localPoint.getX(), localPoint.getY());
} }
static const Point<int> convertFromParentSpace (const Component& comp, const Point<int>& pointInParentSpace)
static Point<int> convertFromParentSpace (const Component& comp, const Point<int>& pointInParentSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return pointInParentSpace - comp.getPosition(); return pointInParentSpace - comp.getPosition();
@@ -244,7 +244,7 @@ public:
return pointInParentSpace.toFloat().transformedBy (comp.affineTransform->inverted()).toInt() - comp.getPosition(); return pointInParentSpace.toFloat().transformedBy (comp.affineTransform->inverted()).toInt() - comp.getPosition();
} }
static const Rectangle<int> convertFromParentSpace (const Component& comp, const Rectangle<int>& areaInParentSpace)
static Rectangle<int> convertFromParentSpace (const Component& comp, const Rectangle<int>& areaInParentSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return areaInParentSpace - comp.getPosition(); return areaInParentSpace - comp.getPosition();
@@ -252,7 +252,7 @@ public:
return areaInParentSpace.toFloat().transformed (comp.affineTransform->inverted()).getSmallestIntegerContainer() - comp.getPosition(); return areaInParentSpace.toFloat().transformed (comp.affineTransform->inverted()).getSmallestIntegerContainer() - comp.getPosition();
} }
static const Point<int> convertToParentSpace (const Component& comp, const Point<int>& pointInLocalSpace)
static Point<int> convertToParentSpace (const Component& comp, const Point<int>& pointInLocalSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return pointInLocalSpace + comp.getPosition(); return pointInLocalSpace + comp.getPosition();
@@ -260,7 +260,7 @@ public:
return (pointInLocalSpace + comp.getPosition()).toFloat().transformedBy (*comp.affineTransform).toInt(); return (pointInLocalSpace + comp.getPosition()).toFloat().transformedBy (*comp.affineTransform).toInt();
} }
static const Rectangle<int> convertToParentSpace (const Component& comp, const Rectangle<int>& areaInLocalSpace)
static Rectangle<int> convertToParentSpace (const Component& comp, const Rectangle<int>& areaInLocalSpace)
{ {
if (comp.affineTransform == nullptr) if (comp.affineTransform == nullptr)
return areaInLocalSpace + comp.getPosition(); return areaInLocalSpace + comp.getPosition();
@@ -269,7 +269,7 @@ public:
} }
template <typename Type> template <typename Type>
static const Type convertFromDistantParentSpace (const Component* parent, const Component& target, Type coordInParent)
static Type convertFromDistantParentSpace (const Component* parent, const Component& target, const Type& coordInParent)
{ {
const Component* const directParent = target.getParentComponent(); const Component* const directParent = target.getParentComponent();
jassert (directParent != nullptr); jassert (directParent != nullptr);
@@ -281,7 +281,7 @@ public:
} }
template <typename Type> template <typename Type>
static const Type convertCoordinate (const Component* target, const Component* source, Type p)
static Type convertCoordinate (const Component* target, const Component* source, Type p)
{ {
while (source != nullptr) while (source != nullptr)
{ {
@@ -2326,66 +2326,41 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
return; return;
} }
if (! flags.mouseInsideFlag)
{
flags.mouseInsideFlag = true;
flags.mouseOverFlag = true;
flags.mouseDownFlag = false;
BailOutChecker checker (this);
if (flags.repaintOnMouseActivityFlag)
repaint();
if (flags.repaintOnMouseActivityFlag)
repaint();
BailOutChecker checker (this);
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
mouseEnter (me);
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
mouseEnter (me);
if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;
Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseEnter, me);
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseEnter, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me);
}
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me);
} }
void Component::internalMouseExit (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseExit (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
{ {
BailOutChecker checker (this);
if (flags.mouseDownFlag)
{
internalMouseUp (source, relativePos, time, source.getCurrentModifiers().getRawFlags());
if (checker.shouldBailOut())
return;
}
if (flags.repaintOnMouseActivityFlag)
repaint();
if (flags.mouseInsideFlag || flags.mouseOverFlag)
{
flags.mouseInsideFlag = false;
flags.mouseOverFlag = false;
flags.mouseDownFlag = false;
BailOutChecker checker (this);
if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
this, this, time, relativePos, time, 0, false);
mouseExit (me);
mouseExit (me);
if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;
Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseExit, me);
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseExit, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me);
}
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me);
} }
//============================================================================== //==============================================================================
@@ -2411,8 +2386,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
this, this, time, relativePos, time, this, this, time, relativePos, time,
source.getNumberOfMultipleClicks(), false); source.getNumberOfMultipleClicks(), false);
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me);
return; return;
} }
} }
@@ -2442,9 +2416,6 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
return; return;
} }
flags.mouseDownFlag = true;
flags.mouseOverFlag = true;
if (flags.repaintOnMouseActivityFlag) if (flags.repaintOnMouseActivityFlag)
repaint(); repaint();
@@ -2456,8 +2427,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
if (checker.shouldBailOut()) if (checker.shouldBailOut())
return; return;
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me); MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me);
} }
@@ -2465,76 +2435,63 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
//============================================================================== //==============================================================================
void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers) void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers)
{ {
if (flags.mouseDownFlag)
{
flags.mouseDownFlag = false;
BailOutChecker checker (this);
BailOutChecker checker (this);
if (flags.repaintOnMouseActivityFlag)
repaint();
if (flags.repaintOnMouseActivityFlag)
repaint();
const MouseEvent me (source, relativePos,
oldModifiers, this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());
const MouseEvent me (source, relativePos,
oldModifiers, this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());
mouseUp (me);
mouseUp (me);
if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;
Desktop& desktop = Desktop::getInstance();
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseUp, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseUp, me);
if (checker.shouldBailOut())
return;
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
// check for double-click
if (me.getNumberOfClicks() >= 2)
{
mouseDoubleClick (me);
if (checker.shouldBailOut()) if (checker.shouldBailOut())
return; return;
// check for double-click
if (me.getNumberOfClicks() >= 2)
{
mouseDoubleClick (me);
if (checker.shouldBailOut())
return;
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDoubleClick, me);
}
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDoubleClick, me);
} }
} }
void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
{ {
if (flags.mouseDownFlag)
{
flags.mouseOverFlag = reallyContains (relativePos, false);
BailOutChecker checker (this);
BailOutChecker checker (this);
const MouseEvent me (source, relativePos,
source.getCurrentModifiers(), this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());
const MouseEvent me (source, relativePos,
source.getCurrentModifiers(), this, this, time,
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
source.getLastMouseDownTime(),
source.getNumberOfMultipleClicks(),
source.hasMouseMovedSignificantlySincePressed());
mouseDrag (me);
mouseDrag (me);
if (checker.shouldBailOut())
return;
if (checker.shouldBailOut())
return;
Desktop& desktop = Desktop::getInstance();
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDrag, me);
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseDrag, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDrag, me);
}
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDrag, me);
} }
void Component::internalMouseMove (MouseInputSource& source, const Point<int>& relativePos, const Time& time) void Component::internalMouseMove (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
@@ -2552,15 +2509,12 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r
} }
else else
{ {
flags.mouseOverFlag = true;
mouseMove (me); mouseMove (me);
if (checker.shouldBailOut()) if (checker.shouldBailOut())
return; return;
desktop.resetTimer();
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseMove, me);
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseMove, me);
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseMove, me); MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseMove, me);
} }
@@ -2941,27 +2895,47 @@ void Component::giveAwayFocus (const bool sendFocusLossEvent)
//============================================================================== //==============================================================================
bool Component::isMouseOver (const bool includeChildren) const bool Component::isMouseOver (const bool includeChildren) const
{ {
if (flags.mouseOverFlag)
return true;
const Desktop& desktop = Desktop::getInstance();
if (includeChildren)
for (int i = desktop.getNumMouseSources(); --i >= 0;)
{ {
Desktop& desktop = Desktop::getInstance();
const MouseInputSource* const mi = desktop.getMouseSource(i);
for (int i = desktop.getNumMouseSources(); --i >= 0;)
{
Component* const c = desktop.getMouseSource(i)->getComponentUnderMouse();
Component* const c = mi->getComponentUnderMouse();
if (isParentOf (c) && c->flags.mouseOverFlag) // (mouseOverFlag checked in case it's being dragged outside the comp)
return true;
}
if ((c == this || (includeChildren && isParentOf (c)))
&& c->reallyContains (c->getLocalPoint (nullptr, mi->getScreenPosition()), false))
return true;
} }
return false; return false;
} }
bool Component::isMouseButtonDown() const noexcept { return flags.mouseDownFlag; }
bool Component::isMouseOverOrDragging() const noexcept { return flags.mouseOverFlag || flags.mouseDownFlag; }
bool Component::isMouseButtonDown() const
{
const Desktop& desktop = Desktop::getInstance();
for (int i = desktop.getNumMouseSources(); --i >= 0;)
{
const MouseInputSource* const mi = desktop.getMouseSource(i);
if (mi->isDragging() && mi->getComponentUnderMouse() == this)
return true;
}
return false;
}
bool Component::isMouseOverOrDragging() const
{
const Desktop& desktop = Desktop::getInstance();
for (int i = desktop.getNumMouseSources(); --i >= 0;)
if (desktop.getMouseSource(i)->getComponentUnderMouse() == this)
return true;
return false;
}
bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() noexcept bool JUCE_CALLTYPE Component::isMouseButtonDownAnywhere() noexcept
{ {


+ 2
- 5
src/gui/components/juce_Component.h View File

@@ -1769,7 +1769,7 @@ public:
@see isMouseButtonDownAnywhere, isMouseOver, isMouseOverOrDragging @see isMouseButtonDownAnywhere, isMouseOver, isMouseOverOrDragging
*/ */
bool isMouseButtonDown() const noexcept;
bool isMouseButtonDown() const;
/** True if the mouse is over this component, or if it's being dragged in this component. /** True if the mouse is over this component, or if it's being dragged in this component.
@@ -1777,7 +1777,7 @@ public:
@see isMouseOver, isMouseButtonDown, isMouseButtonDownAnywhere @see isMouseOver, isMouseButtonDown, isMouseButtonDownAnywhere
*/ */
bool isMouseOverOrDragging() const noexcept;
bool isMouseOverOrDragging() const;
/** Returns true if a mouse button is currently down. /** Returns true if a mouse button is currently down.
@@ -2271,9 +2271,6 @@ private:
bool bufferToImageFlag : 1; bool bufferToImageFlag : 1;
bool bringToFrontOnClickFlag : 1; bool bringToFrontOnClickFlag : 1;
bool repaintOnMouseActivityFlag : 1; bool repaintOnMouseActivityFlag : 1;
bool mouseDownFlag : 1;
bool mouseOverFlag : 1;
bool mouseInsideFlag : 1;
bool currentlyModalFlag : 1; bool currentlyModalFlag : 1;
bool isDisabledFlag : 1; bool isDisabledFlag : 1;
bool childCompFocusedFlag : 1; bool childCompFocusedFlag : 1;


+ 16
- 10
src/gui/components/juce_Desktop.cpp View File

@@ -352,6 +352,22 @@ void Desktop::handleAsyncUpdate()
} }
//============================================================================== //==============================================================================
void Desktop::resetTimer()
{
if (mouseListeners.size() == 0)
stopTimer();
else
startTimer (100);
lastFakeMouseMove = getMousePosition();
}
ListenerList <MouseListener>& Desktop::getMouseListeners()
{
resetTimer();
return mouseListeners;
}
void Desktop::addGlobalMouseListener (MouseListener* const listener) void Desktop::addGlobalMouseListener (MouseListener* const listener)
{ {
mouseListeners.add (listener); mouseListeners.add (listener);
@@ -397,16 +413,6 @@ void Desktop::sendMouseMove()
} }
} }
void Desktop::resetTimer()
{
if (mouseListeners.size() == 0)
stopTimer();
else
startTimer (100);
lastFakeMouseMove = getMousePosition();
}
//============================================================================== //==============================================================================
void Desktop::setKioskModeComponent (Component* componentToUse, const bool allowMenusAndBars) void Desktop::setKioskModeComponent (Component* componentToUse, const bool allowMenusAndBars)
{ {


+ 1
- 0
src/gui/components/juce_Desktop.h View File

@@ -392,6 +392,7 @@ private:
void timerCallback(); void timerCallback();
void resetTimer(); void resetTimer();
ListenerList <MouseListener>& getMouseListeners();
int getNumDisplayMonitors() const noexcept; int getNumDisplayMonitors() const noexcept;
const Rectangle<int> getDisplayMonitorCoordinates (int index, bool clippedToWorkArea) const noexcept; const Rectangle<int> getDisplayMonitorCoordinates (int index, bool clippedToWorkArea) const noexcept;


+ 1
- 1
src/gui/components/keyboard/juce_ModifierKeys.cpp View File

@@ -49,7 +49,7 @@ ModifierKeys& ModifierKeys::operator= (const ModifierKeys& other) noexcept
ModifierKeys ModifierKeys::currentModifiers; ModifierKeys ModifierKeys::currentModifiers;
const ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
{ {
return currentModifiers; return currentModifiers;
} }


+ 7
- 7
src/gui/components/keyboard/juce_ModifierKeys.h View File

@@ -128,21 +128,21 @@ public:
/** Middle mouse button flag. */ /** Middle mouse button flag. */
middleButtonModifier = 64, middleButtonModifier = 64,
#if JUCE_MAC
#if JUCE_MAC
/** Command key flag - on windows this is the same as the CTRL key flag. */ /** Command key flag - on windows this is the same as the CTRL key flag. */
commandModifier = 8, commandModifier = 8,
/** Popup menu flag - on windows this is the same as rightButtonModifier, on the /** Popup menu flag - on windows this is the same as rightButtonModifier, on the
Mac it's the same as (rightButtonModifier | ctrlModifier). */ Mac it's the same as (rightButtonModifier | ctrlModifier). */
popupMenuClickModifier = rightButtonModifier | ctrlModifier, popupMenuClickModifier = rightButtonModifier | ctrlModifier,
#else
#else
/** Command key flag - on windows this is the same as the CTRL key flag. */ /** Command key flag - on windows this is the same as the CTRL key flag. */
commandModifier = ctrlModifier, commandModifier = ctrlModifier,
/** Popup menu flag - on windows this is the same as rightButtonModifier, on the /** Popup menu flag - on windows this is the same as rightButtonModifier, on the
Mac it's the same as (rightButtonModifier | ctrlModifier). */ Mac it's the same as (rightButtonModifier | ctrlModifier). */
popupMenuClickModifier = rightButtonModifier, popupMenuClickModifier = rightButtonModifier,
#endif
#endif
/** Represents a combination of all the shift, alt, ctrl and command key modifiers. */ /** Represents a combination of all the shift, alt, ctrl and command key modifiers. */
allKeyboardModifiers = shiftModifier | ctrlModifier | altModifier | commandModifier, allKeyboardModifiers = shiftModifier | ctrlModifier | altModifier | commandModifier,
@@ -153,10 +153,10 @@ public:
//============================================================================== //==============================================================================
/** Returns a copy of only the mouse-button flags */ /** Returns a copy of only the mouse-button flags */
const ModifierKeys withOnlyMouseButtons() const noexcept { return ModifierKeys (flags & allMouseButtonModifiers); }
ModifierKeys withOnlyMouseButtons() const noexcept { return ModifierKeys (flags & allMouseButtonModifiers); }
/** Returns a copy of only the non-mouse flags */ /** Returns a copy of only the non-mouse flags */
const ModifierKeys withoutMouseButtons() const noexcept { return ModifierKeys (flags & ~allMouseButtonModifiers); }
ModifierKeys withoutMouseButtons() const noexcept { return ModifierKeys (flags & ~allMouseButtonModifiers); }
bool operator== (const ModifierKeys& other) const noexcept { return flags == other.flags; } bool operator== (const ModifierKeys& other) const noexcept { return flags == other.flags; }
bool operator!= (const ModifierKeys& other) const noexcept { return flags != other.flags; } bool operator!= (const ModifierKeys& other) const noexcept { return flags != other.flags; }
@@ -180,7 +180,7 @@ public:
@see getCurrentModifiersRealtime @see getCurrentModifiersRealtime
*/ */
static const ModifierKeys getCurrentModifiers() noexcept;
static ModifierKeys getCurrentModifiers() noexcept;
/** Creates a ModifierKeys object to represent the current state of the /** Creates a ModifierKeys object to represent the current state of the
keyboard and mouse buttons. keyboard and mouse buttons.
@@ -196,7 +196,7 @@ public:
update the value returned by getCurrentModifiers(), which could cause subtle changes update the value returned by getCurrentModifiers(), which could cause subtle changes
in the behaviour of some components. in the behaviour of some components.
*/ */
static const ModifierKeys getCurrentModifiersRealtime() noexcept;
static ModifierKeys getCurrentModifiersRealtime() noexcept;
private: private:


+ 9
- 5
src/gui/components/mouse/juce_MouseInputSource.cpp View File

@@ -59,7 +59,7 @@ public:
return static_cast <Component*> (componentUnderMouse); return static_cast <Component*> (componentUnderMouse);
} }
const ModifierKeys getCurrentModifiers() const
ModifierKeys getCurrentModifiers() const
{ {
return ModifierKeys::getCurrentModifiers().withoutMouseButtons().withFlags (buttonState.getRawFlags()); return ModifierKeys::getCurrentModifiers().withoutMouseButtons().withFlags (buttonState.getRawFlags());
} }
@@ -89,7 +89,7 @@ public:
return nullptr; return nullptr;
} }
const Point<int> getScreenPosition() const
Point<int> getScreenPosition() const
{ {
// This needs to return the live position if possible, but it mustn't update the lastScreenPos // This needs to return the live position if possible, but it mustn't update the lastScreenPos
// value, because that can cause continuity problems. // value, because that can cause continuity problems.
@@ -197,8 +197,12 @@ public:
if (current != nullptr) if (current != nullptr)
{ {
WeakReference<Component> safeOldComp (current);
setButtons (screenPos, time, ModifierKeys()); setButtons (screenPos, time, ModifierKeys());
sendMouseExit (current, screenPos, time);
if (safeOldComp != nullptr)
sendMouseExit (current, screenPos, time);
buttonState = originalButtonState; buttonState = originalButtonState;
} }
@@ -507,8 +511,8 @@ bool MouseInputSource::canHover() const { return
bool MouseInputSource::hasMouseWheel() const { return isMouse(); } bool MouseInputSource::hasMouseWheel() const { return isMouse(); }
int MouseInputSource::getIndex() const { return pimpl->index; } int MouseInputSource::getIndex() const { return pimpl->index; }
bool MouseInputSource::isDragging() const { return pimpl->isDragging(); } bool MouseInputSource::isDragging() const { return pimpl->isDragging(); }
const Point<int> MouseInputSource::getScreenPosition() const { return pimpl->getScreenPosition(); }
const ModifierKeys MouseInputSource::getCurrentModifiers() const { return pimpl->getCurrentModifiers(); }
Point<int> MouseInputSource::getScreenPosition() const { return pimpl->getScreenPosition(); }
ModifierKeys MouseInputSource::getCurrentModifiers() const { return pimpl->getCurrentModifiers(); }
Component* MouseInputSource::getComponentUnderMouse() const { return pimpl->getComponentUnderMouse(); } Component* MouseInputSource::getComponentUnderMouse() const { return pimpl->getComponentUnderMouse(); }
void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); } void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); }
int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); } int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); }


+ 3
- 3
src/gui/components/mouse/juce_MouseInputSource.h View File

@@ -97,12 +97,12 @@ public:
bool isDragging() const; bool isDragging() const;
/** Returns the last-known screen position of this source. */ /** Returns the last-known screen position of this source. */
const Point<int> getScreenPosition() const;
Point<int> getScreenPosition() const;
/** Returns a set of modifiers that indicate which buttons are currently /** Returns a set of modifiers that indicate which buttons are currently
held down on this device. held down on this device.
*/ */
const ModifierKeys getCurrentModifiers() const;
ModifierKeys getCurrentModifiers() const;
/** Returns the component that was last known to be under this pointer. */ /** Returns the component that was last known to be under this pointer. */
Component* getComponentUnderMouse() const; Component* getComponentUnderMouse() const;
@@ -180,7 +180,7 @@ private:
friend class MouseInputSourceInternal; friend class MouseInputSourceInternal;
ScopedPointer<MouseInputSourceInternal> pimpl; ScopedPointer<MouseInputSourceInternal> pimpl;
static const Point<int> getCurrentMousePosition();
static Point<int> getCurrentMousePosition();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MouseInputSource); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MouseInputSource);
}; };


+ 1
- 1
src/gui/graphics/fonts/juce_GlyphArrangement.cpp View File

@@ -623,7 +623,7 @@ void GlyphArrangement::stretchRangeOfGlyphs (int startIndex, int num,
} }
} }
const Rectangle<float> GlyphArrangement::getBoundingBox (int startIndex, int num, const bool includeWhitespace) const
Rectangle<float> GlyphArrangement::getBoundingBox (int startIndex, int num, const bool includeWhitespace) const
{ {
jassert (startIndex >= 0); jassert (startIndex >= 0);


+ 2
- 2
src/gui/graphics/fonts/juce_GlyphArrangement.h View File

@@ -67,7 +67,7 @@ public:
/** Returns the y position of the bottom of the glyph. */ /** Returns the y position of the bottom of the glyph. */
float getBottom() const { return y + font.getDescent(); } float getBottom() const { return y + font.getDescent(); }
/** Returns the bounds of the glyph. */ /** Returns the bounds of the glyph. */
const Rectangle<float> getBounds() const { return Rectangle<float> (x, getTop(), w, font.getHeight()); }
Rectangle<float> getBounds() const { return Rectangle<float> (x, getTop(), w, font.getHeight()); }
//============================================================================== //==============================================================================
/** Shifts the glyph's position by a relative amount. */ /** Shifts the glyph's position by a relative amount. */
@@ -255,7 +255,7 @@ public:
@param includeWhitespace if true, the extent of any whitespace characters will also @param includeWhitespace if true, the extent of any whitespace characters will also
be taken into account be taken into account
*/ */
const Rectangle<float> getBoundingBox (int startIndex, int numGlyphs, bool includeWhitespace) const;
Rectangle<float> getBoundingBox (int startIndex, int numGlyphs, bool includeWhitespace) const;
/** Shifts a set of glyphs by a given amount. /** Shifts a set of glyphs by a given amount.


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

@@ -620,12 +620,12 @@ public:
This is only relevent for floating-point rectangles, of course. This is only relevent for floating-point rectangles, of course.
@see toFloat() @see toFloat()
*/ */
const Rectangle<int> getSmallestIntegerContainer() const noexcept
Rectangle<int> getSmallestIntegerContainer() const noexcept
{ {
const int x1 = (int) std::floor (static_cast<float> (x)); const int x1 = (int) std::floor (static_cast<float> (x));
const int y1 = (int) std::floor (static_cast<float> (y)); const int y1 = (int) std::floor (static_cast<float> (y));
const int x2 = (int) std::ceil (static_cast<float> (x + w));
const int y2 = (int) std::ceil (static_cast<float> (y + h));
const int x2 = (int) std::ceil (static_cast<float> (x + w));
const int y2 = (int) std::ceil (static_cast<float> (y + h));
return Rectangle<int> (x1, y1, x2 - x1, y2 - y1); return Rectangle<int> (x1, y1, x2 - x1, y2 - y1);
} }
@@ -656,7 +656,7 @@ public:
Obviously this is mainly useful for rectangles that use integer types. Obviously this is mainly useful for rectangles that use integer types.
@see getSmallestIntegerContainer @see getSmallestIntegerContainer
*/ */
const Rectangle<float> toFloat() const noexcept
Rectangle<float> toFloat() const noexcept
{ {
return Rectangle<float> (static_cast<float> (x), static_cast<float> (y), return Rectangle<float> (static_cast<float> (x), static_cast<float> (y),
static_cast<float> (w), static_cast<float> (h)); static_cast<float> (w), static_cast<float> (h));


+ 2
- 2
src/native/android/juce_android_Windowing.cpp View File

@@ -578,7 +578,7 @@ void Desktop::createMouseInputSources()
mouseSources.add (new MouseInputSource (i, false)); mouseSources.add (new MouseInputSource (i, false));
} }
const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
return AndroidComponentPeer::lastMousePos; return AndroidComponentPeer::lastMousePos;
} }
@@ -600,7 +600,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
currentModifiers = AndroidComponentPeer::currentModifiers; currentModifiers = AndroidComponentPeer::currentModifiers;
} }
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
return AndroidComponentPeer::currentModifiers; return AndroidComponentPeer::currentModifiers;
} }


+ 2
- 2
src/native/linux/juce_linux_Windowing.cpp View File

@@ -2616,7 +2616,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
currentModifiers = LinuxComponentPeer::currentModifiers; currentModifiers = LinuxComponentPeer::currentModifiers;
} }
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
Window root, child; Window root, child;
int x, y, winx, winy; int x, y, winx, winy;
@@ -2798,7 +2798,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
&& (matchedDepth == desiredDepth); && (matchedDepth == desiredDepth);
} }
const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
Window root, child; Window root, child;
int x, y, winx, winy; int x, y, winx, winy;


+ 1
- 1
src/native/mac/juce_ios_UIViewComponentPeer.mm View File

@@ -286,7 +286,7 @@ bool KeyPress::isKeyCurrentlyDown (const int keyCode)
ModifierKeys UIViewComponentPeer::currentModifiers; ModifierKeys UIViewComponentPeer::currentModifiers;
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
return UIViewComponentPeer::currentModifiers; return UIViewComponentPeer::currentModifiers;
} }


+ 1
- 1
src/native/mac/juce_ios_Windowing.mm View File

@@ -228,7 +228,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
return true; return true;
} }
const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
return juce_lastMousePos; return juce_lastMousePos;
} }


+ 2
- 2
src/native/mac/juce_mac_CoreGraphicsContext.mm View File

@@ -32,13 +32,13 @@
namespace namespace
{ {
template <class RectType> template <class RectType>
const Rectangle<int> convertToRectInt (const RectType& r)
Rectangle<int> convertToRectInt (const RectType& r)
{ {
return Rectangle<int> ((int) r.origin.x, (int) r.origin.y, (int) r.size.width, (int) r.size.height); return Rectangle<int> ((int) r.origin.x, (int) r.origin.y, (int) r.size.width, (int) r.size.height);
} }
template <class RectType> template <class RectType>
const Rectangle<float> convertToRectFloat (const RectType& r)
Rectangle<float> convertToRectFloat (const RectType& r)
{ {
return Rectangle<float> (r.origin.x, r.origin.y, r.size.width, r.size.height); return Rectangle<float> (r.origin.x, r.origin.y, r.size.width, r.size.height);
} }


+ 1
- 1
src/native/mac/juce_mac_NSViewComponent.mm View File

@@ -105,7 +105,7 @@ public:
componentPeerChanged(); componentPeerChanged();
} }
const Rectangle<int> getViewBounds() const
Rectangle<int> getViewBounds() const
{ {
NSRect r = [view frame]; NSRect r = [view frame];
return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height); return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height);


+ 1
- 1
src/native/mac/juce_mac_NSViewComponentPeer.mm View File

@@ -905,7 +905,7 @@ void NSViewComponentPeer::updateKeysDown (NSEvent* ev, bool isKeyDown)
} }
} }
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
return NSViewComponentPeer::currentModifiers; return NSViewComponentPeer::currentModifiers;
} }


+ 1
- 1
src/native/mac/juce_mac_Windowing.mm View File

@@ -217,7 +217,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
return true; return true;
} }
const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
JUCE_AUTORELEASEPOOL JUCE_AUTORELEASEPOOL
const NSPoint p ([NSEvent mouseLocation]); const NSPoint p ([NSEvent mouseLocation]);


+ 2
- 2
src/native/windows/juce_win32_Windowing.cpp View File

@@ -2575,7 +2575,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
currentModifiers = Win32ComponentPeer::currentModifiers; currentModifiers = Win32ComponentPeer::currentModifiers;
} }
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
{ {
Win32ComponentPeer::updateKeyModifiers(); Win32ComponentPeer::updateKeyModifiers();
@@ -2785,7 +2785,7 @@ void Desktop::createMouseInputSources()
mouseSources.add (new MouseInputSource (0, true)); mouseSources.add (new MouseInputSource (0, true));
} }
const Point<int> MouseInputSource::getCurrentMousePosition()
Point<int> MouseInputSource::getCurrentMousePosition()
{ {
POINT mousePos; POINT mousePos;
GetCursorPos (&mousePos); GetCursorPos (&mousePos);


Loading…
Cancel
Save