12 #include "wdlstring.h" 15 #include "IPlugAPP_host.h" 20 using namespace iplug;
22 #pragma mark - WINDOWS 27 extern WDL_DLGRET MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
30 extern HINSTANCE gHINSTANCE;
33 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam,
int nShowCmd)
37 #ifndef APP_ALLOW_MULTIPLE_INSTANCES 38 HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, BUNDLE_NAME);
41 hMutex = CreateMutex(0, 0, BUNDLE_NAME);
44 HWND hWnd = FindWindow(0, BUNDLE_NAME);
45 SetForegroundWindow(hWnd);
49 gHINSTANCE = hInstance;
52 gScrollMessage = RegisterWindowMessage(
"MSWHEEL_ROLLMSG");
56 pAppHost->TryToChangeAudio();
58 HACCEL hAccel = LoadAccelerators(gHINSTANCE, MAKEINTRESOURCE(IDR_ACCELERATOR1));
60 static UINT(WINAPI *__SetProcessDpiAwarenessContext)(DPI_AWARENESS_CONTEXT);
64 if (!__SetProcessDpiAwarenessContext)
66 HINSTANCE h = LoadLibrary(
"user32.dll");
67 if (h) *(
void **)&__SetProcessDpiAwarenessContext = GetProcAddress(h,
"SetProcessDpiAwarenessContext");
68 if (!__SetProcessDpiAwarenessContext)
69 *(
void **)&__SetProcessDpiAwarenessContext = (
void*)(INT_PTR)1;
71 if ((UINT_PTR)__SetProcessDpiAwarenessContext > (UINT_PTR)1)
73 __SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
76 CreateDialog(gHINSTANCE, MAKEINTRESOURCE(IDD_DIALOG_MAIN), GetDesktopWindow(), IPlugAPPHost::MainDlgProc);
79 HMENU menu = GetMenu(gHWND);
80 RemoveMenu(menu, 1, MF_BYPOSITION);
87 int vvv = GetMessage(&msg, NULL, 0, 0);
100 DispatchMessage(&msg);
104 if (gHWND && (TranslateAccelerator(gHWND, hAccel, &msg) || IsDialogMessage(gHWND, &msg)))
108 HWND hWndParent = NULL;
109 HWND temphwnd = msg.hwnd;
113 if (GetClassLong(temphwnd, GCW_ATOM) == (INT)32770)
115 hWndParent = temphwnd;
116 if (!(GetWindowLong(temphwnd, GWL_STYLE) & WS_CHILD))
120 while (temphwnd = GetParent(temphwnd));
122 if (hWndParent && IsDialogMessage(hWndParent,&msg))
125 TranslateMessage(&msg);
126 DispatchMessage(&msg);
131 DestroyWindow(gHWND);
133 #ifndef APP_ALLOW_MULTIPLE_INSTANCES 134 ReleaseMutex(hMutex);
139 DBGMSG(
"another instance running\n");
144 #elif defined(OS_MAC) 145 #import <Cocoa/Cocoa.h> 146 #include "IPlugSWELL.h" 150 extern HMENU SWELL_app_stocksysmenu;
152 int main(
int argc,
char *argv[])
156 if(strcmp(argv[2],
"registerauv3"))
158 WDL_String appexPath(argv[0]);
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);
173 INT_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);
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.