mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-20 01:14:20 +00:00
Removed the Component::getComponentUID() method, and slimmed down the component class implementation slightly.
This commit is contained in:
parent
584d9a4ec0
commit
dbdea7c6d4
9 changed files with 394 additions and 730 deletions
|
|
@ -557,7 +557,7 @@ PopupMenu ComponentLayout::getRelativeTargetMenu (Component* comp, int whichDime
|
|||
{
|
||||
Component* const c = components.getUnchecked(i);
|
||||
|
||||
if (c->getComponentUID() != comp->getComponentUID())
|
||||
if (c != comp)
|
||||
{
|
||||
m.addItem (menuIdBase + i + 1,
|
||||
T("Relative to ") + getComponentMemberVariableName (c)
|
||||
|
|
|
|||
|
|
@ -39862,18 +39862,158 @@ enum ComponentMessageNumbers
|
|||
exitModalStateMessage = 0x7fff0002
|
||||
};
|
||||
|
||||
static uint32 nextComponentUID = 0;
|
||||
Component* Component::currentlyFocusedComponent = 0;
|
||||
|
||||
class Component::MouseListenerList
|
||||
{
|
||||
public:
|
||||
MouseListenerList()
|
||||
: numDeepMouseListeners (0)
|
||||
{
|
||||
}
|
||||
|
||||
~MouseListenerList()
|
||||
{
|
||||
}
|
||||
|
||||
void addListener (MouseListener* const newListener, const bool wantsEventsForAllNestedChildComponents)
|
||||
{
|
||||
if (! listeners.contains (newListener))
|
||||
{
|
||||
if (wantsEventsForAllNestedChildComponents)
|
||||
{
|
||||
listeners.insert (0, newListener);
|
||||
++numDeepMouseListeners;
|
||||
}
|
||||
else
|
||||
{
|
||||
listeners.add (newListener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void removeListener (MouseListener* const listenerToRemove)
|
||||
{
|
||||
const int index = listeners.indexOf (listenerToRemove);
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
if (index < numDeepMouseListeners)
|
||||
--numDeepMouseListeners;
|
||||
|
||||
listeners.remove (index);
|
||||
}
|
||||
}
|
||||
|
||||
static void sendMouseEvent (Component* comp, BailOutChecker& checker,
|
||||
void (MouseListener::*eventMethod) (const MouseEvent&), const MouseEvent& e)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
{
|
||||
MouseListenerList* const list = comp->mouseListeners_;
|
||||
|
||||
if (list != 0)
|
||||
{
|
||||
for (int i = list->listeners.size(); --i >= 0;)
|
||||
{
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (e);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->listeners.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = comp->parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
MouseListenerList* const list = p->mouseListeners_;
|
||||
|
||||
if (list != 0 && list->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (comp, p);
|
||||
|
||||
for (int i = list->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (e);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
}
|
||||
|
||||
static void sendWheelEvent (Component* comp, BailOutChecker& checker, const MouseEvent& e,
|
||||
const float wheelIncrementX, const float wheelIncrementY)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
{
|
||||
MouseListenerList* const list = comp->mouseListeners_;
|
||||
|
||||
if (list != 0)
|
||||
{
|
||||
for (int i = list->listeners.size(); --i >= 0;)
|
||||
{
|
||||
list->listeners.getUnchecked(i)->mouseWheelMove (e, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->listeners.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = comp->parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
MouseListenerList* const list = p->mouseListeners_;
|
||||
|
||||
if (list != 0 && list->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (comp, p);
|
||||
|
||||
for (int i = list->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
list->listeners.getUnchecked(i)->mouseWheelMove (e, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
Array <MouseListener*> listeners;
|
||||
int numDeepMouseListeners;
|
||||
|
||||
MouseListenerList (const MouseListenerList&);
|
||||
MouseListenerList& operator= (const MouseListenerList&);
|
||||
};
|
||||
|
||||
Component::Component()
|
||||
: parentComponent_ (0),
|
||||
componentUID (++nextComponentUID),
|
||||
numDeepMouseListeners (0),
|
||||
lookAndFeel_ (0),
|
||||
effect_ (0),
|
||||
bufferedImage_ (0),
|
||||
mouseListeners_ (0),
|
||||
keyListeners_ (0),
|
||||
componentFlags_ (0),
|
||||
componentTransparency (0)
|
||||
{
|
||||
|
|
@ -39882,13 +40022,9 @@ Component::Component()
|
|||
Component::Component (const String& name)
|
||||
: componentName_ (name),
|
||||
parentComponent_ (0),
|
||||
componentUID (++nextComponentUID),
|
||||
numDeepMouseListeners (0),
|
||||
lookAndFeel_ (0),
|
||||
effect_ (0),
|
||||
bufferedImage_ (0),
|
||||
mouseListeners_ (0),
|
||||
keyListeners_ (0),
|
||||
componentFlags_ (0),
|
||||
componentTransparency (0)
|
||||
{
|
||||
|
|
@ -39915,9 +40051,6 @@ Component::~Component()
|
|||
|
||||
for (int i = childComponentList_.size(); --i >= 0;)
|
||||
childComponentList_.getUnchecked(i)->parentComponent_ = 0;
|
||||
|
||||
delete mouseListeners_;
|
||||
delete keyListeners_;
|
||||
}
|
||||
|
||||
void Component::setName (const String& name)
|
||||
|
|
@ -41756,20 +41889,9 @@ void Component::addMouseListener (MouseListener* const newListener,
|
|||
jassert ((newListener != this) || wantsEventsForAllNestedChildComponents);
|
||||
|
||||
if (mouseListeners_ == 0)
|
||||
mouseListeners_ = new Array<MouseListener*>();
|
||||
mouseListeners_ = new MouseListenerList();
|
||||
|
||||
if (! mouseListeners_->contains (newListener))
|
||||
{
|
||||
if (wantsEventsForAllNestedChildComponents)
|
||||
{
|
||||
mouseListeners_->insert (0, newListener);
|
||||
++numDeepMouseListeners;
|
||||
}
|
||||
else
|
||||
{
|
||||
mouseListeners_->add (newListener);
|
||||
}
|
||||
}
|
||||
mouseListeners_->addListener (newListener, wantsEventsForAllNestedChildComponents);
|
||||
}
|
||||
|
||||
void Component::removeMouseListener (MouseListener* const listenerToRemove)
|
||||
|
|
@ -41779,17 +41901,7 @@ void Component::removeMouseListener (MouseListener* const listenerToRemove)
|
|||
checkMessageManagerIsLocked
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
const int index = mouseListeners_->indexOf (listenerToRemove);
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
if (index < numDeepMouseListeners)
|
||||
--numDeepMouseListeners;
|
||||
|
||||
mouseListeners_->remove (index);
|
||||
}
|
||||
}
|
||||
mouseListeners_->removeListener (listenerToRemove);
|
||||
}
|
||||
|
||||
void Component::internalMouseEnter (MouseInputSource& source, const Point<int>& relativePos, const Time& time)
|
||||
|
|
@ -41813,9 +41925,7 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
|
|||
repaint();
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos,
|
||||
time, 0, false);
|
||||
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
mouseEnter (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
|
|
@ -41824,43 +41934,7 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
|
|||
Desktop::getInstance().resetTimer();
|
||||
Desktop::getInstance().mouseListeners.callChecked (checker, &MouseListener::mouseEnter, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
mouseListeners_->getUnchecked(i)->mouseEnter (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked(i)->mouseEnter (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseEnter, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -41886,8 +41960,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r
|
|||
repaint();
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos,
|
||||
time, 0, false);
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
mouseExit (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
|
|
@ -41896,43 +41969,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r
|
|||
Desktop::getInstance().resetTimer();
|
||||
Desktop::getInstance().mouseListeners.callChecked (checker, &MouseListener::mouseExit, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseExit (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseExit (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseExit, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42060,43 +42097,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseDown (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseDown (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseDown, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseUp (MouseInputSource& source, const Point<int>& relativePos, const Time& time, const ModifierKeys& oldModifiers)
|
||||
|
|
@ -42127,95 +42128,21 @@ void Component::internalMouseUp (MouseInputSource& source, const Point<int>& rel
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseUp, me);
|
||||
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseUp (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseUp (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
}
|
||||
|
||||
// check for double-click
|
||||
if (me.getNumberOfClicks() >= 2)
|
||||
{
|
||||
const int numListeners = (mouseListeners_ != 0) ? mouseListeners_->size() : 0;
|
||||
|
||||
mouseDoubleClick (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
for (int i = numListeners; --i >= 0;)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
MouseListener* const ml = (MouseListener*)((*mouseListeners_)[i]);
|
||||
if (ml != 0)
|
||||
ml->mouseDoubleClick (me);
|
||||
}
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseDoubleClick (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseDoubleClick, me);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -42245,43 +42172,7 @@ void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& r
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDrag, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseDrag (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseDrag (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseDrag, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42311,43 +42202,7 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseMove, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseMove (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseMove (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseMove, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42377,43 +42232,7 @@ void Component::internalMouseWheel (MouseInputSource& source, const Point<int>&
|
|||
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseWheelMove, me, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseWheelMove (me, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseWheelMove (me, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendWheelEvent (this, checker, me, wheelIncrementX, wheelIncrementY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -71403,15 +71222,13 @@ private:
|
|||
};
|
||||
|
||||
MouseCursor::MouseCursor()
|
||||
: cursorHandle (SharedCursorHandle::createStandard (NormalCursor))
|
||||
: cursorHandle (0)
|
||||
{
|
||||
jassert (cursorHandle != 0);
|
||||
}
|
||||
|
||||
MouseCursor::MouseCursor (const StandardCursorType type)
|
||||
: cursorHandle (SharedCursorHandle::createStandard (type))
|
||||
: cursorHandle (type != MouseCursor::NormalCursor ? SharedCursorHandle::createStandard (type) : 0)
|
||||
{
|
||||
jassert (cursorHandle != 0);
|
||||
}
|
||||
|
||||
MouseCursor::MouseCursor (const Image& image, const int hotSpotX, const int hotSpotY)
|
||||
|
|
@ -71420,19 +71237,24 @@ MouseCursor::MouseCursor (const Image& image, const int hotSpotX, const int hotS
|
|||
}
|
||||
|
||||
MouseCursor::MouseCursor (const MouseCursor& other)
|
||||
: cursorHandle (other.cursorHandle->retain())
|
||||
: cursorHandle (other.cursorHandle == 0 ? 0 : other.cursorHandle->retain())
|
||||
{
|
||||
}
|
||||
|
||||
MouseCursor::~MouseCursor()
|
||||
{
|
||||
cursorHandle->release();
|
||||
if (cursorHandle != 0)
|
||||
cursorHandle->release();
|
||||
}
|
||||
|
||||
MouseCursor& MouseCursor::operator= (const MouseCursor& other)
|
||||
{
|
||||
other.cursorHandle->retain();
|
||||
cursorHandle->release();
|
||||
if (other.cursorHandle != 0)
|
||||
other.cursorHandle->retain();
|
||||
|
||||
if (cursorHandle != 0)
|
||||
cursorHandle->release();
|
||||
|
||||
cursorHandle = other.cursorHandle;
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -71449,7 +71271,7 @@ bool MouseCursor::operator!= (const MouseCursor& other) const throw()
|
|||
|
||||
void* MouseCursor::getHandle() const throw()
|
||||
{
|
||||
return cursorHandle->getHandle();
|
||||
return cursorHandle != 0 ? cursorHandle->getHandle() : 0;
|
||||
}
|
||||
|
||||
void MouseCursor::showWaitCursor()
|
||||
|
|
@ -244300,7 +244122,12 @@ void* MouseCursor::createStandardMouseCursor (const MouseCursor::StandardCursorT
|
|||
|
||||
void MouseCursor::showInWindow (ComponentPeer*) const
|
||||
{
|
||||
SetCursor ((HCURSOR) getHandle());
|
||||
HCURSOR c = (HCURSOR) getHandle();
|
||||
|
||||
if (c == 0)
|
||||
c = LoadCursor (0, IDC_ARROW);
|
||||
|
||||
SetCursor (c);
|
||||
}
|
||||
|
||||
void MouseCursor::showInAllWindows() const
|
||||
|
|
@ -258483,6 +258310,8 @@ public:
|
|||
if (! XInitImage (xImage))
|
||||
jassertfalse;
|
||||
}
|
||||
|
||||
zeromem (imageData, h * lineStride);
|
||||
}
|
||||
|
||||
~XBitmapImage()
|
||||
|
|
@ -261493,7 +261322,8 @@ public:
|
|||
bitDepth (16),
|
||||
numChannelsRunning (0),
|
||||
latency (0),
|
||||
isInput (forInput)
|
||||
isInput (forInput),
|
||||
isInterleaved (true)
|
||||
{
|
||||
failed (snd_pcm_open (&handle, deviceID.toUTF8(),
|
||||
forInput ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK,
|
||||
|
|
@ -261654,6 +261484,7 @@ public:
|
|||
if (isInterleaved)
|
||||
{
|
||||
scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false);
|
||||
scratch.fillWith (0); // (not clearing this data causes warnings in valgrind)
|
||||
|
||||
snd_pcm_sframes_t num = snd_pcm_readi (handle, scratch.getData(), numSamples);
|
||||
|
||||
|
|
@ -269587,7 +269418,12 @@ void MouseCursor::showInAllWindows() const
|
|||
|
||||
void MouseCursor::showInWindow (ComponentPeer*) const
|
||||
{
|
||||
[((NSCursor*) getHandle()) set];
|
||||
NSCursor* c = (NSCursor*) getHandle();
|
||||
|
||||
if (c == 0)
|
||||
c = [NSCursor arrowCursor];
|
||||
|
||||
[c set];
|
||||
}
|
||||
|
||||
#else
|
||||
|
|
@ -274171,7 +274007,12 @@ void MouseCursor::showInAllWindows() const
|
|||
|
||||
void MouseCursor::showInWindow (ComponentPeer*) const
|
||||
{
|
||||
[((NSCursor*) getHandle()) set];
|
||||
NSCursor* c = (NSCursor*) getHandle();
|
||||
|
||||
if (c == 0)
|
||||
c = [NSCursor arrowCursor];
|
||||
|
||||
[c set];
|
||||
}
|
||||
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -27802,14 +27802,6 @@ public:
|
|||
*/
|
||||
void* getWindowHandle() const;
|
||||
|
||||
/** When created, each component is given a number to uniquely identify it.
|
||||
|
||||
The number is incremented each time a new component is created, so it's a more
|
||||
unique way of identifying a component than using its memory location (which
|
||||
may be reused after the component is deleted, of course).
|
||||
*/
|
||||
uint32 getComponentUID() const throw() { return componentUID; }
|
||||
|
||||
/** Holds a pointer to some type of Component, which automatically becomes null if
|
||||
the component is deleted.
|
||||
|
||||
|
|
@ -27918,16 +27910,18 @@ private:
|
|||
|
||||
String componentName_;
|
||||
Component* parentComponent_;
|
||||
uint32 componentUID;
|
||||
Rectangle<int> bounds_;
|
||||
int numDeepMouseListeners;
|
||||
Array <Component*> childComponentList_;
|
||||
LookAndFeel* lookAndFeel_;
|
||||
MouseCursor cursor_;
|
||||
ImageEffectFilter* effect_;
|
||||
Image bufferedImage_;
|
||||
Array <MouseListener*>* mouseListeners_;
|
||||
Array <KeyListener*>* keyListeners_;
|
||||
|
||||
class MouseListenerList;
|
||||
friend class MouseListenerList;
|
||||
friend class ScopedPointer <MouseListenerList>;
|
||||
ScopedPointer <MouseListenerList> mouseListeners_;
|
||||
ScopedPointer <Array <KeyListener*> > keyListeners_;
|
||||
ListenerList <ComponentListener> componentListeners;
|
||||
NamedValueSet properties;
|
||||
|
||||
|
|
|
|||
|
|
@ -52,20 +52,161 @@ enum ComponentMessageNumbers
|
|||
exitModalStateMessage = 0x7fff0002
|
||||
};
|
||||
|
||||
static uint32 nextComponentUID = 0;
|
||||
Component* Component::currentlyFocusedComponent = 0;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class Component::MouseListenerList
|
||||
{
|
||||
public:
|
||||
MouseListenerList()
|
||||
: numDeepMouseListeners (0)
|
||||
{
|
||||
}
|
||||
|
||||
~MouseListenerList()
|
||||
{
|
||||
}
|
||||
|
||||
void addListener (MouseListener* const newListener, const bool wantsEventsForAllNestedChildComponents)
|
||||
{
|
||||
if (! listeners.contains (newListener))
|
||||
{
|
||||
if (wantsEventsForAllNestedChildComponents)
|
||||
{
|
||||
listeners.insert (0, newListener);
|
||||
++numDeepMouseListeners;
|
||||
}
|
||||
else
|
||||
{
|
||||
listeners.add (newListener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void removeListener (MouseListener* const listenerToRemove)
|
||||
{
|
||||
const int index = listeners.indexOf (listenerToRemove);
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
if (index < numDeepMouseListeners)
|
||||
--numDeepMouseListeners;
|
||||
|
||||
listeners.remove (index);
|
||||
}
|
||||
}
|
||||
|
||||
static void sendMouseEvent (Component* comp, BailOutChecker& checker,
|
||||
void (MouseListener::*eventMethod) (const MouseEvent&), const MouseEvent& e)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
{
|
||||
MouseListenerList* const list = comp->mouseListeners_;
|
||||
|
||||
if (list != 0)
|
||||
{
|
||||
for (int i = list->listeners.size(); --i >= 0;)
|
||||
{
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (e);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->listeners.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = comp->parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
MouseListenerList* const list = p->mouseListeners_;
|
||||
|
||||
if (list != 0 && list->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (comp, p);
|
||||
|
||||
for (int i = list->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (e);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
}
|
||||
|
||||
static void sendWheelEvent (Component* comp, BailOutChecker& checker, const MouseEvent& e,
|
||||
const float wheelIncrementX, const float wheelIncrementY)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
{
|
||||
MouseListenerList* const list = comp->mouseListeners_;
|
||||
|
||||
if (list != 0)
|
||||
{
|
||||
for (int i = list->listeners.size(); --i >= 0;)
|
||||
{
|
||||
list->listeners.getUnchecked(i)->mouseWheelMove (e, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->listeners.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = comp->parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
MouseListenerList* const list = p->mouseListeners_;
|
||||
|
||||
if (list != 0 && list->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (comp, p);
|
||||
|
||||
for (int i = list->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
list->listeners.getUnchecked(i)->mouseWheelMove (e, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
Array <MouseListener*> listeners;
|
||||
int numDeepMouseListeners;
|
||||
|
||||
MouseListenerList (const MouseListenerList&);
|
||||
MouseListenerList& operator= (const MouseListenerList&);
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
Component::Component()
|
||||
: parentComponent_ (0),
|
||||
componentUID (++nextComponentUID),
|
||||
numDeepMouseListeners (0),
|
||||
lookAndFeel_ (0),
|
||||
effect_ (0),
|
||||
bufferedImage_ (0),
|
||||
mouseListeners_ (0),
|
||||
keyListeners_ (0),
|
||||
componentFlags_ (0),
|
||||
componentTransparency (0)
|
||||
{
|
||||
|
|
@ -74,13 +215,9 @@ Component::Component()
|
|||
Component::Component (const String& name)
|
||||
: componentName_ (name),
|
||||
parentComponent_ (0),
|
||||
componentUID (++nextComponentUID),
|
||||
numDeepMouseListeners (0),
|
||||
lookAndFeel_ (0),
|
||||
effect_ (0),
|
||||
bufferedImage_ (0),
|
||||
mouseListeners_ (0),
|
||||
keyListeners_ (0),
|
||||
componentFlags_ (0),
|
||||
componentTransparency (0)
|
||||
{
|
||||
|
|
@ -107,9 +244,6 @@ Component::~Component()
|
|||
|
||||
for (int i = childComponentList_.size(); --i >= 0;)
|
||||
childComponentList_.getUnchecked(i)->parentComponent_ = 0;
|
||||
|
||||
delete mouseListeners_;
|
||||
delete keyListeners_;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -1980,20 +2114,9 @@ void Component::addMouseListener (MouseListener* const newListener,
|
|||
jassert ((newListener != this) || wantsEventsForAllNestedChildComponents);
|
||||
|
||||
if (mouseListeners_ == 0)
|
||||
mouseListeners_ = new Array<MouseListener*>();
|
||||
mouseListeners_ = new MouseListenerList();
|
||||
|
||||
if (! mouseListeners_->contains (newListener))
|
||||
{
|
||||
if (wantsEventsForAllNestedChildComponents)
|
||||
{
|
||||
mouseListeners_->insert (0, newListener);
|
||||
++numDeepMouseListeners;
|
||||
}
|
||||
else
|
||||
{
|
||||
mouseListeners_->add (newListener);
|
||||
}
|
||||
}
|
||||
mouseListeners_->addListener (newListener, wantsEventsForAllNestedChildComponents);
|
||||
}
|
||||
|
||||
void Component::removeMouseListener (MouseListener* const listenerToRemove)
|
||||
|
|
@ -2003,17 +2126,7 @@ void Component::removeMouseListener (MouseListener* const listenerToRemove)
|
|||
checkMessageManagerIsLocked
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
const int index = mouseListeners_->indexOf (listenerToRemove);
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
if (index < numDeepMouseListeners)
|
||||
--numDeepMouseListeners;
|
||||
|
||||
mouseListeners_->remove (index);
|
||||
}
|
||||
}
|
||||
mouseListeners_->removeListener (listenerToRemove);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -2038,9 +2151,7 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
|
|||
repaint();
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos,
|
||||
time, 0, false);
|
||||
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
mouseEnter (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
|
|
@ -2049,43 +2160,7 @@ void Component::internalMouseEnter (MouseInputSource& source, const Point<int>&
|
|||
Desktop::getInstance().resetTimer();
|
||||
Desktop::getInstance().mouseListeners.callChecked (checker, &MouseListener::mouseEnter, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
mouseListeners_->getUnchecked(i)->mouseEnter (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked(i)->mouseEnter (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseEnter, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2111,8 +2186,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r
|
|||
repaint();
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(),
|
||||
this, this, time, relativePos,
|
||||
time, 0, false);
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
mouseExit (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
|
|
@ -2121,43 +2195,7 @@ void Component::internalMouseExit (MouseInputSource& source, const Point<int>& r
|
|||
Desktop::getInstance().resetTimer();
|
||||
Desktop::getInstance().mouseListeners.callChecked (checker, &MouseListener::mouseExit, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseExit (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseExit (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseExit, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2288,43 +2326,7 @@ void Component::internalMouseDown (MouseInputSource& source, const Point<int>& r
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDown, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseDown (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseDown (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseDown, me);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -2356,95 +2358,21 @@ void Component::internalMouseUp (MouseInputSource& source, const Point<int>& rel
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseUp, me);
|
||||
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseUp (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseUp (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
}
|
||||
|
||||
// check for double-click
|
||||
if (me.getNumberOfClicks() >= 2)
|
||||
{
|
||||
const int numListeners = (mouseListeners_ != 0) ? mouseListeners_->size() : 0;
|
||||
|
||||
mouseDoubleClick (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDoubleClick, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
for (int i = numListeners; --i >= 0;)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
MouseListener* const ml = (MouseListener*)((*mouseListeners_)[i]);
|
||||
if (ml != 0)
|
||||
ml->mouseDoubleClick (me);
|
||||
}
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseDoubleClick (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseDoubleClick, me);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2474,43 +2402,7 @@ void Component::internalMouseDrag (MouseInputSource& source, const Point<int>& r
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseDrag, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseDrag (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseDrag (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseDrag, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2540,43 +2432,7 @@ void Component::internalMouseMove (MouseInputSource& source, const Point<int>& r
|
|||
desktop.resetTimer();
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseMove, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseMove (me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseMove (me);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendMouseEvent (this, checker, &MouseListener::mouseMove, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2606,43 +2462,7 @@ void Component::internalMouseWheel (MouseInputSource& source, const Point<int>&
|
|||
|
||||
desktop.mouseListeners.callChecked (checker, &MouseListener::mouseWheelMove, me, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
if (mouseListeners_ != 0)
|
||||
{
|
||||
for (int i = mouseListeners_->size(); --i >= 0;)
|
||||
{
|
||||
((MouseListener*) mouseListeners_->getUnchecked (i))->mouseWheelMove (me, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, mouseListeners_->size());
|
||||
}
|
||||
}
|
||||
|
||||
Component* p = parentComponent_;
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
if (p->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker checker2 (this, p);
|
||||
|
||||
for (int i = p->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
p->mouseListeners_->getUnchecked (i)->mouseWheelMove (me, wheelIncrementX, wheelIncrementY);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, p->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
|
||||
p = p->parentComponent_;
|
||||
}
|
||||
MouseListenerList::sendWheelEvent (this, checker, me, wheelIncrementX, wheelIncrementY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1898,14 +1898,6 @@ public:
|
|||
*/
|
||||
void* getWindowHandle() const;
|
||||
|
||||
/** When created, each component is given a number to uniquely identify it.
|
||||
|
||||
The number is incremented each time a new component is created, so it's a more
|
||||
unique way of identifying a component than using its memory location (which
|
||||
may be reused after the component is deleted, of course).
|
||||
*/
|
||||
uint32 getComponentUID() const throw() { return componentUID; }
|
||||
|
||||
//==============================================================================
|
||||
/** Holds a pointer to some type of Component, which automatically becomes null if
|
||||
the component is deleted.
|
||||
|
|
@ -2019,16 +2011,18 @@ private:
|
|||
//==============================================================================
|
||||
String componentName_;
|
||||
Component* parentComponent_;
|
||||
uint32 componentUID;
|
||||
Rectangle<int> bounds_;
|
||||
int numDeepMouseListeners;
|
||||
Array <Component*> childComponentList_;
|
||||
LookAndFeel* lookAndFeel_;
|
||||
MouseCursor cursor_;
|
||||
ImageEffectFilter* effect_;
|
||||
Image bufferedImage_;
|
||||
Array <MouseListener*>* mouseListeners_;
|
||||
Array <KeyListener*>* keyListeners_;
|
||||
|
||||
class MouseListenerList;
|
||||
friend class MouseListenerList;
|
||||
friend class ScopedPointer <MouseListenerList>;
|
||||
ScopedPointer <MouseListenerList> mouseListeners_;
|
||||
ScopedPointer <Array <KeyListener*> > keyListeners_;
|
||||
ListenerList <ComponentListener> componentListeners;
|
||||
NamedValueSet properties;
|
||||
|
||||
|
|
|
|||
|
|
@ -125,15 +125,13 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
MouseCursor::MouseCursor()
|
||||
: cursorHandle (SharedCursorHandle::createStandard (NormalCursor))
|
||||
: cursorHandle (0)
|
||||
{
|
||||
jassert (cursorHandle != 0);
|
||||
}
|
||||
|
||||
MouseCursor::MouseCursor (const StandardCursorType type)
|
||||
: cursorHandle (SharedCursorHandle::createStandard (type))
|
||||
: cursorHandle (type != MouseCursor::NormalCursor ? SharedCursorHandle::createStandard (type) : 0)
|
||||
{
|
||||
jassert (cursorHandle != 0);
|
||||
}
|
||||
|
||||
MouseCursor::MouseCursor (const Image& image, const int hotSpotX, const int hotSpotY)
|
||||
|
|
@ -142,19 +140,24 @@ MouseCursor::MouseCursor (const Image& image, const int hotSpotX, const int hotS
|
|||
}
|
||||
|
||||
MouseCursor::MouseCursor (const MouseCursor& other)
|
||||
: cursorHandle (other.cursorHandle->retain())
|
||||
: cursorHandle (other.cursorHandle == 0 ? 0 : other.cursorHandle->retain())
|
||||
{
|
||||
}
|
||||
|
||||
MouseCursor::~MouseCursor()
|
||||
{
|
||||
cursorHandle->release();
|
||||
if (cursorHandle != 0)
|
||||
cursorHandle->release();
|
||||
}
|
||||
|
||||
MouseCursor& MouseCursor::operator= (const MouseCursor& other)
|
||||
{
|
||||
other.cursorHandle->retain();
|
||||
cursorHandle->release();
|
||||
if (other.cursorHandle != 0)
|
||||
other.cursorHandle->retain();
|
||||
|
||||
if (cursorHandle != 0)
|
||||
cursorHandle->release();
|
||||
|
||||
cursorHandle = other.cursorHandle;
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -171,7 +174,7 @@ bool MouseCursor::operator!= (const MouseCursor& other) const throw()
|
|||
|
||||
void* MouseCursor::getHandle() const throw()
|
||||
{
|
||||
return cursorHandle->getHandle();
|
||||
return cursorHandle != 0 ? cursorHandle->getHandle() : 0;
|
||||
}
|
||||
|
||||
void MouseCursor::showWaitCursor()
|
||||
|
|
|
|||
|
|
@ -123,7 +123,8 @@ public:
|
|||
bitDepth (16),
|
||||
numChannelsRunning (0),
|
||||
latency (0),
|
||||
isInput (forInput)
|
||||
isInput (forInput),
|
||||
isInterleaved (true)
|
||||
{
|
||||
failed (snd_pcm_open (&handle, deviceID.toUTF8(),
|
||||
forInput ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK,
|
||||
|
|
@ -285,6 +286,7 @@ public:
|
|||
if (isInterleaved)
|
||||
{
|
||||
scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false);
|
||||
scratch.fillWith (0); // (not clearing this data causes warnings in valgrind)
|
||||
|
||||
snd_pcm_sframes_t num = snd_pcm_readi (handle, scratch.getData(), numSamples);
|
||||
|
||||
|
|
|
|||
|
|
@ -118,7 +118,12 @@ void MouseCursor::showInAllWindows() const
|
|||
|
||||
void MouseCursor::showInWindow (ComponentPeer*) const
|
||||
{
|
||||
[((NSCursor*) getHandle()) set];
|
||||
NSCursor* c = (NSCursor*) getHandle();
|
||||
|
||||
if (c == 0)
|
||||
c = [NSCursor arrowCursor];
|
||||
|
||||
[c set];
|
||||
}
|
||||
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -2681,7 +2681,12 @@ void* MouseCursor::createStandardMouseCursor (const MouseCursor::StandardCursorT
|
|||
//==============================================================================
|
||||
void MouseCursor::showInWindow (ComponentPeer*) const
|
||||
{
|
||||
SetCursor ((HCURSOR) getHandle());
|
||||
HCURSOR c = (HCURSOR) getHandle();
|
||||
|
||||
if (c == 0)
|
||||
c = LoadCursor (0, IDC_ARROW);
|
||||
|
||||
SetCursor (c);
|
||||
}
|
||||
|
||||
void MouseCursor::showInAllWindows() const
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue