diff --git a/Modules/juce_gui_basics/juce_gui_basics.cpp b/Modules/juce_gui_basics/juce_gui_basics.cpp new file mode 100644 index 0000000..17be3ae --- /dev/null +++ b/Modules/juce_gui_basics/juce_gui_basics.cpp @@ -0,0 +1,428 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2022 - Raw Material Software Limited + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 7 End-User License + Agreement and JUCE Privacy Policy. + + End User License Agreement: www.juce.com/juce-7-licence + Privacy Policy: www.juce.com/juce-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +#ifdef JUCE_GUI_BASICS_H_INCLUDED + /* When you add this cpp file to your project, you mustn't include it in a file where you've + already included any other headers - just put it inside a file on its own, possibly with your config + flags preceding it, but don't include anything else. That also includes avoiding any automatic prefix + header files that the compiler may be using. + */ + #error "Incorrect use of JUCE cpp file" +#endif + +#define NS_FORMAT_FUNCTION(F,A) // To avoid spurious warnings from GCC + +#define JUCE_CORE_INCLUDE_OBJC_HELPERS 1 +#define JUCE_CORE_INCLUDE_COM_SMART_PTR 1 +#define JUCE_CORE_INCLUDE_JNI_HELPERS 1 +#define JUCE_CORE_INCLUDE_NATIVE_HEADERS 1 +#define JUCE_EVENTS_INCLUDE_WIN32_MESSAGE_WINDOW 1 +#define JUCE_GRAPHICS_INCLUDE_COREGRAPHICS_HELPERS 1 +#define JUCE_GUI_BASICS_INCLUDE_XHEADERS 1 +#define JUCE_GUI_BASICS_INCLUDE_SCOPED_THREAD_DPI_AWARENESS_SETTER 1 + +#include "juce_gui_basics.h" + +#include + +//============================================================================== +#if JUCE_MAC + #import + #import + #import + +#elif JUCE_IOS + #if JUCE_PUSH_NOTIFICATIONS + #import + #endif + + #import + #import + +//============================================================================== +#elif JUCE_WINDOWS + #include + #include + #include + #include + #include + #include + #include + + #if JUCE_WEB_BROWSER + #include + #include + #endif + + #if JUCE_MINGW + #include + #elif ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES + #pragma comment(lib, "vfw32.lib") + #pragma comment(lib, "imm32.lib") + #pragma comment(lib, "comctl32.lib") + #pragma comment(lib, "dxgi.lib") + + #if JUCE_OPENGL + #pragma comment(lib, "OpenGL32.Lib") + #pragma comment(lib, "GlU32.Lib") + #endif + + #if JUCE_DIRECT2D + #pragma comment (lib, "Dwrite.lib") + #pragma comment (lib, "D2d1.lib") + #endif + #endif +#endif + +//============================================================================== +#define JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED_OR_OFFSCREEN \ + jassert ((MessageManager::getInstanceWithoutCreating() != nullptr \ + && MessageManager::getInstanceWithoutCreating()->currentThreadHasLockedMessageManager()) \ + || getPeer() == nullptr); + +namespace juce +{ + bool juce_areThereAnyAlwaysOnTopWindows(); + + bool isEmbeddedInForegroundProcess (Component* c); + + #if ! JUCE_WINDOWS + bool isEmbeddedInForegroundProcess (Component*) { return false; } + #endif + + /* Returns true if this process is in the foreground, or if the viewComponent + is embedded into a window owned by the foreground process. + */ + static bool isForegroundOrEmbeddedProcess (Component* viewComponent) + { + return Process::isForegroundProcess() || isEmbeddedInForegroundProcess (viewComponent); + } + + bool isWindowOnCurrentVirtualDesktop (void*); + + struct CustomMouseCursorInfo + { + ScaledImage image; + Point hotspot; + }; + + template + static const AccessibilityHandler* getEnclosingHandlerWithInterface (const AccessibilityHandler* handler, MemberFn fn) + { + if (handler == nullptr) + return nullptr; + + if ((handler->*fn)() != nullptr) + return handler; + + return getEnclosingHandlerWithInterface (handler->getParent(), fn); + } +} // namespace juce + +#include "mouse/juce_PointerState.h" + +#include "accessibility/juce_AccessibilityHandler.cpp" +#include "components/juce_Component.cpp" +#include "components/juce_ComponentListener.cpp" +#include "components/juce_FocusTraverser.cpp" +#include "mouse/juce_MouseInputSource.cpp" +#include "desktop/juce_Displays.cpp" +#include "desktop/juce_Desktop.cpp" +#include "components/juce_ModalComponentManager.cpp" +#include "mouse/juce_ComponentDragger.cpp" +#include "mouse/juce_DragAndDropContainer.cpp" +#include "mouse/juce_MouseEvent.cpp" +#include "mouse/juce_MouseInactivityDetector.cpp" +#include "mouse/juce_MouseListener.cpp" +#include "keyboard/juce_CaretComponent.cpp" +#include "keyboard/juce_KeyboardFocusTraverser.cpp" +#include "keyboard/juce_KeyListener.cpp" +#include "keyboard/juce_KeyPress.cpp" +#include "keyboard/juce_ModifierKeys.cpp" +#include "buttons/juce_ArrowButton.cpp" +#include "buttons/juce_Button.cpp" +#include "buttons/juce_DrawableButton.cpp" +#include "buttons/juce_HyperlinkButton.cpp" +#include "buttons/juce_ImageButton.cpp" +#include "buttons/juce_ShapeButton.cpp" +#include "buttons/juce_TextButton.cpp" +#include "buttons/juce_ToggleButton.cpp" +#include "buttons/juce_ToolbarButton.cpp" +#include "drawables/juce_Drawable.cpp" +#include "drawables/juce_DrawableComposite.cpp" +#include "drawables/juce_DrawableImage.cpp" +#include "drawables/juce_DrawablePath.cpp" +#include "drawables/juce_DrawableRectangle.cpp" +#include "drawables/juce_DrawableShape.cpp" +#include "drawables/juce_DrawableText.cpp" +#include "drawables/juce_SVGParser.cpp" +#include "filebrowser/juce_DirectoryContentsDisplayComponent.cpp" +#include "filebrowser/juce_DirectoryContentsList.cpp" +#include "filebrowser/juce_FileBrowserComponent.cpp" +#include "filebrowser/juce_FileChooser.cpp" +#include "filebrowser/juce_FileChooserDialogBox.cpp" +#include "filebrowser/juce_FileListComponent.cpp" +#include "filebrowser/juce_FilenameComponent.cpp" +#include "filebrowser/juce_FileSearchPathListComponent.cpp" +#include "filebrowser/juce_FileTreeComponent.cpp" +#include "filebrowser/juce_ImagePreviewComponent.cpp" +#include "filebrowser/juce_ContentSharer.cpp" +#include "layout/juce_ComponentAnimator.cpp" +#include "layout/juce_ComponentBoundsConstrainer.cpp" +#include "layout/juce_ComponentBuilder.cpp" +#include "layout/juce_ComponentMovementWatcher.cpp" +#include "layout/juce_ConcertinaPanel.cpp" +#include "layout/juce_GroupComponent.cpp" +#include "layout/juce_MultiDocumentPanel.cpp" +#include "layout/juce_ResizableBorderComponent.cpp" +#include "layout/juce_ResizableCornerComponent.cpp" +#include "layout/juce_ResizableEdgeComponent.cpp" +#include "layout/juce_ScrollBar.cpp" +#include "layout/juce_SidePanel.cpp" +#include "layout/juce_StretchableLayoutManager.cpp" +#include "layout/juce_StretchableLayoutResizerBar.cpp" +#include "layout/juce_StretchableObjectResizer.cpp" +#include "layout/juce_TabbedButtonBar.cpp" +#include "layout/juce_TabbedComponent.cpp" +#include "layout/juce_Viewport.cpp" +#include "lookandfeel/juce_LookAndFeel.cpp" +#include "lookandfeel/juce_LookAndFeel_V2.cpp" +#include "lookandfeel/juce_LookAndFeel_V1.cpp" +#include "lookandfeel/juce_LookAndFeel_V3.cpp" +#include "lookandfeel/juce_LookAndFeel_V4.cpp" +#include "menus/juce_MenuBarComponent.cpp" +#include "menus/juce_BurgerMenuComponent.cpp" +#include "menus/juce_MenuBarModel.cpp" +#include "menus/juce_PopupMenu.cpp" +#include "positioning/juce_MarkerList.cpp" +#include "positioning/juce_RelativeCoordinate.cpp" +#include "positioning/juce_RelativeCoordinatePositioner.cpp" +#include "positioning/juce_RelativeParallelogram.cpp" +#include "positioning/juce_RelativePoint.cpp" +#include "positioning/juce_RelativePointPath.cpp" +#include "positioning/juce_RelativeRectangle.cpp" +#include "properties/juce_BooleanPropertyComponent.cpp" +#include "properties/juce_ButtonPropertyComponent.cpp" +#include "properties/juce_ChoicePropertyComponent.cpp" +#include "properties/juce_PropertyComponent.cpp" +#include "properties/juce_PropertyPanel.cpp" +#include "properties/juce_SliderPropertyComponent.cpp" +#include "properties/juce_TextPropertyComponent.cpp" +#include "properties/juce_MultiChoicePropertyComponent.cpp" +#include "widgets/juce_ComboBox.cpp" +#include "widgets/juce_ImageComponent.cpp" +#include "widgets/juce_Label.cpp" +#include "widgets/juce_ListBox.cpp" +#include "widgets/juce_ProgressBar.cpp" +#include "widgets/juce_Slider.cpp" +#include "widgets/juce_TableHeaderComponent.cpp" +#include "widgets/juce_TableListBox.cpp" +#include "widgets/juce_TextEditor.cpp" +#include "widgets/juce_ToolbarItemComponent.cpp" +#include "widgets/juce_Toolbar.cpp" +#include "widgets/juce_ToolbarItemPalette.cpp" +#include "widgets/juce_TreeView.cpp" +#include "windows/juce_AlertWindow.cpp" +#include "windows/juce_CallOutBox.cpp" +#include "windows/juce_ComponentPeer.cpp" +#include "windows/juce_DialogWindow.cpp" +#include "windows/juce_DocumentWindow.cpp" +#include "windows/juce_ResizableWindow.cpp" +#include "windows/juce_ThreadWithProgressWindow.cpp" +#include "windows/juce_TooltipWindow.cpp" +#include "windows/juce_TopLevelWindow.cpp" +#include "commands/juce_ApplicationCommandInfo.cpp" +#include "commands/juce_ApplicationCommandManager.cpp" +#include "commands/juce_ApplicationCommandTarget.cpp" +#include "commands/juce_KeyPressMappingSet.cpp" +#include "application/juce_Application.cpp" +#include "misc/juce_BubbleComponent.cpp" +#include "misc/juce_DropShadower.cpp" +#include "misc/juce_FocusOutline.cpp" +#include "misc/juce_JUCESplashScreen.cpp" + +#include "layout/juce_FlexBox.cpp" +#include "layout/juce_GridItem.cpp" +#include "layout/juce_Grid.cpp" + +#if JUCE_IOS || JUCE_WINDOWS + #include "native/juce_MultiTouchMapper.h" +#endif + +#if JUCE_ANDROID || JUCE_WINDOWS || JUCE_IOS || JUCE_UNIT_TESTS + #include "native/accessibility/juce_AccessibilityTextHelpers.h" +#endif + +#if JUCE_MAC || JUCE_IOS + #include "native/accessibility/juce_mac_AccessibilitySharedCode.mm" + + #if JUCE_IOS + #include "native/juce_ios_UIViewComponentPeer.mm" + #include "native/accessibility/juce_ios_Accessibility.mm" + #include "native/juce_ios_Windowing.mm" + #include "native/juce_ios_FileChooser.mm" + + #if JUCE_CONTENT_SHARING + #include "native/juce_ios_ContentSharer.cpp" + #endif + + #else + #include "native/accessibility/juce_mac_Accessibility.mm" + #include "native/juce_mac_NSViewComponentPeer.mm" + #include "native/juce_mac_Windowing.mm" + #include "native/juce_mac_MainMenu.mm" + #include "native/juce_mac_FileChooser.mm" + #include "native/mac_Pasteboard.mm" + #endif + + #include "native/juce_mac_MouseCursor.mm" + +#elif JUCE_WINDOWS + #include "native/accessibility/juce_win32_ComInterfaces.h" + #include "native/accessibility/juce_win32_WindowsUIAWrapper.h" + #include "native/accessibility/juce_win32_AccessibilityElement.h" + #include "native/accessibility/juce_win32_UIAHelpers.h" + #include "native/accessibility/juce_win32_UIAProviders.h" + #include "native/accessibility/juce_win32_AccessibilityElement.cpp" + #include "native/accessibility/juce_win32_Accessibility.cpp" + #include "native/juce_win32_Windowing.cpp" + #include "native/juce_win32_DragAndDrop.cpp" + #include "native/juce_win32_FileChooser.cpp" + +#elif JUCE_LINUX || JUCE_BSD + #include "native/x11/juce_linux_X11_Symbols.cpp" + #include "native/x11/juce_linux_X11_DragAndDrop.cpp" + + JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant") + + #include "native/juce_linux_Windowing.cpp" + #include "native/x11/juce_linux_XWindowSystem.cpp" + + JUCE_END_IGNORE_WARNINGS_GCC_LIKE + + #include "native/juce_linux_FileChooser.cpp" + +#elif JUCE_ANDROID + #include "juce_core/files/juce_common_MimeTypes.h" + #include "native/accessibility/juce_android_Accessibility.cpp" + #include "native/juce_android_Windowing.cpp" + #include "native/juce_android_FileChooser.cpp" + + #if JUCE_CONTENT_SHARING + #include "native/juce_android_ContentSharer.cpp" + #endif + +#endif + +namespace juce +{ + #if ! JUCE_NATIVE_ACCESSIBILITY_INCLUDED + class AccessibilityHandler::AccessibilityNativeImpl { public: AccessibilityNativeImpl (AccessibilityHandler&) {} }; + void AccessibilityHandler::notifyAccessibilityEvent (AccessibilityEvent) const {} + void AccessibilityHandler::postAnnouncement (const String&, AnnouncementPriority) {} + AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const { return nullptr; } + void notifyAccessibilityEventInternal (const AccessibilityHandler&, InternalAccessibilityEvent) {} + std::unique_ptr AccessibilityHandler::createNativeImpl (AccessibilityHandler&) + { + return nullptr; + } + #else + std::unique_ptr AccessibilityHandler::createNativeImpl (AccessibilityHandler& handler) + { + return std::make_unique (handler); + } + #endif +} + +//============================================================================== +#if JUCE_WINDOWS +namespace juce +{ + +JUCE_COMCLASS (JuceIVirtualDesktopManager, "a5cd92ff-29be-454c-8d04-d82879fb3f1b") : public IUnknown +{ +public: + virtual HRESULT STDMETHODCALLTYPE IsWindowOnCurrentVirtualDesktop( + __RPC__in HWND topLevelWindow, + __RPC__out BOOL * onCurrentDesktop) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetWindowDesktopId( + __RPC__in HWND topLevelWindow, + __RPC__out GUID * desktopId) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveWindowToDesktop( + __RPC__in HWND topLevelWindow, + __RPC__in REFGUID desktopId) = 0; +}; + +JUCE_COMCLASS (JuceVirtualDesktopManager, "aa509086-5ca9-4c25-8f95-589d3c07b48a"); + +} // namespace juce + +#ifdef __CRT_UUID_DECL +__CRT_UUID_DECL (juce::JuceIVirtualDesktopManager, 0xa5cd92ff, 0x29be, 0x454c, 0x8d, 0x04, 0xd8, 0x28, 0x79, 0xfb, 0x3f, 0x1b) +__CRT_UUID_DECL (juce::JuceVirtualDesktopManager, 0xaa509086, 0x5ca9, 0x4c25, 0x8f, 0x95, 0x58, 0x9d, 0x3c, 0x07, 0xb4, 0x8a) +#endif + +bool juce::isWindowOnCurrentVirtualDesktop (void* x) +{ + if (x == nullptr) + return false; + + static auto* desktopManager = [] + { + JuceIVirtualDesktopManager* result = nullptr; + + JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token") + + if (SUCCEEDED (CoCreateInstance (__uuidof (JuceVirtualDesktopManager), nullptr, CLSCTX_ALL, IID_PPV_ARGS (&result)))) + return result; + + JUCE_END_IGNORE_WARNINGS_GCC_LIKE + + return static_cast (nullptr); + }(); + + BOOL current = false; + + if (auto* dm = desktopManager) + if (SUCCEEDED (dm->IsWindowOnCurrentVirtualDesktop (static_cast (x), ¤t))) + return current != false; + + return true; +} + +#else + bool juce::isWindowOnCurrentVirtualDesktop (void*) { return true; } + juce::ScopedDPIAwarenessDisabler::ScopedDPIAwarenessDisabler() { ignoreUnused (previousContext); } + juce::ScopedDPIAwarenessDisabler::~ScopedDPIAwarenessDisabler() {} +#endif + +// Depends on types defined in platform-specific windowing files +#include "mouse/juce_MouseCursor.cpp" + +#if JUCE_UNIT_TESTS +#include "native/accessibility/juce_AccessibilityTextHelpers_test.cpp" +#endif diff --git a/Modules/juce_gui_basics/juce_gui_basics.h b/Modules/juce_gui_basics/juce_gui_basics.h new file mode 100644 index 0000000..28c3406 --- /dev/null +++ b/Modules/juce_gui_basics/juce_gui_basics.h @@ -0,0 +1,383 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2022 - Raw Material Software Limited + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 7 End-User License + Agreement and JUCE Privacy Policy. + + End User License Agreement: www.juce.com/juce-7-licence + Privacy Policy: www.juce.com/juce-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + + +/******************************************************************************* + The block below describes the properties of this module, and is read by + the Projucer to automatically generate project code that uses it. + For details about the syntax and how to create or use a module, see the + JUCE Module Format.md file. + + + BEGIN_JUCE_MODULE_DECLARATION + + ID: juce_gui_basics + vendor: juce + version: 7.0.2 + name: JUCE GUI core classes + description: Basic user-interface components and related classes. + website: http://www.juce.com/juce + license: GPL/Commercial + minimumCppStandard: 14 + + dependencies: juce_graphics juce_data_structures + OSXFrameworks: Cocoa QuartzCore + WeakOSXFrameworks: Metal MetalKit + iOSFrameworks: CoreServices UIKit + WeakiOSFrameworks: Metal MetalKit + mingwLibs: dxgi + + END_JUCE_MODULE_DECLARATION + +*******************************************************************************/ + + +#pragma once +#define JUCE_GUI_BASICS_H_INCLUDED + +#include +#include + +//============================================================================== +/** Config: JUCE_ENABLE_REPAINT_DEBUGGING + If this option is turned on, each area of the screen that gets repainted will + flash in a random colour, so that you can see exactly which bits of your + components are being drawn. +*/ +#ifndef JUCE_ENABLE_REPAINT_DEBUGGING + #define JUCE_ENABLE_REPAINT_DEBUGGING 0 +#endif + +/** Config: JUCE_USE_XRANDR + Enables Xrandr multi-monitor support (Linux only). + Unless you specifically want to disable this, it's best to leave this option turned on. + Note that your users do not need to have Xrandr installed for your JUCE app to run, as + the availability of Xrandr is queried during runtime. +*/ +#ifndef JUCE_USE_XRANDR + #define JUCE_USE_XRANDR 1 +#endif + +/** Config: JUCE_USE_XINERAMA + Enables Xinerama multi-monitor support (Linux only). + Unless you specifically want to disable this, it's best to leave this option turned on. + This will be used as a fallback if JUCE_USE_XRANDR not set or libxrandr cannot be found. + Note that your users do not need to have Xinerama installed for your JUCE app to run, as + the availability of Xinerama is queried during runtime. +*/ +#ifndef JUCE_USE_XINERAMA + #define JUCE_USE_XINERAMA 1 +#endif + +/** Config: JUCE_USE_XSHM + Enables X shared memory for faster rendering on Linux. This is best left turned on + unless you have a good reason to disable it. +*/ +#ifndef JUCE_USE_XSHM + #define JUCE_USE_XSHM 1 +#endif + +/** Config: JUCE_USE_XRENDER + Enables XRender to allow semi-transparent windowing on Linux. +*/ +#ifndef JUCE_USE_XRENDER + #define JUCE_USE_XRENDER 0 +#endif + +/** Config: JUCE_USE_XCURSOR + Uses XCursor to allow ARGB cursor on Linux. This is best left turned on unless you have + a good reason to disable it. +*/ +#ifndef JUCE_USE_XCURSOR + #define JUCE_USE_XCURSOR 1 +#endif + +/** Config: JUCE_WIN_PER_MONITOR_DPI_AWARE + Enables per-monitor DPI awareness on Windows 8.1 and above. +*/ +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + #define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + +//============================================================================== +namespace juce +{ + class Component; + class LookAndFeel; + class MouseInputSource; + class MouseInputSourceInternal; + class ComponentPeer; + class MouseEvent; + struct MouseWheelDetails; + struct PenDetails; + class ToggleButton; + class TextButton; + class AlertWindow; + class TextLayout; + class ScrollBar; + class ComboBox; + class Button; + class FilenameComponent; + class ResizableWindow; + class MenuBarComponent; + class GlyphArrangement; + class TableHeaderComponent; + class Toolbar; + class PopupMenu; + class ProgressBar; + class FileBrowserComponent; + class DirectoryContentsDisplayComponent; + class FilePreviewComponent; + class CallOutBox; + class Drawable; + class DrawablePath; + class DrawableComposite; + class CaretComponent; + class KeyPressMappingSet; + class ApplicationCommandManagerListener; + class DrawableButton; + class Displays; + class AccessibilityHandler; + class KeyboardFocusTraverser; + class PointerState; + + class FlexBox; + class Grid; + class FocusOutline; + + #if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX + Image createSnapshotOfNativeWindow (void* nativeWindowHandle); + #endif +} + +#include "mouse/juce_MouseCursor.h" +#include "mouse/juce_MouseListener.h" +#include "keyboard/juce_ModifierKeys.h" +#include "mouse/juce_MouseInputSource.h" +#include "mouse/juce_MouseEvent.h" +#include "keyboard/juce_KeyPress.h" +#include "keyboard/juce_KeyListener.h" +#include "components/juce_ComponentTraverser.h" +#include "components/juce_FocusTraverser.h" +#include "components/juce_ModalComponentManager.h" +#include "components/juce_ComponentListener.h" +#include "components/juce_CachedComponentImage.h" +#include "components/juce_Component.h" +#include "layout/juce_ComponentAnimator.h" +#include "desktop/juce_Desktop.h" +#include "desktop/juce_Displays.h" +#include "layout/juce_ComponentBoundsConstrainer.h" +#include "mouse/juce_ComponentDragger.h" +#include "mouse/juce_DragAndDropTarget.h" +#include "mouse/juce_DragAndDropContainer.h" +#include "mouse/juce_FileDragAndDropTarget.h" +#include "mouse/juce_SelectedItemSet.h" +#include "mouse/juce_MouseInactivityDetector.h" +#include "mouse/juce_TextDragAndDropTarget.h" +#include "mouse/juce_TooltipClient.h" +#include "keyboard/juce_CaretComponent.h" +#include "keyboard/juce_KeyboardFocusTraverser.h" +#include "keyboard/juce_SystemClipboard.h" +#include "keyboard/juce_TextEditorKeyMapper.h" +#include "keyboard/juce_TextInputTarget.h" +#include "commands/juce_ApplicationCommandID.h" +#include "commands/juce_ApplicationCommandInfo.h" +#include "commands/juce_ApplicationCommandTarget.h" +#include "commands/juce_ApplicationCommandManager.h" +#include "commands/juce_KeyPressMappingSet.h" +#include "buttons/juce_Button.h" +#include "buttons/juce_ArrowButton.h" +#include "buttons/juce_DrawableButton.h" +#include "buttons/juce_HyperlinkButton.h" +#include "buttons/juce_ImageButton.h" +#include "buttons/juce_ShapeButton.h" +#include "buttons/juce_TextButton.h" +#include "buttons/juce_ToggleButton.h" +#include "layout/juce_AnimatedPosition.h" +#include "layout/juce_AnimatedPositionBehaviours.h" +#include "layout/juce_ComponentBuilder.h" +#include "layout/juce_ComponentMovementWatcher.h" +#include "layout/juce_ConcertinaPanel.h" +#include "layout/juce_GroupComponent.h" +#include "layout/juce_ResizableBorderComponent.h" +#include "layout/juce_ResizableCornerComponent.h" +#include "layout/juce_ResizableEdgeComponent.h" +#include "layout/juce_ScrollBar.h" +#include "layout/juce_StretchableLayoutManager.h" +#include "layout/juce_StretchableLayoutResizerBar.h" +#include "layout/juce_StretchableObjectResizer.h" +#include "layout/juce_TabbedButtonBar.h" +#include "layout/juce_TabbedComponent.h" +#include "layout/juce_Viewport.h" +#include "menus/juce_PopupMenu.h" +#include "menus/juce_MenuBarModel.h" +#include "menus/juce_MenuBarComponent.h" +#include "positioning/juce_RelativeCoordinate.h" +#include "positioning/juce_MarkerList.h" +#include "positioning/juce_RelativePoint.h" +#include "positioning/juce_RelativeRectangle.h" +#include "positioning/juce_RelativeCoordinatePositioner.h" +#include "positioning/juce_RelativeParallelogram.h" +#include "positioning/juce_RelativePointPath.h" +#include "drawables/juce_Drawable.h" +#include "drawables/juce_DrawableShape.h" +#include "drawables/juce_DrawableComposite.h" +#include "drawables/juce_DrawableImage.h" +#include "drawables/juce_DrawablePath.h" +#include "drawables/juce_DrawableRectangle.h" +#include "drawables/juce_DrawableText.h" +#include "widgets/juce_TextEditor.h" +#include "widgets/juce_Label.h" +#include "widgets/juce_ComboBox.h" +#include "widgets/juce_ImageComponent.h" +#include "widgets/juce_ListBox.h" +#include "widgets/juce_ProgressBar.h" +#include "widgets/juce_Slider.h" +#include "widgets/juce_TableHeaderComponent.h" +#include "widgets/juce_TableListBox.h" +#include "widgets/juce_Toolbar.h" +#include "widgets/juce_ToolbarItemComponent.h" +#include "widgets/juce_ToolbarItemFactory.h" +#include "widgets/juce_ToolbarItemPalette.h" +#include "menus/juce_BurgerMenuComponent.h" +#include "buttons/juce_ToolbarButton.h" +#include "misc/juce_DropShadower.h" +#include "misc/juce_FocusOutline.h" +#include "misc/juce_JUCESplashScreen.h" +#include "widgets/juce_TreeView.h" +#include "windows/juce_TopLevelWindow.h" +#include "windows/juce_MessageBoxOptions.h" +#include "windows/juce_AlertWindow.h" +#include "windows/juce_CallOutBox.h" +#include "windows/juce_ComponentPeer.h" +#include "windows/juce_ResizableWindow.h" +#include "windows/juce_DocumentWindow.h" +#include "windows/juce_DialogWindow.h" +#include "windows/juce_NativeMessageBox.h" +#include "windows/juce_ThreadWithProgressWindow.h" +#include "windows/juce_TooltipWindow.h" +#include "layout/juce_MultiDocumentPanel.h" +#include "layout/juce_SidePanel.h" +#include "filebrowser/juce_FileBrowserListener.h" +#include "filebrowser/juce_DirectoryContentsList.h" +#include "filebrowser/juce_DirectoryContentsDisplayComponent.h" +#include "filebrowser/juce_FileBrowserComponent.h" +#include "filebrowser/juce_FileChooser.h" +#include "filebrowser/juce_FileChooserDialogBox.h" +#include "filebrowser/juce_FileListComponent.h" +#include "filebrowser/juce_FilenameComponent.h" +#include "filebrowser/juce_FilePreviewComponent.h" +#include "filebrowser/juce_FileSearchPathListComponent.h" +#include "filebrowser/juce_FileTreeComponent.h" +#include "filebrowser/juce_ImagePreviewComponent.h" +#include "filebrowser/juce_ContentSharer.h" +#include "properties/juce_PropertyComponent.h" +#include "properties/juce_BooleanPropertyComponent.h" +#include "properties/juce_ButtonPropertyComponent.h" +#include "properties/juce_ChoicePropertyComponent.h" +#include "properties/juce_PropertyPanel.h" +#include "properties/juce_SliderPropertyComponent.h" +#include "properties/juce_TextPropertyComponent.h" +#include "properties/juce_MultiChoicePropertyComponent.h" +#include "application/juce_Application.h" +#include "misc/juce_BubbleComponent.h" +#include "lookandfeel/juce_LookAndFeel.h" +#include "lookandfeel/juce_LookAndFeel_V2.h" +#include "lookandfeel/juce_LookAndFeel_V1.h" +#include "lookandfeel/juce_LookAndFeel_V3.h" +#include "lookandfeel/juce_LookAndFeel_V4.h" +#include "mouse/juce_LassoComponent.h" +#include "accessibility/interfaces/juce_AccessibilityCellInterface.h" +#include "accessibility/interfaces/juce_AccessibilityTableInterface.h" +#include "accessibility/interfaces/juce_AccessibilityTextInterface.h" +#include "accessibility/interfaces/juce_AccessibilityValueInterface.h" +#include "accessibility/enums/juce_AccessibilityActions.h" +#include "accessibility/enums/juce_AccessibilityEvent.h" +#include "accessibility/enums/juce_AccessibilityRole.h" +#include "accessibility/juce_AccessibilityState.h" +#include "accessibility/juce_AccessibilityHandler.h" + +#if JUCE_LINUX || JUCE_BSD + #if JUCE_GUI_BASICS_INCLUDE_XHEADERS + // If you're missing these headers, you need to install the libx11-dev package + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #if JUCE_USE_XRANDR + // If you're missing this header, you need to install the libxrandr-dev package + #include + #endif + + #if JUCE_USE_XINERAMA + // If you're missing this header, you need to install the libxinerama-dev package + #include + #endif + + #if JUCE_USE_XSHM + #include + #include + #include + #endif + + #if JUCE_USE_XRENDER + // If you're missing these headers, you need to install the libxrender-dev and libxcomposite-dev packages + #include + #include + #endif + + #if JUCE_USE_XCURSOR + // If you're missing this header, you need to install the libxcursor-dev package + #include + #endif + + #undef SIZEOF + #undef KeyPress + + #include "native/x11/juce_linux_XWindowSystem.h" + #include "native/x11/juce_linux_X11_Symbols.h" + #endif +#endif + +#if JUCE_GUI_BASICS_INCLUDE_SCOPED_THREAD_DPI_AWARENESS_SETTER && JUCE_WINDOWS + #include "native/juce_win32_ScopedThreadDPIAwarenessSetter.h" +#endif + +#if JUCE_MAC + #include "native/mac_objectivec_interface.h" +#endif + +#include "layout/juce_FlexItem.h" +#include "layout/juce_FlexBox.h" + +#include "layout/juce_GridItem.h" +#include "layout/juce_Grid.h" +#include "native/juce_ScopedDPIAwarenessDisabler.h" diff --git a/Modules/juce_gui_basics/native/mac_Pasteboard.mm b/Modules/juce_gui_basics/native/mac_Pasteboard.mm new file mode 100644 index 0000000..b3f3a8d --- /dev/null +++ b/Modules/juce_gui_basics/native/mac_Pasteboard.mm @@ -0,0 +1,40 @@ +/* + * Interactions with the Mac Pasteboard + */ + +namespace juce +{ + + +/// Copy the supplied Preset data to the clipboard +void macPasteboard::copyPresetDataToClipboard(void *data, size_t size) +{ + NSData *dataToCopy = [NSData dataWithBytes:data length:size]; + + NSString *pasteboardType = @"com.discodsp.document.fxb"; + [[NSPasteboard generalPasteboard] declareTypes:@[pasteboardType] owner:nil]; + [[NSPasteboard generalPasteboard] setData:dataToCopy forType:pasteboardType]; +} + + +/// Load a Preset from the clipboard into a juce MemoryBlock +bool macPasteboard::fetchPresetDataFromClipboard(juce::MemoryBlock& mb) +{ + NSString *pasteboardType = @"com.discodsp.document.fxb"; + NSData *data = [[NSPasteboard generalPasteboard] dataForType:pasteboardType]; + if (data != nil) + { + mb.replaceAll(data.bytes, data.length); + return YES; + } + return NO; +} + + +/// Indicates if Preset data is available on the clipboard +bool macPasteboard::containsPresetData() +{ + return [[NSPasteboard generalPasteboard] canReadItemWithDataConformingToTypes:@[@"com.discodsp.document.fxb"]]; +} +} // namespace + diff --git a/Modules/juce_gui_basics/native/mac_objectivec_interface.h b/Modules/juce_gui_basics/native/mac_objectivec_interface.h new file mode 100644 index 0000000..ca1ea8b --- /dev/null +++ b/Modules/juce_gui_basics/native/mac_objectivec_interface.h @@ -0,0 +1,18 @@ +/* + * Native Mac interface + * + * Interface from C++ to Objective C + */ + +namespace juce +{ + // Mac Clipboard + class macPasteboard + { + public: + static void copyPresetDataToClipboard(void *data, size_t size); // Copy Preset data to the clipboard + static bool containsPresetData(); // Indicates if Preset data is on the clipboard + static bool fetchPresetDataFromClipboard(juce::MemoryBlock& mb); // Load Preset from the clipboard into a juce MemoryBlock + }; +} // namespace + diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 62ba7c2..bcdf126 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -863,8 +863,9 @@ void ObxdAudioProcessorEditor::rebuildComponents (ObxdAudioProcessor& ownerFilte void ObxdAudioProcessorEditor::createMenu () { +#if JUCE_MAC bool enablePasteOption = macPasteboard::containsPresetData(); // Check if the clipboard contains data for a Preset - +#endif popupMenus.clear(); PopupMenu* menu = new PopupMenu(); //menu->setLookAndFeel(new CustomLookAndFeel(&this->processor)); @@ -928,6 +929,8 @@ void ObxdAudioProcessorEditor::createMenu () true, false); +#if JUCE_MAC + fileMenu.addSeparator(); fileMenu.addItem(static_cast(MenuAction::CopyPreset), @@ -939,7 +942,7 @@ void ObxdAudioProcessorEditor::createMenu () "Paste Preset...", enablePasteOption, false); - +#endif /* fileMenu.addItem(static_cast(MenuAction::DeleteBank), "Delete Bank...", @@ -1338,6 +1341,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ } }; +#if JUCE_MAC // Copy to clipboard if (action == MenuAction::CopyPreset) { @@ -1362,6 +1366,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ processor.loadFromMemoryBlock(memoryBlock); //loadPreset(memoryBlock); } } +#endif }