mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-24 01:54:22 +00:00
Multi-touch handling changes for Component class. 64-bit VST keypress fix.
This commit is contained in:
parent
cf4ecfacac
commit
b317b47533
26 changed files with 426 additions and 415 deletions
|
|
@ -41477,7 +41477,7 @@ public:
|
|||
&& 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)
|
||||
return pointInParentSpace - comp.getPosition();
|
||||
|
|
@ -41485,7 +41485,7 @@ public:
|
|||
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)
|
||||
return areaInParentSpace - comp.getPosition();
|
||||
|
|
@ -41493,7 +41493,7 @@ public:
|
|||
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)
|
||||
return pointInLocalSpace + comp.getPosition();
|
||||
|
|
@ -41501,7 +41501,7 @@ public:
|
|||
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)
|
||||
return areaInLocalSpace + comp.getPosition();
|
||||
|
|
@ -41510,7 +41510,7 @@ public:
|
|||
}
|
||||
|
||||
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();
|
||||
jassert (directParent != nullptr);
|
||||
|
|
@ -41522,7 +41522,7 @@ public:
|
|||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
@ -43528,66 +43528,41 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
|
|||
return;
|
||||
}
|
||||
|
||||
if (! flags.mouseInsideFlag)
|
||||
{
|
||||
flags.mouseInsideFlag = true;
|
||||
flags.mouseOverFlag = true;
|
||||
flags.mouseDownFlag = false;
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
BailOutChecker checker (this);
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
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::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseEnter, me);
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.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)
|
||||
{
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.mouseDownFlag)
|
||||
{
|
||||
internalMouseUp (source, relativePos, time, source.getCurrentModifiers().getRawFlags());
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
}
|
||||
mouseExit (me);
|
||||
|
||||
if (flags.mouseInsideFlag || flags.mouseOverFlag)
|
||||
{
|
||||
flags.mouseInsideFlag = false;
|
||||
flags.mouseOverFlag = false;
|
||||
flags.mouseDownFlag = false;
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseExit, me);
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
mouseExit (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.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)
|
||||
|
|
@ -43612,8 +43587,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
this, this, time, relativePos, time,
|
||||
source.getNumberOfMultipleClicks(), false);
|
||||
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
|
||||
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -43643,9 +43617,6 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
return;
|
||||
}
|
||||
|
||||
flags.mouseDownFlag = true;
|
||||
flags.mouseOverFlag = true;
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
|
|
@ -43657,84 +43628,70 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
|
||||
desktop.getMouseListeners().callChecked (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)
|
||||
{
|
||||
if (flags.mouseDownFlag)
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
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;
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseUp, me);
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
// check for double-click
|
||||
if (me.getNumberOfClicks() >= 2)
|
||||
{
|
||||
flags.mouseDownFlag = false;
|
||||
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
const MouseEvent me (source, relativePos,
|
||||
oldModifiers, this, this, time,
|
||||
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
|
||||
source.getLastMouseDownTime(),
|
||||
source.getNumberOfMultipleClicks(),
|
||||
source.hasMouseMovedSignificantlySincePressed());
|
||||
|
||||
mouseUp (me);
|
||||
mouseDoubleClick (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseUp, me);
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
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)
|
||||
{
|
||||
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::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseDrag, me);
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.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)
|
||||
|
|
@ -43752,15 +43709,12 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r
|
|||
}
|
||||
else
|
||||
{
|
||||
flags.mouseOverFlag = true;
|
||||
|
||||
mouseMove (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseMove, me);
|
||||
desktop.getMouseListeners().callChecked (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
|
||||
{
|
||||
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 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
|
||||
{
|
||||
|
|
@ -44566,6 +44540,22 @@ void Desktop::handleAsyncUpdate()
|
|||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (kioskModeComponent != componentToUse)
|
||||
|
|
@ -63082,7 +63062,7 @@ ModifierKeys& ModifierKeys::operator= (const ModifierKeys& other) noexcept
|
|||
|
||||
ModifierKeys ModifierKeys::currentModifiers;
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
|
||||
{
|
||||
return currentModifiers;
|
||||
}
|
||||
|
|
@ -73580,7 +73560,7 @@ public:
|
|||
return static_cast <Component*> (componentUnderMouse);
|
||||
}
|
||||
|
||||
const ModifierKeys getCurrentModifiers() const
|
||||
ModifierKeys getCurrentModifiers() const
|
||||
{
|
||||
return ModifierKeys::getCurrentModifiers().withoutMouseButtons().withFlags (buttonState.getRawFlags());
|
||||
}
|
||||
|
|
@ -73610,7 +73590,7 @@ public:
|
|||
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
|
||||
// value, because that can cause continuity problems.
|
||||
|
|
@ -73716,8 +73696,12 @@ public:
|
|||
|
||||
if (current != nullptr)
|
||||
{
|
||||
WeakReference<Component> safeOldComp (current);
|
||||
setButtons (screenPos, time, ModifierKeys());
|
||||
sendMouseExit (current, screenPos, time);
|
||||
|
||||
if (safeOldComp != nullptr)
|
||||
sendMouseExit (current, screenPos, time);
|
||||
|
||||
buttonState = originalButtonState;
|
||||
}
|
||||
|
||||
|
|
@ -74019,8 +74003,8 @@ bool MouseInputSource::canHover() const { return isMouse(); }
|
|||
bool MouseInputSource::hasMouseWheel() const { return isMouse(); }
|
||||
int MouseInputSource::getIndex() const { return pimpl->index; }
|
||||
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(); }
|
||||
void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); }
|
||||
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);
|
||||
|
||||
|
|
@ -108537,6 +108521,21 @@ public:
|
|||
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
|
||||
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);
|
||||
if (status != noErr)
|
||||
return false;
|
||||
|
|
@ -251296,7 +251295,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = Win32ComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
Win32ComponentPeer::updateKeyModifiers();
|
||||
|
||||
|
|
@ -251499,7 +251498,7 @@ void Desktop::createMouseInputSources()
|
|||
mouseSources.add (new MouseInputSource (0, true));
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
POINT mousePos;
|
||||
GetCursorPos (&mousePos);
|
||||
|
|
@ -268009,7 +268008,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = LinuxComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
Window root, child;
|
||||
int x, y, winx, winy;
|
||||
|
|
@ -268184,7 +268183,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
&& (matchedDepth == desiredDepth);
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
Window root, child;
|
||||
int x, y, winx, winy;
|
||||
|
|
@ -271048,6 +271047,16 @@ namespace
|
|||
{
|
||||
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__
|
||||
|
|
@ -271795,7 +271804,7 @@ private:
|
|||
if (req == nil)
|
||||
return nil;
|
||||
|
||||
[req setHTTPMethod: isPost ? @"POST" : @"GET"];
|
||||
[req setHTTPMethod: nsStringLiteral (isPost ? "POST" : "GET")];
|
||||
//[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
|
||||
|
||||
StringArray headerLines;
|
||||
|
|
@ -273219,7 +273228,7 @@ String File::getVersion() const
|
|||
|
||||
if (info != nil)
|
||||
{
|
||||
NSString* name = [info valueForKey: @"CFBundleShortVersionString"];
|
||||
NSString* name = [info valueForKey: nsStringLiteral ("CFBundleShortVersionString")];
|
||||
|
||||
if (name != nil)
|
||||
result = nsStringToJuce (name);
|
||||
|
|
@ -273260,7 +273269,7 @@ bool File::moveToTrash() const
|
|||
return [[NSWorkspace sharedWorkspace]
|
||||
performFileOperation: NSWorkspaceRecycleOperation
|
||||
source: [p stringByDeletingLastPathComponent]
|
||||
destination: @""
|
||||
destination: nsEmptyString()
|
||||
files: [NSArray arrayWithObject: [p lastPathComponent]]
|
||||
tag: nil ];
|
||||
#endif
|
||||
|
|
@ -273383,7 +273392,7 @@ void File::revealToUser() const
|
|||
{
|
||||
#if ! JUCE_IOS
|
||||
if (exists())
|
||||
[[NSWorkspace sharedWorkspace] selectFile: juceStringToNS (getFullPathName()) inFileViewerRootedAtPath: @""];
|
||||
[[NSWorkspace sharedWorkspace] selectFile: juceStringToNS (getFullPathName()) inFileViewerRootedAtPath: nsEmptyString()];
|
||||
else if (getParentDirectory().exists())
|
||||
getParentDirectory().revealToUser();
|
||||
#endif
|
||||
|
|
@ -274467,13 +274476,13 @@ void Font::getPlatformDefaultFontNames (String& defaultSans, String& defaultSeri
|
|||
namespace
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
@ -275618,7 +275627,7 @@ bool KeyPress::isKeyCurrentlyDown (const int keyCode)
|
|||
|
||||
ModifierKeys UIViewComponentPeer::currentModifiers;
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
return UIViewComponentPeer::currentModifiers;
|
||||
}
|
||||
|
|
@ -276558,7 +276567,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
return true;
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
return juce_lastMousePos;
|
||||
}
|
||||
|
|
@ -277422,7 +277431,7 @@ END_JUCE_NAMESPACE
|
|||
(void) request;
|
||||
(void) frame;
|
||||
|
||||
NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];
|
||||
NSURL* url = [actionInformation valueForKey: nsStringLiteral ("WebActionOriginalURLKey")];
|
||||
|
||||
if (ownerComponent->pageAboutToLoad (nsStringToJuce ([url absoluteString])))
|
||||
[listener use];
|
||||
|
|
@ -277440,8 +277449,8 @@ public:
|
|||
WebBrowserComponentInternal (WebBrowserComponent* owner)
|
||||
{
|
||||
webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)
|
||||
frameName: @""
|
||||
groupName: @""];
|
||||
frameName: nsEmptyString()
|
||||
groupName: nsEmptyString()];
|
||||
setView (webView);
|
||||
|
||||
clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner];
|
||||
|
|
@ -277466,7 +277475,7 @@ public:
|
|||
|
||||
if (postData != nullptr && postData->getSize() > 0)
|
||||
{
|
||||
[r setHTTPMethod: @"POST"];
|
||||
[r setHTTPMethod: nsStringLiteral ("POST")];
|
||||
[r setHTTPBody: [NSData dataWithBytes: postData->getData()
|
||||
length: postData->getSize()]];
|
||||
}
|
||||
|
|
@ -279051,7 +279060,7 @@ using namespace JUCE_NAMESPACE;
|
|||
- (void) broadcastMessageCallback: (NSNotification*) n
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
@ -279170,7 +279179,7 @@ bool MessageManager::postMessageToSystemQueue (Message* message)
|
|||
void MessageManager::broadcastMessage (const String& message)
|
||||
{
|
||||
NSDictionary* info = [NSDictionary dictionaryWithObject: juceStringToNS (message)
|
||||
forKey: @"message"];
|
||||
forKey: nsStringLiteral ("message")];
|
||||
|
||||
[[NSDistributedNotificationCenter defaultCenter] postNotificationName: AppDelegateRedirector::getBroacastEventName()
|
||||
object: nil
|
||||
|
|
@ -279973,13 +279982,13 @@ void Font::getPlatformDefaultFontNames (String& defaultSans, String& defaultSeri
|
|||
namespace
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
@ -281736,7 +281745,7 @@ void NSViewComponentPeer::updateKeysDown (NSEvent* ev, bool isKeyDown)
|
|||
}
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
return NSViewComponentPeer::currentModifiers;
|
||||
}
|
||||
|
|
@ -282369,7 +282378,7 @@ BOOL NSViewComponentPeer::sendDragCallback (const int type, id <NSDraggingInfo>
|
|||
NSPasteboard* pasteBoard = [sender draggingPasteboard];
|
||||
StringArray files;
|
||||
|
||||
NSString* iTunesPasteboardType = @"CorePasteboardFlavorType 0x6974756E"; // 'itun'
|
||||
NSString* iTunesPasteboardType = nsStringLiteral ("CorePasteboardFlavorType 0x6974756E"); // 'itun'
|
||||
|
||||
if (bestType == NSFilesPromisePboardType
|
||||
&& [[pasteBoard types] containsObject: iTunesPasteboardType])
|
||||
|
|
@ -282379,13 +282388,13 @@ BOOL NSViewComponentPeer::sendDragCallback (const int type, id <NSDraggingInfo>
|
|||
if ([list isKindOfClass: [NSDictionary class]])
|
||||
{
|
||||
NSDictionary* iTunesDictionary = (NSDictionary*) list;
|
||||
NSArray* tracks = [iTunesDictionary valueForKey: @"Tracks"];
|
||||
NSArray* tracks = [iTunesDictionary valueForKey: nsStringLiteral ("Tracks")];
|
||||
NSEnumerator* enumerator = [tracks objectEnumerator];
|
||||
NSDictionary* track;
|
||||
|
||||
while ((track = [enumerator nextObject]) != nil)
|
||||
{
|
||||
NSURL* url = [NSURL URLWithString: [track valueForKey: @"Location"]];
|
||||
NSURL* url = [NSURL URLWithString: [track valueForKey: nsStringLiteral ("Location")]];
|
||||
|
||||
if ([url isFileURL])
|
||||
files.add (nsStringToJuce ([url path]));
|
||||
|
|
@ -282769,7 +282778,7 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType
|
|||
const String& title, const String& message,
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
@ -282777,7 +282786,7 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIcon
|
|||
const String& title, const String& message,
|
||||
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,
|
||||
|
|
@ -282786,7 +282795,9 @@ bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType
|
|||
ModalComponentManager::Callback* callback)
|
||||
{
|
||||
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)
|
||||
return mb->getResult() == 1;
|
||||
|
||||
|
|
@ -282800,7 +282811,10 @@ int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconTy
|
|||
ModalComponentManager::Callback* callback)
|
||||
{
|
||||
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)
|
||||
return mb->getResult();
|
||||
|
||||
|
|
@ -282874,7 +282888,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
return true;
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
const NSPoint p ([NSEvent mouseLocation]);
|
||||
|
|
@ -283226,7 +283240,7 @@ public:
|
|||
componentPeerChanged();
|
||||
}
|
||||
|
||||
const Rectangle<int> getViewBounds() const
|
||||
Rectangle<int> getViewBounds() const
|
||||
{
|
||||
NSRect r = [view frame];
|
||||
return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height);
|
||||
|
|
@ -284122,7 +284136,7 @@ public:
|
|||
{
|
||||
NSMenuItem* item = [parent addItemWithTitle: juceStringToNS (name)
|
||||
action: nil
|
||||
keyEquivalent: @""];
|
||||
keyEquivalent: nsEmptyString()];
|
||||
[item setTag: tag];
|
||||
|
||||
NSMenu* sub = createMenu (child, name, menuId, tag);
|
||||
|
|
@ -284226,7 +284240,7 @@ public:
|
|||
NSString* text = juceStringToNS (iter.itemName.upToFirstOccurrenceOf ("<end>", false, true));
|
||||
|
||||
if (text == nil)
|
||||
text = @"";
|
||||
text = nsEmptyString();
|
||||
|
||||
if (iter.isSeparator)
|
||||
{
|
||||
|
|
@ -284236,7 +284250,7 @@ public:
|
|||
{
|
||||
NSMenuItem* item = [menuToAddTo addItemWithTitle: text
|
||||
action: nil
|
||||
keyEquivalent: @""];
|
||||
keyEquivalent: nsEmptyString()];
|
||||
|
||||
[item setEnabled: false];
|
||||
}
|
||||
|
|
@ -284244,7 +284258,7 @@ public:
|
|||
{
|
||||
NSMenuItem* item = [menuToAddTo addItemWithTitle: text
|
||||
action: nil
|
||||
keyEquivalent: @""];
|
||||
keyEquivalent: nsEmptyString()];
|
||||
|
||||
[item setTag: iter.itemId];
|
||||
[item setEnabled: iter.isEnabled];
|
||||
|
|
@ -284258,7 +284272,7 @@ public:
|
|||
{
|
||||
NSMenuItem* item = [menuToAddTo addItemWithTitle: text
|
||||
action: @selector (menuItemInvoked:)
|
||||
keyEquivalent: @""];
|
||||
keyEquivalent: nsEmptyString()];
|
||||
|
||||
[item setTag: iter.itemId];
|
||||
[item setEnabled: iter.isEnabled];
|
||||
|
|
@ -284341,7 +284355,7 @@ private:
|
|||
|
||||
static void flashMenuBar (NSMenu* menu)
|
||||
{
|
||||
if ([[menu title] isEqualToString: @"Apple"])
|
||||
if ([[menu title] isEqualToString: nsStringLiteral ("Apple")])
|
||||
return;
|
||||
|
||||
[menu retain];
|
||||
|
|
@ -284349,7 +284363,7 @@ private:
|
|||
const unichar f35Key = NSF35FunctionKey;
|
||||
NSString* f35String = [NSString stringWithCharacters: &f35Key length: 1];
|
||||
|
||||
NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"x"
|
||||
NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: nsStringLiteral ("x")
|
||||
action: nil
|
||||
keyEquivalent: f35String];
|
||||
[item setTarget: nil];
|
||||
|
|
@ -284504,11 +284518,11 @@ namespace MainMenuHelpers
|
|||
NSMenuItem* item;
|
||||
|
||||
// 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];
|
||||
[item release];
|
||||
NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle: @"Services"];
|
||||
NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle: nsStringLiteral ("Services")];
|
||||
[menu setSubmenu: servicesMenu forItem: item];
|
||||
[NSApp setServicesMenu: servicesMenu];
|
||||
[servicesMenu release];
|
||||
|
|
@ -284516,20 +284530,20 @@ namespace MainMenuHelpers
|
|||
|
||||
// Hide + Show stuff...
|
||||
item = [[NSMenuItem alloc] initWithTitle: juceStringToNS ("Hide " + appName)
|
||||
action: @selector (hide:) keyEquivalent: @"h"];
|
||||
action: @selector (hide:) keyEquivalent: nsStringLiteral ("h")];
|
||||
[item setTarget: NSApp];
|
||||
[menu addItem: item];
|
||||
[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 setTarget: NSApp];
|
||||
[menu addItem: item];
|
||||
[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];
|
||||
[menu addItem: item];
|
||||
[item release];
|
||||
|
|
@ -284538,7 +284552,7 @@ namespace MainMenuHelpers
|
|||
|
||||
// Quit item....
|
||||
item = [[NSMenuItem alloc] initWithTitle: juceStringToNS ("Quit " + appName)
|
||||
action: @selector (terminate:) keyEquivalent: @"q"];
|
||||
action: @selector (terminate:) keyEquivalent: nsStringLiteral ("q")];
|
||||
|
||||
[item setTarget: NSApp];
|
||||
[menu addItem: item];
|
||||
|
|
@ -284557,10 +284571,10 @@ namespace MainMenuHelpers
|
|||
{
|
||||
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];
|
||||
[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()
|
||||
length: temp.getSize()]
|
||||
name: [NSString stringWithUTF8String: suffixesToTry[i]]
|
||||
MIMEType: @""]
|
||||
MIMEType: nsEmptyString()]
|
||||
error: nil];
|
||||
|
||||
if (movie != 0)
|
||||
|
|
@ -285937,7 +285951,7 @@ END_JUCE_NAMESPACE
|
|||
(void) request;
|
||||
(void) frame;
|
||||
|
||||
NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];
|
||||
NSURL* url = [actionInformation valueForKey: nsStringLiteral ("WebActionOriginalURLKey")];
|
||||
|
||||
if (ownerComponent->pageAboutToLoad (nsStringToJuce ([url absoluteString])))
|
||||
[listener use];
|
||||
|
|
@ -285955,8 +285969,8 @@ public:
|
|||
WebBrowserComponentInternal (WebBrowserComponent* owner)
|
||||
{
|
||||
webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)
|
||||
frameName: @""
|
||||
groupName: @""];
|
||||
frameName: nsEmptyString()
|
||||
groupName: nsEmptyString()];
|
||||
setView (webView);
|
||||
|
||||
clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner];
|
||||
|
|
@ -285981,7 +285995,7 @@ public:
|
|||
|
||||
if (postData != nullptr && postData->getSize() > 0)
|
||||
{
|
||||
[r setHTTPMethod: @"POST"];
|
||||
[r setHTTPMethod: nsStringLiteral ("POST")];
|
||||
[r setHTTPBody: [NSData dataWithBytes: postData->getData()
|
||||
length: postData->getSize()]];
|
||||
}
|
||||
|
|
@ -288217,7 +288231,7 @@ END_JUCE_NAMESPACE
|
|||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
|
||||
NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: QTSampleBufferHostTimeAttribute];
|
||||
#else
|
||||
NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: @"hostTime"];
|
||||
NSNumber* hosttime = (NSNumber*) [sampleBuffer attributeForKey: nsStringLiteral ("hostTime")];
|
||||
#endif
|
||||
|
||||
int64 presentationTime = (hosttime != nil)
|
||||
|
|
@ -288314,10 +288328,10 @@ void CameraDevice::startRecordingToFile (const File& file, int quality)
|
|||
|
||||
if ([mediaType isEqualToString: QTMediaTypeVideo])
|
||||
options = [QTCompressionOptions compressionOptionsWithIdentifier:
|
||||
quality >= 1 ? @"QTCompressionOptionsSD480SizeH264Video"
|
||||
: @"QTCompressionOptions240SizeH264Video"];
|
||||
quality >= 1 ? nsStringLiteral ("QTCompressionOptionsSD480SizeH264Video")_
|
||||
nsStringLiteral ("QTCompressionOptions240SizeH264Video")];
|
||||
else if ([mediaType isEqualToString: QTMediaTypeSound])
|
||||
options = [QTCompressionOptions compressionOptionsWithIdentifier: @"QTCompressionOptionsHighQualityAACAudio"];
|
||||
options = [QTCompressionOptions compressionOptionsWithIdentifier: nsStringLiteral ("QTCompressionOptionsHighQualityAACAudio")];
|
||||
|
||||
[d->fileOutput setCompressionOptions: options forConnection: connection];
|
||||
}
|
||||
|
|
@ -292296,7 +292310,7 @@ void Desktop::createMouseInputSources()
|
|||
mouseSources.add (new MouseInputSource (i, false));
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
return AndroidComponentPeer::lastMousePos;
|
||||
}
|
||||
|
|
@ -292317,7 +292331,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = AndroidComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
return AndroidComponentPeer::currentModifiers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ namespace JuceDummyNamespace {}
|
|||
*/
|
||||
#define JUCE_MAJOR_VERSION 1
|
||||
#define JUCE_MINOR_VERSION 54
|
||||
#define JUCE_BUILDNUMBER 18
|
||||
#define JUCE_BUILDNUMBER 19
|
||||
|
||||
/** Current Juce version number.
|
||||
|
||||
|
|
@ -23937,21 +23937,21 @@ public:
|
|||
/** Middle mouse button flag. */
|
||||
middleButtonModifier = 64,
|
||||
|
||||
#if JUCE_MAC
|
||||
#if JUCE_MAC
|
||||
/** Command key flag - on windows this is the same as the CTRL key flag. */
|
||||
commandModifier = 8,
|
||||
|
||||
/** Popup menu flag - on windows this is the same as rightButtonModifier, on the
|
||||
Mac it's the same as (rightButtonModifier | ctrlModifier). */
|
||||
popupMenuClickModifier = rightButtonModifier | ctrlModifier,
|
||||
#else
|
||||
#else
|
||||
/** Command key flag - on windows this is the same as the CTRL key flag. */
|
||||
commandModifier = ctrlModifier,
|
||||
|
||||
/** Popup menu flag - on windows this is the same as rightButtonModifier, on the
|
||||
Mac it's the same as (rightButtonModifier | ctrlModifier). */
|
||||
popupMenuClickModifier = rightButtonModifier,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** Represents a combination of all the shift, alt, ctrl and command key modifiers. */
|
||||
allKeyboardModifiers = shiftModifier | ctrlModifier | altModifier | commandModifier,
|
||||
|
|
@ -23961,10 +23961,10 @@ public:
|
|||
};
|
||||
|
||||
/** 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 */
|
||||
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; }
|
||||
|
|
@ -23986,7 +23986,7 @@ public:
|
|||
|
||||
@see getCurrentModifiersRealtime
|
||||
*/
|
||||
static const ModifierKeys getCurrentModifiers() noexcept;
|
||||
static ModifierKeys getCurrentModifiers() noexcept;
|
||||
|
||||
/** Creates a ModifierKeys object to represent the current state of the
|
||||
keyboard and mouse buttons.
|
||||
|
|
@ -24002,7 +24002,7 @@ public:
|
|||
update the value returned by getCurrentModifiers(), which could cause subtle changes
|
||||
in the behaviour of some components.
|
||||
*/
|
||||
static const ModifierKeys getCurrentModifiersRealtime() noexcept;
|
||||
static ModifierKeys getCurrentModifiersRealtime() noexcept;
|
||||
|
||||
private:
|
||||
|
||||
|
|
@ -26185,12 +26185,12 @@ public:
|
|||
This is only relevent for floating-point rectangles, of course.
|
||||
@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 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);
|
||||
}
|
||||
|
|
@ -26221,7 +26221,7 @@ public:
|
|||
Obviously this is mainly useful for rectangles that use integer types.
|
||||
@see getSmallestIntegerContainer
|
||||
*/
|
||||
const Rectangle<float> toFloat() const noexcept
|
||||
Rectangle<float> toFloat() const noexcept
|
||||
{
|
||||
return Rectangle<float> (static_cast<float> (x), static_cast<float> (y),
|
||||
static_cast<float> (w), static_cast<float> (h));
|
||||
|
|
@ -32500,7 +32500,7 @@ public:
|
|||
|
||||
@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.
|
||||
|
||||
|
|
@ -32508,7 +32508,7 @@ public:
|
|||
|
||||
@see isMouseOver, isMouseButtonDown, isMouseButtonDownAnywhere
|
||||
*/
|
||||
bool isMouseOverOrDragging() const noexcept;
|
||||
bool isMouseOverOrDragging() const;
|
||||
|
||||
/** Returns true if a mouse button is currently down.
|
||||
|
||||
|
|
@ -32989,9 +32989,6 @@ private:
|
|||
bool bufferToImageFlag : 1;
|
||||
bool bringToFrontOnClickFlag : 1;
|
||||
bool repaintOnMouseActivityFlag : 1;
|
||||
bool mouseDownFlag : 1;
|
||||
bool mouseOverFlag : 1;
|
||||
bool mouseInsideFlag : 1;
|
||||
bool currentlyModalFlag : 1;
|
||||
bool isDisabledFlag : 1;
|
||||
bool childCompFocusedFlag : 1;
|
||||
|
|
@ -34462,6 +34459,7 @@ private:
|
|||
|
||||
void timerCallback();
|
||||
void resetTimer();
|
||||
ListenerList <MouseListener>& getMouseListeners();
|
||||
|
||||
int getNumDisplayMonitors() 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. */
|
||||
float getBottom() const { return y + font.getDescent(); }
|
||||
/** 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. */
|
||||
void moveBy (float deltaX, float deltaY);
|
||||
|
|
@ -57941,7 +57939,7 @@ public:
|
|||
@param includeWhitespace if true, the extent of any whitespace characters will also
|
||||
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.
|
||||
|
||||
|
|
@ -62943,12 +62941,12 @@ public:
|
|||
bool isDragging() const;
|
||||
|
||||
/** 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
|
||||
held down on this device.
|
||||
*/
|
||||
const ModifierKeys getCurrentModifiers() const;
|
||||
ModifierKeys getCurrentModifiers() const;
|
||||
|
||||
/** Returns the component that was last known to be under this pointer. */
|
||||
Component* getComponentUnderMouse() const;
|
||||
|
|
@ -63025,7 +63023,7 @@ private:
|
|||
friend class MouseInputSourceInternal;
|
||||
ScopedPointer<MouseInputSourceInternal> pimpl;
|
||||
|
||||
static const Point<int> getCurrentMousePosition();
|
||||
static Point<int> getCurrentMousePosition();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MouseInputSource);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -135,6 +135,21 @@ public:
|
|||
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
|
||||
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);
|
||||
if (status != noErr)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
extern void detachComponentFromWindowRef (Component* component, void* nsWindow);
|
||||
extern void setNativeHostWindowSize (void* nsWindow, Component* editorComp, int newWidth, int newHeight, const PluginHostType& host);
|
||||
extern void checkWindowVisibility (void* nsWindow, Component* component);
|
||||
extern void forwardCurrentKeyEventToHost (Component* component);
|
||||
extern bool forwardCurrentKeyEventToHost (Component* component);
|
||||
#endif
|
||||
|
||||
#if JUCE_LINUX
|
||||
|
|
@ -1275,12 +1275,11 @@ public:
|
|||
}
|
||||
|
||||
#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
|
||||
// and re-inject the event..
|
||||
forwardCurrentKeyEventToHost (this);
|
||||
return true;
|
||||
return forwardCurrentKeyEventToHost (this);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -229,12 +229,15 @@ void checkWindowVisibility (void* nsWindow, Component* comp)
|
|||
#endif
|
||||
}
|
||||
|
||||
void forwardCurrentKeyEventToHost (Component* comp)
|
||||
bool forwardCurrentKeyEventToHost (Component* comp)
|
||||
{
|
||||
#if ! JUCE_64BIT
|
||||
#if JUCE_64BIT
|
||||
return false;
|
||||
#else
|
||||
NSWindow* win = [(NSView*) comp->getWindowHandle() window];
|
||||
[[win parentWindow] makeKeyWindow];
|
||||
[NSApp postEvent: [NSApp currentEvent] atStart: YES];
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
*/
|
||||
#define JUCE_MAJOR_VERSION 1
|
||||
#define JUCE_MINOR_VERSION 54
|
||||
#define JUCE_BUILDNUMBER 18
|
||||
#define JUCE_BUILDNUMBER 19
|
||||
|
||||
/** Current Juce version number.
|
||||
|
||||
|
|
|
|||
|
|
@ -236,7 +236,7 @@ public:
|
|||
&& 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)
|
||||
return pointInParentSpace - comp.getPosition();
|
||||
|
|
@ -244,7 +244,7 @@ public:
|
|||
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)
|
||||
return areaInParentSpace - comp.getPosition();
|
||||
|
|
@ -252,7 +252,7 @@ public:
|
|||
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)
|
||||
return pointInLocalSpace + comp.getPosition();
|
||||
|
|
@ -260,7 +260,7 @@ public:
|
|||
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)
|
||||
return areaInLocalSpace + comp.getPosition();
|
||||
|
|
@ -269,7 +269,7 @@ public:
|
|||
}
|
||||
|
||||
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();
|
||||
jassert (directParent != nullptr);
|
||||
|
|
@ -281,7 +281,7 @@ public:
|
|||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
@ -2326,66 +2326,41 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
|
|||
return;
|
||||
}
|
||||
|
||||
if (! flags.mouseInsideFlag)
|
||||
{
|
||||
flags.mouseInsideFlag = true;
|
||||
flags.mouseOverFlag = true;
|
||||
flags.mouseDownFlag = false;
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
BailOutChecker checker (this);
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
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::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseEnter, me);
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.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)
|
||||
{
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.mouseDownFlag)
|
||||
{
|
||||
internalMouseUp (source, relativePos, time, source.getCurrentModifiers().getRawFlags());
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
}
|
||||
mouseExit (me);
|
||||
|
||||
if (flags.mouseInsideFlag || flags.mouseOverFlag)
|
||||
{
|
||||
flags.mouseInsideFlag = false;
|
||||
flags.mouseOverFlag = false;
|
||||
flags.mouseDownFlag = false;
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
Desktop::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseExit, me);
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
mouseExit (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.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,
|
||||
source.getNumberOfMultipleClicks(), false);
|
||||
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
|
||||
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseDown, me);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -2442,9 +2416,6 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
return;
|
||||
}
|
||||
|
||||
flags.mouseDownFlag = true;
|
||||
flags.mouseOverFlag = true;
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
|
|
@ -2456,8 +2427,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
|
||||
desktop.getMouseListeners().callChecked (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)
|
||||
{
|
||||
if (flags.mouseDownFlag)
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
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;
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.getMouseListeners().callChecked (checker, &MouseListener::mouseUp, me);
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
// check for double-click
|
||||
if (me.getNumberOfClicks() >= 2)
|
||||
{
|
||||
flags.mouseDownFlag = false;
|
||||
|
||||
BailOutChecker checker (this);
|
||||
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
||||
const MouseEvent me (source, relativePos,
|
||||
oldModifiers, this, this, time,
|
||||
getLocalPoint (nullptr, source.getLastMouseDownPosition()),
|
||||
source.getLastMouseDownTime(),
|
||||
source.getNumberOfMultipleClicks(),
|
||||
source.hasMouseMovedSignificantlySincePressed());
|
||||
|
||||
mouseUp (me);
|
||||
mouseDoubleClick (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseUp, me);
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
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)
|
||||
{
|
||||
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::getInstance().getMouseListeners().callChecked (checker, &MouseListener::mouseDrag, me);
|
||||
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.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)
|
||||
|
|
@ -2552,15 +2509,12 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r
|
|||
}
|
||||
else
|
||||
{
|
||||
flags.mouseOverFlag = true;
|
||||
|
||||
mouseMove (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseMove, me);
|
||||
desktop.getMouseListeners().callChecked (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
|
||||
{
|
||||
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 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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1769,7 +1769,7 @@ public:
|
|||
|
||||
@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.
|
||||
|
||||
|
|
@ -1777,7 +1777,7 @@ public:
|
|||
|
||||
@see isMouseOver, isMouseButtonDown, isMouseButtonDownAnywhere
|
||||
*/
|
||||
bool isMouseOverOrDragging() const noexcept;
|
||||
bool isMouseOverOrDragging() const;
|
||||
|
||||
/** Returns true if a mouse button is currently down.
|
||||
|
||||
|
|
@ -2271,9 +2271,6 @@ private:
|
|||
bool bufferToImageFlag : 1;
|
||||
bool bringToFrontOnClickFlag : 1;
|
||||
bool repaintOnMouseActivityFlag : 1;
|
||||
bool mouseDownFlag : 1;
|
||||
bool mouseOverFlag : 1;
|
||||
bool mouseInsideFlag : 1;
|
||||
bool currentlyModalFlag : 1;
|
||||
bool isDisabledFlag : 1;
|
||||
bool childCompFocusedFlag : 1;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -392,6 +392,7 @@ private:
|
|||
|
||||
void timerCallback();
|
||||
void resetTimer();
|
||||
ListenerList <MouseListener>& getMouseListeners();
|
||||
|
||||
int getNumDisplayMonitors() const noexcept;
|
||||
const Rectangle<int> getDisplayMonitorCoordinates (int index, bool clippedToWorkArea) const noexcept;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ ModifierKeys& ModifierKeys::operator= (const ModifierKeys& other) noexcept
|
|||
|
||||
ModifierKeys ModifierKeys::currentModifiers;
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiers() noexcept
|
||||
{
|
||||
return currentModifiers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,21 +128,21 @@ public:
|
|||
/** Middle mouse button flag. */
|
||||
middleButtonModifier = 64,
|
||||
|
||||
#if JUCE_MAC
|
||||
#if JUCE_MAC
|
||||
/** Command key flag - on windows this is the same as the CTRL key flag. */
|
||||
commandModifier = 8,
|
||||
|
||||
/** Popup menu flag - on windows this is the same as rightButtonModifier, on the
|
||||
Mac it's the same as (rightButtonModifier | ctrlModifier). */
|
||||
popupMenuClickModifier = rightButtonModifier | ctrlModifier,
|
||||
#else
|
||||
#else
|
||||
/** Command key flag - on windows this is the same as the CTRL key flag. */
|
||||
commandModifier = ctrlModifier,
|
||||
|
||||
/** Popup menu flag - on windows this is the same as rightButtonModifier, on the
|
||||
Mac it's the same as (rightButtonModifier | ctrlModifier). */
|
||||
popupMenuClickModifier = rightButtonModifier,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** Represents a combination of all the shift, alt, ctrl and command key modifiers. */
|
||||
allKeyboardModifiers = shiftModifier | ctrlModifier | altModifier | commandModifier,
|
||||
|
|
@ -153,10 +153,10 @@ public:
|
|||
|
||||
//==============================================================================
|
||||
/** 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 */
|
||||
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; }
|
||||
|
|
@ -180,7 +180,7 @@ public:
|
|||
|
||||
@see getCurrentModifiersRealtime
|
||||
*/
|
||||
static const ModifierKeys getCurrentModifiers() noexcept;
|
||||
static ModifierKeys getCurrentModifiers() noexcept;
|
||||
|
||||
/** Creates a ModifierKeys object to represent the current state of the
|
||||
keyboard and mouse buttons.
|
||||
|
|
@ -196,7 +196,7 @@ public:
|
|||
update the value returned by getCurrentModifiers(), which could cause subtle changes
|
||||
in the behaviour of some components.
|
||||
*/
|
||||
static const ModifierKeys getCurrentModifiersRealtime() noexcept;
|
||||
static ModifierKeys getCurrentModifiersRealtime() noexcept;
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public:
|
|||
return static_cast <Component*> (componentUnderMouse);
|
||||
}
|
||||
|
||||
const ModifierKeys getCurrentModifiers() const
|
||||
ModifierKeys getCurrentModifiers() const
|
||||
{
|
||||
return ModifierKeys::getCurrentModifiers().withoutMouseButtons().withFlags (buttonState.getRawFlags());
|
||||
}
|
||||
|
|
@ -89,7 +89,7 @@ public:
|
|||
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
|
||||
// value, because that can cause continuity problems.
|
||||
|
|
@ -197,8 +197,12 @@ public:
|
|||
|
||||
if (current != nullptr)
|
||||
{
|
||||
WeakReference<Component> safeOldComp (current);
|
||||
setButtons (screenPos, time, ModifierKeys());
|
||||
sendMouseExit (current, screenPos, time);
|
||||
|
||||
if (safeOldComp != nullptr)
|
||||
sendMouseExit (current, screenPos, time);
|
||||
|
||||
buttonState = originalButtonState;
|
||||
}
|
||||
|
||||
|
|
@ -507,8 +511,8 @@ bool MouseInputSource::canHover() const { return
|
|||
bool MouseInputSource::hasMouseWheel() const { return isMouse(); }
|
||||
int MouseInputSource::getIndex() const { return pimpl->index; }
|
||||
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(); }
|
||||
void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); }
|
||||
int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); }
|
||||
|
|
|
|||
|
|
@ -97,12 +97,12 @@ public:
|
|||
bool isDragging() const;
|
||||
|
||||
/** 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
|
||||
held down on this device.
|
||||
*/
|
||||
const ModifierKeys getCurrentModifiers() const;
|
||||
ModifierKeys getCurrentModifiers() const;
|
||||
|
||||
/** Returns the component that was last known to be under this pointer. */
|
||||
Component* getComponentUnderMouse() const;
|
||||
|
|
@ -180,7 +180,7 @@ private:
|
|||
friend class MouseInputSourceInternal;
|
||||
ScopedPointer<MouseInputSourceInternal> pimpl;
|
||||
|
||||
static const Point<int> getCurrentMousePosition();
|
||||
static Point<int> getCurrentMousePosition();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MouseInputSource);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public:
|
|||
/** Returns the y position of the bottom of the glyph. */
|
||||
float getBottom() const { return y + font.getDescent(); }
|
||||
/** 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. */
|
||||
|
|
@ -255,7 +255,7 @@ public:
|
|||
@param includeWhitespace if true, the extent of any whitespace characters will also
|
||||
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.
|
||||
|
||||
|
|
|
|||
|
|
@ -620,12 +620,12 @@ public:
|
|||
This is only relevent for floating-point rectangles, of course.
|
||||
@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 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);
|
||||
}
|
||||
|
|
@ -656,7 +656,7 @@ public:
|
|||
Obviously this is mainly useful for rectangles that use integer types.
|
||||
@see getSmallestIntegerContainer
|
||||
*/
|
||||
const Rectangle<float> toFloat() const noexcept
|
||||
Rectangle<float> toFloat() const noexcept
|
||||
{
|
||||
return Rectangle<float> (static_cast<float> (x), static_cast<float> (y),
|
||||
static_cast<float> (w), static_cast<float> (h));
|
||||
|
|
|
|||
|
|
@ -578,7 +578,7 @@ void Desktop::createMouseInputSources()
|
|||
mouseSources.add (new MouseInputSource (i, false));
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
return AndroidComponentPeer::lastMousePos;
|
||||
}
|
||||
|
|
@ -600,7 +600,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = AndroidComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
return AndroidComponentPeer::currentModifiers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2616,7 +2616,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = LinuxComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
Window root, child;
|
||||
int x, y, winx, winy;
|
||||
|
|
@ -2798,7 +2798,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
&& (matchedDepth == desiredDepth);
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
Window root, child;
|
||||
int x, y, winx, winy;
|
||||
|
|
|
|||
|
|
@ -286,7 +286,7 @@ bool KeyPress::isKeyCurrentlyDown (const int keyCode)
|
|||
|
||||
ModifierKeys UIViewComponentPeer::currentModifiers;
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
return UIViewComponentPeer::currentModifiers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
return true;
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
return juce_lastMousePos;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,13 +32,13 @@
|
|||
namespace
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ public:
|
|||
componentPeerChanged();
|
||||
}
|
||||
|
||||
const Rectangle<int> getViewBounds() const
|
||||
Rectangle<int> getViewBounds() const
|
||||
{
|
||||
NSRect r = [view frame];
|
||||
return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height);
|
||||
|
|
|
|||
|
|
@ -905,7 +905,7 @@ void NSViewComponentPeer::updateKeysDown (NSEvent* ev, bool isKeyDown)
|
|||
}
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
return NSViewComponentPeer::currentModifiers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
return true;
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
const NSPoint p ([NSEvent mouseLocation]);
|
||||
|
|
|
|||
|
|
@ -2575,7 +2575,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = Win32ComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
ModifierKeys ModifierKeys::getCurrentModifiersRealtime() noexcept
|
||||
{
|
||||
Win32ComponentPeer::updateKeyModifiers();
|
||||
|
||||
|
|
@ -2785,7 +2785,7 @@ void Desktop::createMouseInputSources()
|
|||
mouseSources.add (new MouseInputSource (0, true));
|
||||
}
|
||||
|
||||
const Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
Point<int> MouseInputSource::getCurrentMousePosition()
|
||||
{
|
||||
POINT mousePos;
|
||||
GetCursorPos (&mousePos);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue