The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.8KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library - "Jules' Utility Class Extensions"
  4. Copyright 2004-7 by Raw Material Software ltd.
  5. ------------------------------------------------------------------------------
  6. JUCE can be redistributed and/or modified under the terms of the
  7. GNU General Public License, as published by the Free Software Foundation;
  8. either version 2 of the License, or (at your option) any later version.
  9. JUCE is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with JUCE; if not, visit www.gnu.org/licenses or write to the
  15. Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  16. Boston, MA 02111-1307 USA
  17. ------------------------------------------------------------------------------
  18. If you'd like to release a closed-source product which uses JUCE, commercial
  19. licenses are also available: visit www.rawmaterialsoftware.com/juce for
  20. more information.
  21. ==============================================================================
  22. */
  23. //==============================================================================
  24. #include <Cocoa/Cocoa.h>
  25. #include "../../../../../juce.h"
  26. BEGIN_JUCE_NAMESPACE
  27. void* attachComponentToWindowRef (Component* comp, void* windowRef)
  28. {
  29. const ScopedAutoReleasePool pool;
  30. NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef];
  31. [hostWindow retain];
  32. [hostWindow setCanHide: YES];
  33. [hostWindow setReleasedWhenClosed: YES];
  34. NSView* content = [hostWindow contentView];
  35. NSRect f = [content frame];
  36. NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
  37. windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
  38. comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
  39. #if ! JucePlugin_EditorRequiresKeyboardFocus
  40. comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
  41. #else
  42. comp->addToDesktop (ComponentPeer::windowIsTemporary);
  43. #endif
  44. comp->setVisible (true);
  45. comp->toFront (false);
  46. NSView* pluginView = (NSView*) comp->getWindowHandle();
  47. NSWindow* pluginWindow = [pluginView window];
  48. [pluginWindow setExcludedFromWindowsMenu: YES];
  49. [hostWindow addChildWindow: pluginWindow
  50. ordered: NSWindowAbove];
  51. [hostWindow orderFront: nil];
  52. [pluginWindow orderFront: nil];
  53. return hostWindow;
  54. }
  55. void detachComponentFromWindowRef (Component* comp, void* nsWindow)
  56. {
  57. NSWindow* hostWindow = (NSWindow*) nsWindow;
  58. if (hostWindow != 0)
  59. {
  60. const ScopedAutoReleasePool pool;
  61. NSView* pluginView = (NSView*) comp->getWindowHandle();
  62. NSWindow* pluginWindow = [pluginView window];
  63. [hostWindow removeChildWindow: pluginWindow];
  64. comp->removeFromDesktop();
  65. [hostWindow release];
  66. }
  67. }
  68. void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight)
  69. {
  70. NSWindow* hostWindow = (NSWindow*) nsWindow;
  71. if (hostWindow != 0)
  72. {
  73. ScopedAutoReleasePool pool;
  74. NSRect f = [hostWindow frame];
  75. f.size.width += newWidth - component->getWidth();
  76. f.size.height += newHeight - component->getHeight();
  77. [hostWindow setFrame: f display: YES];
  78. }
  79. }
  80. void checkWindowVisibility (void* nsWindow, Component* comp)
  81. {
  82. NSWindow* hostWindow = (NSWindow*) nsWindow;
  83. comp->setVisible ([hostWindow isVisible]);
  84. }
  85. END_JUCE_NAMESPACE