16#include "IPlugAPP_host.h"
28extern WDL_DLGRET MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
31extern HINSTANCE gHINSTANCE;
34int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam,
int nShowCmd)
38#ifndef APP_ALLOW_MULTIPLE_INSTANCES
39 HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, BUNDLE_NAME);
42 hMutex = CreateMutex(0, 0, BUNDLE_NAME);
45 HWND hWnd = FindWindow(0, BUNDLE_NAME);
46 SetForegroundWindow(hWnd);
50 gHINSTANCE = hInstance;
53 gScrollMessage = RegisterWindowMessage(
"MSWHEEL_ROLLMSG");
57 pAppHost->TryToChangeAudio();
59 HACCEL hAccel = LoadAccelerators(gHINSTANCE, MAKEINTRESOURCE(IDR_ACCELERATOR1));
61 static UINT(WINAPI *__SetProcessDpiAwarenessContext)(DPI_AWARENESS_CONTEXT);
63 if (!__SetProcessDpiAwarenessContext)
65 HINSTANCE h = LoadLibrary(
"user32.dll");
66 if (h) *(
void **)&__SetProcessDpiAwarenessContext = GetProcAddress(h,
"SetProcessDpiAwarenessContext");
67 if (!__SetProcessDpiAwarenessContext)
68 *(
void **)&__SetProcessDpiAwarenessContext = (
void*)(INT_PTR)1;
70 if ((UINT_PTR)__SetProcessDpiAwarenessContext > (UINT_PTR)1)
72 __SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
75 CreateDialog(gHINSTANCE, MAKEINTRESOURCE(IDD_DIALOG_MAIN), GetDesktopWindow(), IPlugAPPHost::MainDlgProc);
77#if !defined _DEBUG || defined NO_IGRAPHICS
78 HMENU menu = GetMenu(gHWND);
79 RemoveMenu(menu, 1, MF_BYPOSITION);
86 int vvv = GetMessage(&msg, NULL, 0, 0);
99 DispatchMessage(&msg);
103 if (gHWND && (TranslateAccelerator(gHWND, hAccel, &msg) || IsDialogMessage(gHWND, &msg)))
107 HWND hWndParent = NULL;
108 HWND temphwnd = msg.hwnd;
112 if (GetClassLong(temphwnd, GCW_ATOM) == (INT)32770)
114 hWndParent = temphwnd;
115 if (!(GetWindowLong(temphwnd, GWL_STYLE) & WS_CHILD))
119 while (temphwnd = GetParent(temphwnd));
121 if (hWndParent && IsDialogMessage(hWndParent,&msg))
124 TranslateMessage(&msg);
125 DispatchMessage(&msg);
130 DestroyWindow(gHWND);
132#ifndef APP_ALLOW_MULTIPLE_INSTANCES
133 ReleaseMutex(hMutex);
136 catch(std::exception e)
138 DBGMSG(
"Exception: %s", e.what());
145#import <Cocoa/Cocoa.h>
146#include "IPlugSWELL.h"
150extern HMENU SWELL_app_stocksysmenu;
152int main(
int argc,
char *argv[])
156 if(strcmp(argv[2],
"registerauv3"))
158 WDL_String appexPath;
159 appexPath.SetFormatted(1024,
"pluginkit -a %s%s%s.appex", argv[0],
"/../../Plugins/", appexPath.get_filepart());
160 if(system(appexPath.Get()) > -1)
161 NSLog(
@"Registered audiounit app extension\n");
163 NSLog(
@"Failed to register audiounit app extension\n");
168 DBGMSG(
"App is sandboxed, file system access etc restricted!\n");
170 return NSApplicationMain(argc, (
const char **) argv);
173INT_PTR SWELLAppMain(
int msg, INT_PTR parm1, INT_PTR parm2)
179 case SWELLAPP_ONLOAD:
180 pAppHost = IPlugAPPHost::Create();
182 pAppHost->TryToChangeAudio();
184 case SWELLAPP_LOADED:
186 pAppHost = IPlugAPPHost::sInstance.get();
188 HMENU menu = SWELL_GetCurrentMenu();
193 menu = SWELL_DuplicateMenu(menu);
194 HMENU src = LoadMenu(NULL, MAKEINTRESOURCE(IDR_MENU1));
196 for (
int x = 0; x < GetMenuItemCount(src)-1; x++)
198 HMENU sm = GetSubMenu(src,x);
203 MENUITEMINFO mii = {
sizeof(mii), MIIM_TYPE};
204 mii.dwTypeData = str;
205 mii.cch =
sizeof(str);
207 GetMenuItemInfo(src, x, TRUE, &mii);
208 MENUITEMINFO mi= {
sizeof(mi), MIIM_STATE|MIIM_SUBMENU|MIIM_TYPE,MFT_STRING, 0, 0, SWELL_DuplicateMenu(sm), NULL, NULL, 0, str};
209 InsertMenuItem(menu, x+1, TRUE, &mi);
216 HMENU sm = GetSubMenu(menu, 1);
217 DeleteMenu(sm, ID_QUIT, MF_BYCOMMAND);
218 DeleteMenu(sm, ID_PREFERENCES, MF_BYCOMMAND);
221 int a = GetMenuItemCount(sm);
223 while (a > 0 && GetMenuItemID(sm, a-1) == 0)
224 DeleteMenu(sm, --a, MF_BYPOSITION);
226 DeleteMenu(menu, 1, MF_BYPOSITION);
228#if !defined _DEBUG || defined NO_IGRAPHICS
231 HMENU sm = GetSubMenu(menu, 1);
232 DeleteMenu(sm, ID_LIVE_EDIT, MF_BYCOMMAND);
233 DeleteMenu(sm, ID_SHOW_DRAWN, MF_BYCOMMAND);
234 DeleteMenu(sm, ID_SHOW_FPS, MF_BYCOMMAND);
237 int a = GetMenuItemCount(sm);
239 while (a > 0 && GetMenuItemID(sm, a-1) == 0)
240 DeleteMenu(sm, --a, MF_BYPOSITION);
242 DeleteMenu(menu, 1, MF_BYPOSITION);
245 SetMenuItemModifier(menu, ID_LIVE_EDIT, MF_BYCOMMAND,
'E', FCONTROL);
246 SetMenuItemModifier(menu, ID_SHOW_DRAWN, MF_BYCOMMAND,
'D', FCONTROL);
247 SetMenuItemModifier(menu, ID_SHOW_BOUNDS, MF_BYCOMMAND,
'B', FCONTROL);
248 SetMenuItemModifier(menu, ID_SHOW_FPS, MF_BYCOMMAND,
'F', FCONTROL);
251 HWND hwnd = CreateDialog(gHINST, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, IPlugAPPHost::MainDlgProc);
256 SWELL_SetDefaultModalWindowMenu(menu);
261 case SWELLAPP_ONCOMMAND:
263 if (gHWND && (parm1&0xffff))
264 SendMessage(gHWND, WM_COMMAND, parm1 & 0xffff, 0);
266 case SWELLAPP_DESTROY:
268 DestroyWindow(gHWND);
270 case SWELLAPP_PROCESSMESSAGE:
271 MSG* pMSG = (MSG*) parm1;
272 NSView* pContentView = (NSView*) pMSG->hwnd;
273 NSEvent* pEvent = (NSEvent*) parm2;
274 int etype = (int) [pEvent type];
276 bool textField = [pContentView isKindOfClass:[NSText
class]];
278 if (!textField && etype == NSKeyDown)
280 int flag, code = SWELL_MacKeyToWindowsKey(pEvent, &flag);
282 if (!(flag&~FVIRTKEY) && (code == VK_RETURN || code == VK_ESCAPE))
284 [pContentView keyDown: pEvent];
293#define CBS_HASSTRINGS 0
294#define SWELL_DLG_SCALE_AUTOGEN 1
295#define SET_IDD_DIALOG_PREF_SCALE 1.5
297#define SWELL_DLG_FLAGS_AUTOGEN SWELL_DLG_WS_FLIPPED|SWELL_DLG_WS_RESIZABLE
299#include "swell-dlggen.h"
300#include "resources/main.rc_mac_dlg"
301#include "swell-menugen.h"
302#include "resources/main.rc_mac_menu"
305#elif defined(OS_LINUX)
Common paths useful for plug-ins.
A class that hosts an IPlug as a standalone app and provides Audio/Midi I/O.