| @@ -34,10 +34,6 @@ ItemPreviewComponent::ItemPreviewComponent (const File& file_) | |||
| tryToLoadImage(); | |||
| } | |||
| ItemPreviewComponent::~ItemPreviewComponent() | |||
| { | |||
| } | |||
| void ItemPreviewComponent::tryToLoadImage() | |||
| { | |||
| facts.clear(); | |||
| @@ -79,7 +75,3 @@ void ItemPreviewComponent::paint (Graphics& g) | |||
| g.drawMultiLineText (facts.joinIntoString ("\n"), | |||
| 10, 15, getWidth() - 16); | |||
| } | |||
| void ItemPreviewComponent::resized() | |||
| { | |||
| } | |||
| @@ -34,13 +34,9 @@ class ItemPreviewComponent : public Component | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| // This will delete the stream | |||
| ItemPreviewComponent (const File& file); | |||
| ~ItemPreviewComponent(); | |||
| void paint (Graphics& g); | |||
| void resized(); | |||
| private: | |||
| StringArray facts; | |||
| @@ -1127,7 +1127,7 @@ public: | |||
| createWindow(); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| if (isShowing()) | |||
| createWindow(); | |||
| @@ -28580,9 +28580,7 @@ int MidiMessage::readVariableLengthVal (const uint8* data, int& numBytesUsed) th | |||
| int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() | |||
| { | |||
| // this method only works for valid starting bytes of a short midi message | |||
| jassert (firstByte >= 0x80 | |||
| && firstByte != 0xf0 | |||
| && firstByte != 0xf7); | |||
| jassert (firstByte >= 0x80 && firstByte != 0xf0 && firstByte != 0xf7); | |||
| static const char messageLengths[] = | |||
| { | |||
| @@ -28602,9 +28600,10 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() | |||
| MidiMessage::MidiMessage() throw() | |||
| : timeStamp (0), | |||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||
| size (1) | |||
| size (2) | |||
| { | |||
| data[0] = 0xfe; | |||
| data[0] = 0xf0; | |||
| data[1] = 0xf7; | |||
| } | |||
| MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) | |||
| @@ -29040,8 +29039,7 @@ const MidiMessage MidiMessage::allNotesOff (const int channel) throw() | |||
| bool MidiMessage::isAllNotesOff() const throw() | |||
| { | |||
| return (data[0] & 0xf0) == 0xb0 | |||
| && data[1] == 123; | |||
| return (data[0] & 0xf0) == 0xb0 && data[1] == 123; | |||
| } | |||
| const MidiMessage MidiMessage::allSoundOff (const int channel) throw() | |||
| @@ -29051,8 +29049,7 @@ const MidiMessage MidiMessage::allSoundOff (const int channel) throw() | |||
| bool MidiMessage::isAllSoundOff() const throw() | |||
| { | |||
| return (data[0] & 0xf0) == 0xb0 | |||
| && data[1] == 120; | |||
| return (data[0] & 0xf0) == 0xb0 && data[1] == 120; | |||
| } | |||
| const MidiMessage MidiMessage::allControllersOff (const int channel) throw() | |||
| @@ -29096,12 +29093,12 @@ const MidiMessage MidiMessage::createSysExMessage (const uint8* sysexData, const | |||
| const uint8* MidiMessage::getSysExData() const throw() | |||
| { | |||
| return (isSysEx()) ? getRawData() + 1 : 0; | |||
| return isSysEx() ? getRawData() + 1 : 0; | |||
| } | |||
| int MidiMessage::getSysExDataSize() const throw() | |||
| { | |||
| return (isSysEx()) ? size - 2 : 0; | |||
| return isSysEx() ? size - 2 : 0; | |||
| } | |||
| bool MidiMessage::isMetaEvent() const throw() | |||
| @@ -29116,10 +29113,7 @@ bool MidiMessage::isActiveSense() const throw() | |||
| int MidiMessage::getMetaEventType() const throw() | |||
| { | |||
| if (*data != 0xff) | |||
| return -1; | |||
| else | |||
| return data[1]; | |||
| return *data != 0xff ? -1 : data[1]; | |||
| } | |||
| int MidiMessage::getMetaEventLength() const throw() | |||
| @@ -29165,21 +29159,17 @@ const String MidiMessage::getTextFromTextMetaEvent() const | |||
| bool MidiMessage::isTrackNameEvent() const throw() | |||
| { | |||
| return (data[1] == 3) | |||
| && (*data == 0xff); | |||
| return (data[1] == 3) && (*data == 0xff); | |||
| } | |||
| bool MidiMessage::isTempoMetaEvent() const throw() | |||
| { | |||
| return (data[1] == 81) | |||
| && (*data == 0xff); | |||
| return (data[1] == 81) && (*data == 0xff); | |||
| } | |||
| bool MidiMessage::isMidiChannelMetaEvent() const throw() | |||
| { | |||
| return (data[1] == 0x20) | |||
| && (*data == 0xff) | |||
| && (data[2] == 1); | |||
| return (data[1] == 0x20) && (*data == 0xff) && (data[2] == 1); | |||
| } | |||
| int MidiMessage::getMidiChannelMetaEventChannel() const throw() | |||
| @@ -29242,8 +29232,7 @@ const MidiMessage MidiMessage::tempoMetaEvent (int microsecondsPerQuarterNote) t | |||
| bool MidiMessage::isTimeSignatureMetaEvent() const throw() | |||
| { | |||
| return (data[1] == 0x58) | |||
| && (*data == (uint8) 0xff); | |||
| return (data[1] == 0x58) && (*data == (uint8) 0xff); | |||
| } | |||
| void MidiMessage::getTimeSignatureInfo (int& numerator, int& denominator) const throw() | |||
| @@ -33884,7 +33873,6 @@ public: | |||
| #endif | |||
| plugin (plugin_), | |||
| isOpen (false), | |||
| wasShowing (false), | |||
| recursiveResize (false), | |||
| pluginWantsKeys (false), | |||
| pluginRefusesToResize (false), | |||
| @@ -33948,19 +33936,12 @@ public: | |||
| } | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| const bool isShowingNow = isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| if (isShowingNow) | |||
| openPluginWindow(); | |||
| else | |||
| closePluginWindow(); | |||
| } | |||
| if (isShowing()) | |||
| openPluginWindow(); | |||
| else | |||
| closePluginWindow(); | |||
| componentMovedOrResized (true, true); | |||
| } | |||
| @@ -34095,7 +34076,7 @@ public: | |||
| private: | |||
| VSTPluginInstance& plugin; | |||
| bool isOpen, wasShowing, recursiveResize; | |||
| bool isOpen, recursiveResize; | |||
| bool pluginWantsKeys, pluginRefusesToResize, alreadyInside; | |||
| #if JUCE_WINDOWS | |||
| @@ -41064,7 +41045,7 @@ void Component::enterModalState (const bool shouldTakeKeyboardFocus, ModalCompon | |||
| void Component::exitModalState (const int returnValue) | |||
| { | |||
| if (isCurrentlyModal()) | |||
| if (flags.currentlyModalFlag) | |||
| { | |||
| if (MessageManager::getInstance()->isThisTheMessageThread()) | |||
| { | |||
| @@ -42884,40 +42865,36 @@ END_JUCE_NAMESPACE | |||
| /*** Start of inlined file: juce_ModalComponentManager.cpp ***/ | |||
| BEGIN_JUCE_NAMESPACE | |||
| class ModalComponentManager::ModalItem : public ComponentListener | |||
| class ModalComponentManager::ModalItem : public ComponentMovementWatcher | |||
| { | |||
| public: | |||
| ModalItem (Component* const comp, Callback* const callback) | |||
| : component (comp), returnValue (0), isActive (true), isDeleted (false) | |||
| : ComponentMovementWatcher (comp), | |||
| component (comp), returnValue (0), isActive (true) | |||
| { | |||
| jassert (comp != 0); | |||
| if (callback != 0) | |||
| callbacks.add (callback); | |||
| jassert (comp != 0); | |||
| component->addComponentListener (this); | |||
| } | |||
| ~ModalItem() | |||
| { | |||
| if (! isDeleted) | |||
| component->removeComponentListener (this); | |||
| } | |||
| void componentMovedOrResized (bool, bool) {} | |||
| void componentBeingDeleted (Component&) | |||
| void componentPeerChanged() | |||
| { | |||
| isDeleted = true; | |||
| cancel(); | |||
| if (! component->isShowing()) | |||
| cancel(); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| if (! component->isShowing()) | |||
| cancel(); | |||
| } | |||
| void componentParentHierarchyChanged (Component&) | |||
| void componentBeingDeleted (Component& comp) | |||
| { | |||
| if (! component->isShowing()) | |||
| if (component == &comp || comp.isParentOf (component)) | |||
| cancel(); | |||
| } | |||
| @@ -42933,7 +42910,7 @@ public: | |||
| Component* component; | |||
| OwnedArray<Callback> callbacks; | |||
| int returnValue; | |||
| bool isActive, isDeleted; | |||
| bool isActive; | |||
| private: | |||
| JUCE_DECLARE_NON_COPYABLE (ModalItem); | |||
| @@ -61892,7 +61869,8 @@ BEGIN_JUCE_NAMESPACE | |||
| ComponentMovementWatcher::ComponentMovementWatcher (Component* const component_) | |||
| : component (component_), | |||
| lastPeer (0), | |||
| reentrant (false) | |||
| reentrant (false), | |||
| wasShowing (component_->isShowing()) | |||
| { | |||
| jassert (component != 0); // can't use this with a null pointer.. | |||
| @@ -61903,17 +61881,15 @@ ComponentMovementWatcher::ComponentMovementWatcher (Component* const component_) | |||
| ComponentMovementWatcher::~ComponentMovementWatcher() | |||
| { | |||
| component->removeComponentListener (this); | |||
| if (component != 0) | |||
| component->removeComponentListener (this); | |||
| unregister(); | |||
| } | |||
| void ComponentMovementWatcher::componentParentHierarchyChanged (Component&) | |||
| { | |||
| // agh! don't delete the target component without deleting this object first! | |||
| jassert (component != 0); | |||
| if (! reentrant) | |||
| if (component != 0 && ! reentrant) | |||
| { | |||
| reentrant = true; | |||
| @@ -61932,30 +61908,55 @@ void ComponentMovementWatcher::componentParentHierarchyChanged (Component&) | |||
| unregister(); | |||
| registerWithParentComps(); | |||
| reentrant = false; | |||
| componentMovedOrResized (*component, true, true); | |||
| if (component != 0) | |||
| componentVisibilityChanged (*component); | |||
| reentrant = false; | |||
| } | |||
| } | |||
| void ComponentMovementWatcher::componentMovedOrResized (Component&, bool wasMoved, bool wasResized) | |||
| { | |||
| // agh! don't delete the target component without deleting this object first! | |||
| jassert (component != 0); | |||
| if (wasMoved) | |||
| if (component != 0) | |||
| { | |||
| const Point<int> pos (component->getTopLevelComponent()->getLocalPoint (component, Point<int>())); | |||
| if (wasMoved) | |||
| { | |||
| const Point<int> pos (component->getTopLevelComponent()->getLocalPoint (component, Point<int>())); | |||
| wasMoved = lastBounds.getPosition() != pos; | |||
| lastBounds.setPosition (pos); | |||
| } | |||
| wasMoved = lastBounds.getPosition() != pos; | |||
| lastBounds.setPosition (pos); | |||
| wasResized = (lastBounds.getWidth() != component->getWidth() || lastBounds.getHeight() != component->getHeight()); | |||
| lastBounds.setSize (component->getWidth(), component->getHeight()); | |||
| if (wasMoved || wasResized) | |||
| componentMovedOrResized (wasMoved, wasResized); | |||
| } | |||
| } | |||
| wasResized = (lastBounds.getWidth() != component->getWidth() || lastBounds.getHeight() != component->getHeight()); | |||
| lastBounds.setSize (component->getWidth(), component->getHeight()); | |||
| void ComponentMovementWatcher::componentBeingDeleted (Component& comp) | |||
| { | |||
| registeredParentComps.removeValue (&comp); | |||
| if (wasMoved || wasResized) | |||
| componentMovedOrResized (wasMoved, wasResized); | |||
| if (component == &comp) | |||
| unregister(); | |||
| } | |||
| void ComponentMovementWatcher::componentVisibilityChanged (Component&) | |||
| { | |||
| if (component != 0) | |||
| { | |||
| const bool isShowingNow = component->isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| componentVisibilityChanged(); | |||
| } | |||
| } | |||
| } | |||
| void ComponentMovementWatcher::registerWithParentComps() | |||
| @@ -64649,7 +64650,7 @@ void Viewport::updateVisibleArea() | |||
| horizontalScrollBar.setSingleStepSize (singleStepX); | |||
| horizontalScrollBar.cancelPendingUpdate(); | |||
| } | |||
| else | |||
| else if (canShowHBar) | |||
| { | |||
| visibleOrigin.setX (0); | |||
| } | |||
| @@ -64662,7 +64663,7 @@ void Viewport::updateVisibleArea() | |||
| verticalScrollBar.setSingleStepSize (singleStepY); | |||
| verticalScrollBar.cancelPendingUpdate(); | |||
| } | |||
| else | |||
| else if (canShowVBar) | |||
| { | |||
| visibleOrigin.setY (0); | |||
| } | |||
| @@ -75632,8 +75633,7 @@ public: | |||
| OpenGLComponentWatcher (OpenGLComponent* const owner_) | |||
| : ComponentMovementWatcher (owner_), | |||
| owner (owner_), | |||
| wasShowing (false) | |||
| owner (owner_) | |||
| { | |||
| } | |||
| @@ -75648,25 +75648,17 @@ public: | |||
| owner->deleteContext(); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| const bool isShowingNow = owner->isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| if (! owner->isShowing()) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| if (! isShowingNow) | |||
| { | |||
| const ScopedLock sl (owner->getContextLock()); | |||
| owner->deleteContext(); | |||
| } | |||
| const ScopedLock sl (owner->getContextLock()); | |||
| owner->deleteContext(); | |||
| } | |||
| } | |||
| private: | |||
| OpenGLComponent* const owner; | |||
| bool wasShowing; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLComponentWatcher); | |||
| }; | |||
| @@ -78819,6 +78811,16 @@ void TopLevelWindow::activeWindowStatusChanged() | |||
| { | |||
| } | |||
| void TopLevelWindow::visibilityChanged() | |||
| { | |||
| if (isShowing() | |||
| && (getPeer()->getStyleFlags() & (ComponentPeer::windowIsTemporary | |||
| | ComponentPeer::windowIgnoresKeyPresses)) == 0) | |||
| { | |||
| toFront (true); | |||
| } | |||
| } | |||
| void TopLevelWindow::parentHierarchyChanged() | |||
| { | |||
| setDropShadowEnabled (useDropShadow); | |||
| @@ -245117,19 +245119,11 @@ namespace ActiveXHelpers | |||
| class ActiveXControlComponent::Pimpl : public ComponentMovementWatcher | |||
| { | |||
| ActiveXControlComponent& owner; | |||
| bool wasShowing; | |||
| public: | |||
| HWND controlHWND; | |||
| IStorage* storage; | |||
| IOleClientSite* clientSite; | |||
| IOleObject* control; | |||
| Pimpl (HWND hwnd, ActiveXControlComponent& owner_) | |||
| : ComponentMovementWatcher (&owner_), | |||
| owner (owner_), | |||
| wasShowing (owner_.isShowing()), | |||
| controlHWND (0), | |||
| storage (new ActiveXHelpers::JuceIStorage()), | |||
| clientSite (new ActiveXHelpers::JuceIOleClientSite (hwnd)), | |||
| @@ -245162,19 +245156,12 @@ public: | |||
| void componentPeerChanged() | |||
| { | |||
| const bool isShowingNow = owner.isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| owner.setControlVisible (isShowingNow); | |||
| } | |||
| componentMovedOrResized (true, true); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| owner.setControlVisible (owner.isShowing()); | |||
| componentPeerChanged(); | |||
| } | |||
| @@ -245223,6 +245210,15 @@ public: | |||
| return DefWindowProc (hwnd, message, wParam, lParam); | |||
| } | |||
| private: | |||
| ActiveXControlComponent& owner; | |||
| public: | |||
| HWND controlHWND; | |||
| IStorage* storage; | |||
| IOleClientSite* clientSite; | |||
| IOleObject* control; | |||
| }; | |||
| ActiveXControlComponent::ActiveXControlComponent() | |||
| @@ -245837,7 +245833,7 @@ public: | |||
| WebBrowserComponent* const owner = dynamic_cast <WebBrowserComponent*> (getParentComponent()); | |||
| jassert (owner != 0); | |||
| EventHandler* handler = new EventHandler (owner); | |||
| EventHandler* handler = new EventHandler (*owner); | |||
| connectionPoint->Advise (handler, &adviseCookie); | |||
| handler->Release(); | |||
| } | |||
| @@ -245913,8 +245909,8 @@ private: | |||
| public ComponentMovementWatcher | |||
| { | |||
| public: | |||
| EventHandler (WebBrowserComponent* const owner_) | |||
| : ComponentMovementWatcher (owner_), | |||
| EventHandler (WebBrowserComponent& owner_) | |||
| : ComponentMovementWatcher (&owner_), | |||
| owner (owner_) | |||
| { | |||
| } | |||
| @@ -245926,43 +245922,32 @@ private: | |||
| HRESULT __stdcall Invoke (DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/, WORD /*wFlags*/, DISPPARAMS* pDispParams, | |||
| VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/) | |||
| { | |||
| switch (dispIdMember) | |||
| if (dispIdMember == DISPID_BEFORENAVIGATE2) | |||
| { | |||
| case DISPID_BEFORENAVIGATE2: | |||
| { | |||
| VARIANT* const vurl = pDispParams->rgvarg[5].pvarVal; | |||
| VARIANT* const vurl = pDispParams->rgvarg[5].pvarVal; | |||
| String url; | |||
| String url; | |||
| if ((vurl->vt & VT_BYREF) != 0) | |||
| url = *vurl->pbstrVal; | |||
| else | |||
| url = vurl->bstrVal; | |||
| *pDispParams->rgvarg->pboolVal | |||
| = owner->pageAboutToLoad (url) ? VARIANT_FALSE | |||
| : VARIANT_TRUE; | |||
| if ((vurl->vt & VT_BYREF) != 0) | |||
| url = *vurl->pbstrVal; | |||
| else | |||
| url = vurl->bstrVal; | |||
| return S_OK; | |||
| } | |||
| *pDispParams->rgvarg->pboolVal | |||
| = owner.pageAboutToLoad (url) ? VARIANT_FALSE | |||
| : VARIANT_TRUE; | |||
| default: | |||
| break; | |||
| return S_OK; | |||
| } | |||
| return E_NOTIMPL; | |||
| } | |||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) {} | |||
| void componentPeerChanged() {} | |||
| void componentVisibilityChanged (Component&) | |||
| { | |||
| owner->visibilityChanged(); | |||
| } | |||
| void componentMovedOrResized (bool, bool ) {} | |||
| void componentPeerChanged() {} | |||
| void componentVisibilityChanged() { owner.visibilityChanged(); } | |||
| private: | |||
| WebBrowserComponent* const owner; | |||
| WebBrowserComponent& owner; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EventHandler); | |||
| }; | |||
| @@ -268154,14 +268139,12 @@ BEGIN_JUCE_NAMESPACE | |||
| class WindowedGLContext : public OpenGLContext | |||
| { | |||
| public: | |||
| WindowedGLContext (Component* const component, | |||
| WindowedGLContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat_, | |||
| NSOpenGLContext* sharedContext) | |||
| : renderContext (0), | |||
| pixelFormat (pixelFormat_) | |||
| { | |||
| jassert (component != 0); | |||
| NSOpenGLPixelFormatAttribute attribs [64]; | |||
| int n = 0; | |||
| attribs[n++] = NSOpenGLPFADoubleBuffer; | |||
| @@ -268300,7 +268283,7 @@ private: | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (this, preferredPixelFormat, | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (*this, preferredPixelFormat, | |||
| contextToShareListsWith != 0 ? (NSOpenGLContext*) contextToShareListsWith->getRawContext() : 0)); | |||
| return (c->renderContext != 0) ? c.release() : 0; | |||
| @@ -273310,23 +273293,17 @@ void MouseCursor::showInWindow (ComponentPeer*) const {} | |||
| class NSViewComponentInternal : public ComponentMovementWatcher | |||
| { | |||
| Component* const owner; | |||
| NSViewComponentPeer* currentPeer; | |||
| bool wasShowing; | |||
| public: | |||
| NSView* const view; | |||
| NSViewComponentInternal (NSView* const view_, Component* const owner_) | |||
| : ComponentMovementWatcher (owner_), | |||
| NSViewComponentInternal (NSView* const view_, Component& owner_) | |||
| : ComponentMovementWatcher (&owner_), | |||
| owner (owner_), | |||
| currentPeer (0), | |||
| wasShowing (false), | |||
| view (view_) | |||
| { | |||
| [view_ retain]; | |||
| if (owner_->isShowing()) | |||
| if (owner.isShowing()) | |||
| componentPeerChanged(); | |||
| } | |||
| @@ -273350,13 +273327,13 @@ public: | |||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||
| { | |||
| Component* const topComp = owner->getTopLevelComponent(); | |||
| Component* const topComp = owner.getTopLevelComponent(); | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (topComp->getLocalPoint (owner, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (&owner, Point<int>())); | |||
| NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner->getWidth(), (float) owner->getHeight()); | |||
| NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner.getWidth(), (float) owner.getHeight()); | |||
| r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height); | |||
| [view setFrame: r]; | |||
| @@ -273365,7 +273342,7 @@ public: | |||
| void componentPeerChanged() | |||
| { | |||
| NSViewComponentPeer* const peer = dynamic_cast <NSViewComponentPeer*> (owner->getPeer()); | |||
| NSViewComponentPeer* const peer = dynamic_cast <NSViewComponentPeer*> (owner.getPeer()); | |||
| if (currentPeer != peer) | |||
| { | |||
| @@ -273382,10 +273359,10 @@ public: | |||
| } | |||
| } | |||
| [view setHidden: ! owner->isShowing()]; | |||
| [view setHidden: ! owner.isShowing()]; | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| componentPeerChanged(); | |||
| } | |||
| @@ -273396,6 +273373,13 @@ public: | |||
| return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height); | |||
| } | |||
| private: | |||
| Component& owner; | |||
| NSViewComponentPeer* currentPeer; | |||
| public: | |||
| NSView* const view; | |||
| private: | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentInternal); | |||
| }; | |||
| @@ -273413,7 +273397,7 @@ void NSViewComponent::setView (void* view) | |||
| if (view != getView()) | |||
| { | |||
| if (view != 0) | |||
| info = new NSViewComponentInternal ((NSView*) view, this); | |||
| info = new NSViewComponentInternal ((NSView*) view, *this); | |||
| else | |||
| info = 0; | |||
| } | |||
| @@ -273782,14 +273766,12 @@ BEGIN_JUCE_NAMESPACE | |||
| class WindowedGLContext : public OpenGLContext | |||
| { | |||
| public: | |||
| WindowedGLContext (Component* const component, | |||
| WindowedGLContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat_, | |||
| NSOpenGLContext* sharedContext) | |||
| : renderContext (0), | |||
| pixelFormat (pixelFormat_) | |||
| { | |||
| jassert (component != 0); | |||
| NSOpenGLPixelFormatAttribute attribs [64]; | |||
| int n = 0; | |||
| attribs[n++] = NSOpenGLPFADoubleBuffer; | |||
| @@ -273928,7 +273910,7 @@ private: | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (this, preferredPixelFormat, | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (*this, preferredPixelFormat, | |||
| contextToShareListsWith != 0 ? (NSOpenGLContext*) contextToShareListsWith->getRawContext() : 0)); | |||
| return (c->renderContext != 0) ? c.release() : 0; | |||
| @@ -73,7 +73,7 @@ namespace JuceDummyNamespace {} | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 53 | |||
| #define JUCE_BUILDNUMBER 10 | |||
| #define JUCE_BUILDNUMBER 11 | |||
| /** Current Juce version number. | |||
| @@ -27916,7 +27916,8 @@ public: | |||
| the graphics context that gets passed to the component's paint() callback. | |||
| If you enable this mode, you'll need to make sure your paint method doesn't call anything like | |||
| Graphics::fillAll(), and doesn't draw beyond the component's bounds, because that'll produce | |||
| artifacts. | |||
| artifacts. Your component also can't have any child components that may be placed beyond its | |||
| bounds. | |||
| */ | |||
| void setPaintingIsUnclipped (bool shouldPaintWithoutClipping) throw(); | |||
| @@ -35475,7 +35476,7 @@ public: | |||
| /** Creates an active-sense message. | |||
| Since the MidiMessage has to contain a valid message, this default constructor | |||
| just initialises it with a simple one-byte active-sense message. | |||
| just initialises it with an empty sysex message. | |||
| */ | |||
| MidiMessage() throw(); | |||
| @@ -51903,6 +51904,8 @@ protected: | |||
| virtual int getDesktopWindowStyleFlags() const; | |||
| /** @internal */ | |||
| void recreateDesktopWindow(); | |||
| /** @internal */ | |||
| void visibilityChanged(); | |||
| private: | |||
| friend class TopLevelWindowManager; | |||
| @@ -54066,17 +54069,26 @@ public: | |||
| /** This callback happens when the component's top-level peer is changed. */ | |||
| virtual void componentPeerChanged() = 0; | |||
| /** This callback happens when the component's visibility state changes, possibly due to | |||
| one of its parents being made visible or invisible. | |||
| */ | |||
| virtual void componentVisibilityChanged() = 0; | |||
| /** @internal */ | |||
| void componentParentHierarchyChanged (Component& component); | |||
| /** @internal */ | |||
| void componentMovedOrResized (Component& component, bool wasMoved, bool wasResized); | |||
| /** @internal */ | |||
| void componentBeingDeleted (Component& component); | |||
| /** @internal */ | |||
| void componentVisibilityChanged (Component& component); | |||
| private: | |||
| WeakReference<Component> component; | |||
| ComponentPeer* lastPeer; | |||
| Array <Component*> registeredParentComps; | |||
| bool reentrant; | |||
| bool reentrant, wasShowing; | |||
| Rectangle<int> lastBounds; | |||
| void unregister(); | |||
| @@ -55,9 +55,7 @@ int MidiMessage::readVariableLengthVal (const uint8* data, int& numBytesUsed) th | |||
| int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() | |||
| { | |||
| // this method only works for valid starting bytes of a short midi message | |||
| jassert (firstByte >= 0x80 | |||
| && firstByte != 0xf0 | |||
| && firstByte != 0xf7); | |||
| jassert (firstByte >= 0x80 && firstByte != 0xf0 && firstByte != 0xf7); | |||
| static const char messageLengths[] = | |||
| { | |||
| @@ -78,9 +76,10 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() | |||
| MidiMessage::MidiMessage() throw() | |||
| : timeStamp (0), | |||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||
| size (1) | |||
| size (2) | |||
| { | |||
| data[0] = 0xfe; | |||
| data[0] = 0xf0; | |||
| data[1] = 0xf7; | |||
| } | |||
| MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) | |||
| @@ -516,8 +515,7 @@ const MidiMessage MidiMessage::allNotesOff (const int channel) throw() | |||
| bool MidiMessage::isAllNotesOff() const throw() | |||
| { | |||
| return (data[0] & 0xf0) == 0xb0 | |||
| && data[1] == 123; | |||
| return (data[0] & 0xf0) == 0xb0 && data[1] == 123; | |||
| } | |||
| const MidiMessage MidiMessage::allSoundOff (const int channel) throw() | |||
| @@ -527,8 +525,7 @@ const MidiMessage MidiMessage::allSoundOff (const int channel) throw() | |||
| bool MidiMessage::isAllSoundOff() const throw() | |||
| { | |||
| return (data[0] & 0xf0) == 0xb0 | |||
| && data[1] == 120; | |||
| return (data[0] & 0xf0) == 0xb0 && data[1] == 120; | |||
| } | |||
| const MidiMessage MidiMessage::allControllersOff (const int channel) throw() | |||
| @@ -573,12 +570,12 @@ const MidiMessage MidiMessage::createSysExMessage (const uint8* sysexData, const | |||
| const uint8* MidiMessage::getSysExData() const throw() | |||
| { | |||
| return (isSysEx()) ? getRawData() + 1 : 0; | |||
| return isSysEx() ? getRawData() + 1 : 0; | |||
| } | |||
| int MidiMessage::getSysExDataSize() const throw() | |||
| { | |||
| return (isSysEx()) ? size - 2 : 0; | |||
| return isSysEx() ? size - 2 : 0; | |||
| } | |||
| bool MidiMessage::isMetaEvent() const throw() | |||
| @@ -594,10 +591,7 @@ bool MidiMessage::isActiveSense() const throw() | |||
| //============================================================================== | |||
| int MidiMessage::getMetaEventType() const throw() | |||
| { | |||
| if (*data != 0xff) | |||
| return -1; | |||
| else | |||
| return data[1]; | |||
| return *data != 0xff ? -1 : data[1]; | |||
| } | |||
| int MidiMessage::getMetaEventLength() const throw() | |||
| @@ -643,21 +637,17 @@ const String MidiMessage::getTextFromTextMetaEvent() const | |||
| bool MidiMessage::isTrackNameEvent() const throw() | |||
| { | |||
| return (data[1] == 3) | |||
| && (*data == 0xff); | |||
| return (data[1] == 3) && (*data == 0xff); | |||
| } | |||
| bool MidiMessage::isTempoMetaEvent() const throw() | |||
| { | |||
| return (data[1] == 81) | |||
| && (*data == 0xff); | |||
| return (data[1] == 81) && (*data == 0xff); | |||
| } | |||
| bool MidiMessage::isMidiChannelMetaEvent() const throw() | |||
| { | |||
| return (data[1] == 0x20) | |||
| && (*data == 0xff) | |||
| && (data[2] == 1); | |||
| return (data[1] == 0x20) && (*data == 0xff) && (data[2] == 1); | |||
| } | |||
| int MidiMessage::getMidiChannelMetaEventChannel() const throw() | |||
| @@ -720,8 +710,7 @@ const MidiMessage MidiMessage::tempoMetaEvent (int microsecondsPerQuarterNote) t | |||
| bool MidiMessage::isTimeSignatureMetaEvent() const throw() | |||
| { | |||
| return (data[1] == 0x58) | |||
| && (*data == (uint8) 0xff); | |||
| return (data[1] == 0x58) && (*data == (uint8) 0xff); | |||
| } | |||
| void MidiMessage::getTimeSignatureInfo (int& numerator, int& denominator) const throw() | |||
| @@ -92,7 +92,7 @@ public: | |||
| /** Creates an active-sense message. | |||
| Since the MidiMessage has to contain a valid message, this default constructor | |||
| just initialises it with a simple one-byte active-sense message. | |||
| just initialises it with an empty sysex message. | |||
| */ | |||
| MidiMessage() throw(); | |||
| @@ -1151,7 +1151,6 @@ public: | |||
| #endif | |||
| plugin (plugin_), | |||
| isOpen (false), | |||
| wasShowing (false), | |||
| recursiveResize (false), | |||
| pluginWantsKeys (false), | |||
| pluginRefusesToResize (false), | |||
| @@ -1216,19 +1215,12 @@ public: | |||
| } | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| const bool isShowingNow = isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| if (isShowingNow) | |||
| openPluginWindow(); | |||
| else | |||
| closePluginWindow(); | |||
| } | |||
| if (isShowing()) | |||
| openPluginWindow(); | |||
| else | |||
| closePluginWindow(); | |||
| componentMovedOrResized (true, true); | |||
| } | |||
| @@ -1368,7 +1360,7 @@ public: | |||
| //============================================================================== | |||
| private: | |||
| VSTPluginInstance& plugin; | |||
| bool isOpen, wasShowing, recursiveResize; | |||
| bool isOpen, recursiveResize; | |||
| bool pluginWantsKeys, pluginRefusesToResize, alreadyInside; | |||
| #if JUCE_WINDOWS | |||
| @@ -33,7 +33,7 @@ | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 53 | |||
| #define JUCE_BUILDNUMBER 10 | |||
| #define JUCE_BUILDNUMBER 11 | |||
| /** Current Juce version number. | |||
| @@ -1563,7 +1563,7 @@ void Component::enterModalState (const bool shouldTakeKeyboardFocus, ModalCompon | |||
| void Component::exitModalState (const int returnValue) | |||
| { | |||
| if (isCurrentlyModal()) | |||
| if (flags.currentlyModalFlag) | |||
| { | |||
| if (MessageManager::getInstance()->isThisTheMessageThread()) | |||
| { | |||
| @@ -1046,7 +1046,8 @@ public: | |||
| the graphics context that gets passed to the component's paint() callback. | |||
| If you enable this mode, you'll need to make sure your paint method doesn't call anything like | |||
| Graphics::fillAll(), and doesn't draw beyond the component's bounds, because that'll produce | |||
| artifacts. | |||
| artifacts. Your component also can't have any child components that may be placed beyond its | |||
| bounds. | |||
| */ | |||
| void setPaintingIsUnclipped (bool shouldPaintWithoutClipping) throw(); | |||
| @@ -32,43 +32,40 @@ BEGIN_JUCE_NAMESPACE | |||
| #include "windows/juce_ComponentPeer.h" | |||
| #include "../../events/juce_MessageManager.h" | |||
| #include "../../application/juce_Application.h" | |||
| #include "layout/juce_ComponentMovementWatcher.h" | |||
| //============================================================================== | |||
| class ModalComponentManager::ModalItem : public ComponentListener | |||
| class ModalComponentManager::ModalItem : public ComponentMovementWatcher | |||
| { | |||
| public: | |||
| ModalItem (Component* const comp, Callback* const callback) | |||
| : component (comp), returnValue (0), isActive (true), isDeleted (false) | |||
| : ComponentMovementWatcher (comp), | |||
| component (comp), returnValue (0), isActive (true) | |||
| { | |||
| jassert (comp != 0); | |||
| if (callback != 0) | |||
| callbacks.add (callback); | |||
| jassert (comp != 0); | |||
| component->addComponentListener (this); | |||
| } | |||
| ~ModalItem() | |||
| { | |||
| if (! isDeleted) | |||
| component->removeComponentListener (this); | |||
| } | |||
| void componentMovedOrResized (bool, bool) {} | |||
| void componentBeingDeleted (Component&) | |||
| void componentPeerChanged() | |||
| { | |||
| isDeleted = true; | |||
| cancel(); | |||
| if (! component->isShowing()) | |||
| cancel(); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| if (! component->isShowing()) | |||
| cancel(); | |||
| } | |||
| void componentParentHierarchyChanged (Component&) | |||
| void componentBeingDeleted (Component& comp) | |||
| { | |||
| if (! component->isShowing()) | |||
| if (component == &comp || comp.isParentOf (component)) | |||
| cancel(); | |||
| } | |||
| @@ -84,7 +81,7 @@ public: | |||
| Component* component; | |||
| OwnedArray<Callback> callbacks; | |||
| int returnValue; | |||
| bool isActive, isDeleted; | |||
| bool isActive; | |||
| private: | |||
| JUCE_DECLARE_NON_COPYABLE (ModalItem); | |||
| @@ -34,7 +34,8 @@ BEGIN_JUCE_NAMESPACE | |||
| ComponentMovementWatcher::ComponentMovementWatcher (Component* const component_) | |||
| : component (component_), | |||
| lastPeer (0), | |||
| reentrant (false) | |||
| reentrant (false), | |||
| wasShowing (component_->isShowing()) | |||
| { | |||
| jassert (component != 0); // can't use this with a null pointer.. | |||
| @@ -45,7 +46,8 @@ ComponentMovementWatcher::ComponentMovementWatcher (Component* const component_) | |||
| ComponentMovementWatcher::~ComponentMovementWatcher() | |||
| { | |||
| component->removeComponentListener (this); | |||
| if (component != 0) | |||
| component->removeComponentListener (this); | |||
| unregister(); | |||
| } | |||
| @@ -53,10 +55,7 @@ ComponentMovementWatcher::~ComponentMovementWatcher() | |||
| //============================================================================== | |||
| void ComponentMovementWatcher::componentParentHierarchyChanged (Component&) | |||
| { | |||
| // agh! don't delete the target component without deleting this object first! | |||
| jassert (component != 0); | |||
| if (! reentrant) | |||
| if (component != 0 && ! reentrant) | |||
| { | |||
| reentrant = true; | |||
| @@ -75,30 +74,55 @@ void ComponentMovementWatcher::componentParentHierarchyChanged (Component&) | |||
| unregister(); | |||
| registerWithParentComps(); | |||
| reentrant = false; | |||
| componentMovedOrResized (*component, true, true); | |||
| if (component != 0) | |||
| componentVisibilityChanged (*component); | |||
| reentrant = false; | |||
| } | |||
| } | |||
| void ComponentMovementWatcher::componentMovedOrResized (Component&, bool wasMoved, bool wasResized) | |||
| { | |||
| // agh! don't delete the target component without deleting this object first! | |||
| jassert (component != 0); | |||
| if (wasMoved) | |||
| if (component != 0) | |||
| { | |||
| const Point<int> pos (component->getTopLevelComponent()->getLocalPoint (component, Point<int>())); | |||
| if (wasMoved) | |||
| { | |||
| const Point<int> pos (component->getTopLevelComponent()->getLocalPoint (component, Point<int>())); | |||
| wasMoved = lastBounds.getPosition() != pos; | |||
| lastBounds.setPosition (pos); | |||
| } | |||
| wasResized = (lastBounds.getWidth() != component->getWidth() || lastBounds.getHeight() != component->getHeight()); | |||
| lastBounds.setSize (component->getWidth(), component->getHeight()); | |||
| wasMoved = lastBounds.getPosition() != pos; | |||
| lastBounds.setPosition (pos); | |||
| if (wasMoved || wasResized) | |||
| componentMovedOrResized (wasMoved, wasResized); | |||
| } | |||
| } | |||
| void ComponentMovementWatcher::componentBeingDeleted (Component& comp) | |||
| { | |||
| registeredParentComps.removeValue (&comp); | |||
| wasResized = (lastBounds.getWidth() != component->getWidth() || lastBounds.getHeight() != component->getHeight()); | |||
| lastBounds.setSize (component->getWidth(), component->getHeight()); | |||
| if (component == &comp) | |||
| unregister(); | |||
| } | |||
| if (wasMoved || wasResized) | |||
| componentMovedOrResized (wasMoved, wasResized); | |||
| void ComponentMovementWatcher::componentVisibilityChanged (Component&) | |||
| { | |||
| if (component != 0) | |||
| { | |||
| const bool isShowingNow = component->isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| componentVisibilityChanged(); | |||
| } | |||
| } | |||
| } | |||
| void ComponentMovementWatcher::registerWithParentComps() | |||
| @@ -62,20 +62,27 @@ public: | |||
| /** This callback happens when the component's top-level peer is changed. */ | |||
| virtual void componentPeerChanged() = 0; | |||
| /** This callback happens when the component's visibility state changes, possibly due to | |||
| one of its parents being made visible or invisible. | |||
| */ | |||
| virtual void componentVisibilityChanged() = 0; | |||
| //============================================================================== | |||
| /** @internal */ | |||
| void componentParentHierarchyChanged (Component& component); | |||
| /** @internal */ | |||
| void componentMovedOrResized (Component& component, bool wasMoved, bool wasResized); | |||
| /** @internal */ | |||
| void componentBeingDeleted (Component& component); | |||
| /** @internal */ | |||
| void componentVisibilityChanged (Component& component); | |||
| private: | |||
| //============================================================================== | |||
| WeakReference<Component> component; | |||
| ComponentPeer* lastPeer; | |||
| Array <Component*> registeredParentComps; | |||
| bool reentrant; | |||
| bool reentrant, wasShowing; | |||
| Rectangle<int> lastBounds; | |||
| void unregister(); | |||
| @@ -222,7 +222,7 @@ void Viewport::updateVisibleArea() | |||
| horizontalScrollBar.setSingleStepSize (singleStepX); | |||
| horizontalScrollBar.cancelPendingUpdate(); | |||
| } | |||
| else | |||
| else if (canShowHBar) | |||
| { | |||
| visibleOrigin.setX (0); | |||
| } | |||
| @@ -235,7 +235,7 @@ void Viewport::updateVisibleArea() | |||
| verticalScrollBar.setSingleStepSize (singleStepY); | |||
| verticalScrollBar.cancelPendingUpdate(); | |||
| } | |||
| else | |||
| else if (canShowVBar) | |||
| { | |||
| visibleOrigin.setY (0); | |||
| } | |||
| @@ -138,8 +138,7 @@ public: | |||
| //============================================================================== | |||
| OpenGLComponentWatcher (OpenGLComponent* const owner_) | |||
| : ComponentMovementWatcher (owner_), | |||
| owner (owner_), | |||
| wasShowing (false) | |||
| owner (owner_) | |||
| { | |||
| } | |||
| @@ -155,26 +154,18 @@ public: | |||
| owner->deleteContext(); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| const bool isShowingNow = owner->isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| if (! owner->isShowing()) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| if (! isShowingNow) | |||
| { | |||
| const ScopedLock sl (owner->getContextLock()); | |||
| owner->deleteContext(); | |||
| } | |||
| const ScopedLock sl (owner->getContextLock()); | |||
| owner->deleteContext(); | |||
| } | |||
| } | |||
| //============================================================================== | |||
| private: | |||
| OpenGLComponent* const owner; | |||
| bool wasShowing; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLComponentWatcher); | |||
| }; | |||
| @@ -187,6 +187,16 @@ void TopLevelWindow::activeWindowStatusChanged() | |||
| { | |||
| } | |||
| void TopLevelWindow::visibilityChanged() | |||
| { | |||
| if (isShowing() | |||
| && (getPeer()->getStyleFlags() & (ComponentPeer::windowIsTemporary | |||
| | ComponentPeer::windowIgnoresKeyPresses)) == 0) | |||
| { | |||
| toFront (true); | |||
| } | |||
| } | |||
| void TopLevelWindow::parentHierarchyChanged() | |||
| { | |||
| setDropShadowEnabled (useDropShadow); | |||
| @@ -151,6 +151,8 @@ protected: | |||
| virtual int getDesktopWindowStyleFlags() const; | |||
| /** @internal */ | |||
| void recreateDesktopWindow(); | |||
| /** @internal */ | |||
| void visibilityChanged(); | |||
| private: | |||
| friend class TopLevelWindowManager; | |||
| @@ -204,7 +204,7 @@ public: | |||
| createWindow(); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| if (isShowing()) | |||
| createWindow(); | |||
| @@ -30,24 +30,17 @@ | |||
| //============================================================================== | |||
| class NSViewComponentInternal : public ComponentMovementWatcher | |||
| { | |||
| Component* const owner; | |||
| NSViewComponentPeer* currentPeer; | |||
| bool wasShowing; | |||
| public: | |||
| NSView* const view; | |||
| //============================================================================== | |||
| NSViewComponentInternal (NSView* const view_, Component* const owner_) | |||
| : ComponentMovementWatcher (owner_), | |||
| NSViewComponentInternal (NSView* const view_, Component& owner_) | |||
| : ComponentMovementWatcher (&owner_), | |||
| owner (owner_), | |||
| currentPeer (0), | |||
| wasShowing (false), | |||
| view (view_) | |||
| { | |||
| [view_ retain]; | |||
| if (owner_->isShowing()) | |||
| if (owner.isShowing()) | |||
| componentPeerChanged(); | |||
| } | |||
| @@ -72,13 +65,13 @@ public: | |||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||
| { | |||
| Component* const topComp = owner->getTopLevelComponent(); | |||
| Component* const topComp = owner.getTopLevelComponent(); | |||
| if (topComp->getPeer() != 0) | |||
| { | |||
| const Point<int> pos (topComp->getLocalPoint (owner, Point<int>())); | |||
| const Point<int> pos (topComp->getLocalPoint (&owner, Point<int>())); | |||
| NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner->getWidth(), (float) owner->getHeight()); | |||
| NSRect r = NSMakeRect ((float) pos.getX(), (float) pos.getY(), (float) owner.getWidth(), (float) owner.getHeight()); | |||
| r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height); | |||
| [view setFrame: r]; | |||
| @@ -87,7 +80,7 @@ public: | |||
| void componentPeerChanged() | |||
| { | |||
| NSViewComponentPeer* const peer = dynamic_cast <NSViewComponentPeer*> (owner->getPeer()); | |||
| NSViewComponentPeer* const peer = dynamic_cast <NSViewComponentPeer*> (owner.getPeer()); | |||
| if (currentPeer != peer) | |||
| { | |||
| @@ -104,10 +97,10 @@ public: | |||
| } | |||
| } | |||
| [view setHidden: ! owner->isShowing()]; | |||
| [view setHidden: ! owner.isShowing()]; | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| componentPeerChanged(); | |||
| } | |||
| @@ -118,6 +111,13 @@ public: | |||
| return Rectangle<int> (0, 0, (int) r.size.width, (int) r.size.height); | |||
| } | |||
| private: | |||
| Component& owner; | |||
| NSViewComponentPeer* currentPeer; | |||
| public: | |||
| NSView* const view; | |||
| private: | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentInternal); | |||
| }; | |||
| @@ -136,7 +136,7 @@ void NSViewComponent::setView (void* view) | |||
| if (view != getView()) | |||
| { | |||
| if (view != 0) | |||
| info = new NSViewComponentInternal ((NSView*) view, this); | |||
| info = new NSViewComponentInternal ((NSView*) view, *this); | |||
| else | |||
| info = 0; | |||
| } | |||
| @@ -119,14 +119,12 @@ BEGIN_JUCE_NAMESPACE | |||
| class WindowedGLContext : public OpenGLContext | |||
| { | |||
| public: | |||
| WindowedGLContext (Component* const component, | |||
| WindowedGLContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat_, | |||
| NSOpenGLContext* sharedContext) | |||
| : renderContext (0), | |||
| pixelFormat (pixelFormat_) | |||
| { | |||
| jassert (component != 0); | |||
| NSOpenGLPixelFormatAttribute attribs [64]; | |||
| int n = 0; | |||
| attribs[n++] = NSOpenGLPFADoubleBuffer; | |||
| @@ -268,7 +266,7 @@ private: | |||
| //============================================================================== | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (this, preferredPixelFormat, | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (*this, preferredPixelFormat, | |||
| contextToShareListsWith != 0 ? (NSOpenGLContext*) contextToShareListsWith->getRawContext() : 0)); | |||
| return (c->renderContext != 0) ? c.release() : 0; | |||
| @@ -208,20 +208,11 @@ namespace ActiveXHelpers | |||
| //============================================================================== | |||
| class ActiveXControlComponent::Pimpl : public ComponentMovementWatcher | |||
| { | |||
| ActiveXControlComponent& owner; | |||
| bool wasShowing; | |||
| public: | |||
| HWND controlHWND; | |||
| IStorage* storage; | |||
| IOleClientSite* clientSite; | |||
| IOleObject* control; | |||
| //============================================================================== | |||
| Pimpl (HWND hwnd, ActiveXControlComponent& owner_) | |||
| : ComponentMovementWatcher (&owner_), | |||
| owner (owner_), | |||
| wasShowing (owner_.isShowing()), | |||
| controlHWND (0), | |||
| storage (new ActiveXHelpers::JuceIStorage()), | |||
| clientSite (new ActiveXHelpers::JuceIOleClientSite (hwnd)), | |||
| @@ -255,19 +246,12 @@ public: | |||
| void componentPeerChanged() | |||
| { | |||
| const bool isShowingNow = owner.isShowing(); | |||
| if (wasShowing != isShowingNow) | |||
| { | |||
| wasShowing = isShowingNow; | |||
| owner.setControlVisible (isShowingNow); | |||
| } | |||
| componentMovedOrResized (true, true); | |||
| } | |||
| void componentVisibilityChanged (Component&) | |||
| void componentVisibilityChanged() | |||
| { | |||
| owner.setControlVisible (owner.isShowing()); | |||
| componentPeerChanged(); | |||
| } | |||
| @@ -316,6 +300,15 @@ public: | |||
| return DefWindowProc (hwnd, message, wParam, lParam); | |||
| } | |||
| private: | |||
| ActiveXControlComponent& owner; | |||
| public: | |||
| HWND controlHWND; | |||
| IStorage* storage; | |||
| IOleClientSite* clientSite; | |||
| IOleObject* control; | |||
| }; | |||
| ActiveXControlComponent::ActiveXControlComponent() | |||
| @@ -66,7 +66,7 @@ public: | |||
| WebBrowserComponent* const owner = dynamic_cast <WebBrowserComponent*> (getParentComponent()); | |||
| jassert (owner != 0); | |||
| EventHandler* handler = new EventHandler (owner); | |||
| EventHandler* handler = new EventHandler (*owner); | |||
| connectionPoint->Advise (handler, &adviseCookie); | |||
| handler->Release(); | |||
| } | |||
| @@ -144,8 +144,8 @@ private: | |||
| public ComponentMovementWatcher | |||
| { | |||
| public: | |||
| EventHandler (WebBrowserComponent* const owner_) | |||
| : ComponentMovementWatcher (owner_), | |||
| EventHandler (WebBrowserComponent& owner_) | |||
| : ComponentMovementWatcher (&owner_), | |||
| owner (owner_) | |||
| { | |||
| } | |||
| @@ -158,44 +158,33 @@ private: | |||
| HRESULT __stdcall Invoke (DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/, WORD /*wFlags*/, DISPPARAMS* pDispParams, | |||
| VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/) | |||
| { | |||
| switch (dispIdMember) | |||
| if (dispIdMember == DISPID_BEFORENAVIGATE2) | |||
| { | |||
| case DISPID_BEFORENAVIGATE2: | |||
| { | |||
| VARIANT* const vurl = pDispParams->rgvarg[5].pvarVal; | |||
| String url; | |||
| VARIANT* const vurl = pDispParams->rgvarg[5].pvarVal; | |||
| String url; | |||
| if ((vurl->vt & VT_BYREF) != 0) | |||
| url = *vurl->pbstrVal; | |||
| else | |||
| url = vurl->bstrVal; | |||
| if ((vurl->vt & VT_BYREF) != 0) | |||
| url = *vurl->pbstrVal; | |||
| else | |||
| url = vurl->bstrVal; | |||
| *pDispParams->rgvarg->pboolVal | |||
| = owner->pageAboutToLoad (url) ? VARIANT_FALSE | |||
| : VARIANT_TRUE; | |||
| return S_OK; | |||
| } | |||
| *pDispParams->rgvarg->pboolVal | |||
| = owner.pageAboutToLoad (url) ? VARIANT_FALSE | |||
| : VARIANT_TRUE; | |||
| default: | |||
| break; | |||
| return S_OK; | |||
| } | |||
| return E_NOTIMPL; | |||
| } | |||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) {} | |||
| void componentPeerChanged() {} | |||
| void componentVisibilityChanged (Component&) | |||
| { | |||
| owner->visibilityChanged(); | |||
| } | |||
| void componentMovedOrResized (bool, bool ) {} | |||
| void componentPeerChanged() {} | |||
| void componentVisibilityChanged() { owner.visibilityChanged(); } | |||
| //============================================================================== | |||
| private: | |||
| WebBrowserComponent* const owner; | |||
| WebBrowserComponent& owner; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EventHandler); | |||
| }; | |||