DWORD WINAPI commandthreadStart(void *arg)
{
- command->run();
- return 0;
+ command->run();
+ return 0;
}
void LoadRemoteFunctions() {
- user32dll=LoadLibrary("user32.dll");
- if (user32dll!=NULL) {
- dynGetRawInputData=(GETRAWINPUTDATAFNC)GetProcAddress(user32dll,"GetRawInputData");
- if (dynGetRawInputData!=NULL) {
- dynRegisterRawInputDevices=(REGISTERRAWINPUTDEVICEFNC)GetProcAddress(user32dll,"RegisterRawInputDevices");
- if (dynRegisterRawInputDevices!=NULL) {
- remotefnc=true;
- }
- }
- }
+ user32dll=LoadLibrary("user32.dll");
+ if (user32dll!=NULL) {
+ dynGetRawInputData=(GETRAWINPUTDATAFNC)GetProcAddress(user32dll,"GetRawInputData");
+ if (dynGetRawInputData!=NULL) {
+ dynRegisterRawInputDevices=(REGISTERRAWINPUTDEVICEFNC)GetProcAddress(user32dll,"RegisterRawInputDevices");
+ if (dynRegisterRawInputDevices!=NULL) {
+ remotefnc=true;
+ }
+ }
+ }
}
bool InitApp(HINSTANCE hinst,int cmdshow);
#define ERROR_MSG(str) MessageBox(win_main,str,"Error!",MB_OK|MB_ICONWARNING)
INT WINAPI WinMain( HINSTANCE hinst , HINSTANCE previnst, LPSTR cmdline, int cmdshow)
{
- hinstance=hinst;
+ hinstance=hinst;
//On Windows we have to init a window, we use DXUT
- LoadRemoteFunctions();
- if (!InitApp(hinst,cmdshow)) return false;
+ LoadRemoteFunctions();
+ if (!InitApp(hinst,cmdshow)) return false;
//Starting Network support
- WSADATA wsadat;
+ WSADATA wsadat;
int result = WSAStartup(MAKEWORD(2,2),&wsadat);
if (result!=NO_ERROR) {
ERROR_MSG("Initialising WinSocked: Error at WSAStartup()\n");
- return 0;
+ return 0;
}
-
+
result= CoInitializeEx(NULL,COINIT_MULTITHREADED );//Initialize COM for DirectShow
if (result!=S_OK) {
- ERROR_MSG("Initialising COM: Error at Coinitialize()\n");
- return 0;
+ ERROR_MSG("Initialising COM: Error at Coinitialize()\n");
+ return 0;
}
{
ERROR_MSG("Could not create objects. Memory problems?\n");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
// Get logging module started --------------------------------------------------------------------------------------
{
ERROR_MSG("Could not initialise log object. Aborting.\n");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
logger->log("Core", Log::INFO, "Starting up...");
-
+
// Init modules ----------------------------------------------------------------------------------------------------
{
logger->log("Core", Log::EMERG, "Remote module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = led->init(0);
{
logger->log("Core", Log::EMERG, "LED module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
- success = mtd->init("/dev/mtd1");
+ success = mtd->init();
if (success)
{
logger->log("Core", Log::INFO, "Mtd module initialised");
{
logger->log("Core", Log::EMERG, "Mtd module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = timers->init();
{
logger->log("Core", Log::EMERG, "Timers module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
UCHAR videoFormat = (UCHAR)mtd->getPALorNTSC();
{
logger->log("Core", Log::EMERG, "Video module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = osd->init((void*)&win);
{
logger->log("Core", Log::EMERG, "OSD module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = audio->init(Audio::MPEG2_PES);
{
logger->log("Core", Log::EMERG, "Audio module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = vdr->init(3024);
{
logger->log("Core", Log::EMERG, "VDR module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = viewman->init();
{
logger->log("Core", Log::EMERG, "ViewMan module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
success = command->init();
{
logger->log("Core", Log::EMERG, "Command module failed to initialise");
shutdown(1);
- WSACleanup();
- return 0;
+ WSACleanup();
+ return 0;
}
// Other init ------------------------------------------------------------------------------------------------------
// Ok, all major device components and other bits are loaded and ready
lastmousemove=timeGetTime();
-
+
HANDLE commandthread;
- commandthread= CreateThread(NULL, 0, commandthreadStart, NULL,0,
- NULL);
+ commandthread= CreateThread(NULL, 0, commandthreadStart, NULL,0,
+ NULL);
MSG message;
message.message=WM_NULL;
bool run=true;
while(run && WaitForSingleObject(commandthread,0)==WAIT_TIMEOUT) {
- if (PeekMessage(&message, NULL, 0,0,PM_REMOVE)!=0) {
- if (TranslateAccelerator(win_main,acc,&message)==NULL) {
- TranslateMessage(&message);
- DispatchMessage(&message);
- switch (message.message) {
- case WM_QUIT:
- run=false; //TODO post exit to command Messages
- };
- }
- } else {
- //Render
- ((OsdWin*)osd)->Render();
- }
+ if (PeekMessage(&message, NULL, 0,0,PM_REMOVE)!=0) {
+ if (TranslateAccelerator(win_main,acc,&message)==NULL) {
+ TranslateMessage(&message);
+ DispatchMessage(&message);
+ switch (message.message) {
+ case WM_QUIT:
+ run=false; //TODO post exit to command Messages
+ };
+ }
+ } else {
+ //Render
+ ((OsdWin*)osd)->Render();
+ }
}
// When that returns quit ------------------------------------------------------------------------------------------
WaitForSingleObject(commandthread,INFINITE);
}
bool TranslateMousePosition(POINT *pos) {
-
- RECT clientrect;
- ScreenToClient(win,pos);
- GetClientRect(win,&clientrect);
- if (!PtInRect(&clientrect,*pos)) return false;//Don't pass it further
- pos->x=((double)pos->x)/((double) (clientrect.right-clientrect.left))
- *((double)Video::getInstance()->getScreenWidth());
- pos->y=((double)pos->y)/((double) (clientrect.bottom-clientrect.top))
- *((double)Video::getInstance()->getScreenHeight());
- return true;
+
+ RECT clientrect;
+ ScreenToClient(win,pos);
+ GetClientRect(win,&clientrect);
+ if (!PtInRect(&clientrect,*pos)) return false;//Don't pass it further
+ pos->x=((double)pos->x)/((double) (clientrect.right-clientrect.left))
+ *((double)Video::getInstance()->getScreenWidth());
+ pos->y=((double)pos->y)/((double) (clientrect.bottom-clientrect.top))
+ *((double)Video::getInstance()->getScreenHeight());
+ return true;
}
void CalculateWindowSize(RECT * size,ULONG size_mode) {
-
- DWORD width, height;
- DWORD adjheight,adjwidth;
- if (!wnd_fullscreen) {
- DWORD flags =WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
- |WS_MINIMIZEBOX | WS_SIZEBOX |WS_MAXIMIZEBOX;
- RECT wnted={50,50,150,150};
- AdjustWindowRect(&wnted,flags ,false);
- adjwidth=-wnted.left+wnted.right-100;
- adjheight=-wnted.top+wnted.bottom-100;
- } else {
- adjwidth=adjheight=0;
- }
- width=size->right-size->left-adjwidth;
- height=size->bottom-size->top-adjheight;
- UCHAR mode=video->getMode();
- UCHAR aspect=((VideoWin*)video)->getAspectRatio();
- UCHAR tvsize=((VideoWin*)video)->getPseudoTVsize();
- double aspectrt=4./3.;
- if (tvsize==Video::ASPECT16X9) {
- if (aspect==Video::ASPECT16X9) {
- aspectrt=4./3.; //looks strange, but it is a 16:9 tv
- } else if (aspect==Video::ASPECT4X3) {
- aspectrt=4./3./(16./9.)*(4./3.); //I hope this is correct
- }
- } else if (tvsize==Video::ASPECT4X3) {
- if (aspect==Video::ASPECT16X9) {
- if (mode!=Video::NORMAL) {
- aspectrt=16./9.;
- } else {
- aspectrt=4./3.;
- }
- } else if (aspect==Video::ASPECT4X3) {
- aspectrt=4./3.;
- }
- }
- if (!wnd_fullscreen) {
- switch (size_mode) {
- case WMSZ_BOTTOM:
- case WMSZ_BOTTOMRIGHT:
- case WMSZ_TOP:
- case WMSZ_TOPRIGHT:
- width=(ULONG)(((double)height)*aspectrt);
- size->right=size->left+width+adjwidth;
- break;
- case WMSZ_BOTTOMLEFT:
- case WMSZ_TOPLEFT:
- width=(ULONG)(((double)height)*aspectrt);
- size->left=size->right-width-adjwidth;
- break;
- case WMSZ_LEFT:
- case WMSZ_RIGHT:
- height=(ULONG)(((double)width)/aspectrt);
- size->bottom=size->top+height+adjheight;
- break;
- }
- MoveWindow(win,0,0,width,height,TRUE);
- } else {
- RECT newrect={0,0,width,height};
- DWORD newlength;
- if ((ULONG)(((double)height)*aspectrt)>width) {
- newlength=(ULONG)(((double)width)/aspectrt);
- newrect.top+=(height-newlength)/2;
- newrect.bottom-=(height-newlength);
- } else {
- newlength=(ULONG)(((double)height)*aspectrt);
- newrect.left+=(width-newlength)/2;
- newrect.right-=(width-newlength);
- }
- MoveWindow(win,newrect.left,newrect.top,newrect.right,newrect.bottom,TRUE);
- }
-
+
+ DWORD width, height;
+ DWORD adjheight,adjwidth;
+ if (!wnd_fullscreen) {
+ DWORD flags =WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ |WS_MINIMIZEBOX | WS_SIZEBOX |WS_MAXIMIZEBOX;
+ RECT wnted={50,50,150,150};
+ AdjustWindowRect(&wnted,flags ,false);
+ adjwidth=-wnted.left+wnted.right-100;
+ adjheight=-wnted.top+wnted.bottom-100;
+ } else {
+ adjwidth=adjheight=0;
+ }
+ width=size->right-size->left-adjwidth;
+ height=size->bottom-size->top-adjheight;
+ UCHAR mode=video->getMode();
+ UCHAR aspect=((VideoWin*)video)->getAspectRatio();
+ UCHAR tvsize=((VideoWin*)video)->getPseudoTVsize();
+ double aspectrt=4./3.;
+ if (tvsize==Video::ASPECT16X9) {
+ if (aspect==Video::ASPECT16X9) {
+ aspectrt=4./3.; //looks strange, but it is a 16:9 tv
+ } else if (aspect==Video::ASPECT4X3) {
+ aspectrt=4./3./(16./9.)*(4./3.); //I hope this is correct
+ }
+ } else if (tvsize==Video::ASPECT4X3) {
+ if (aspect==Video::ASPECT16X9) {
+ if (mode!=Video::NORMAL) {
+ aspectrt=16./9.;
+ } else {
+ aspectrt=4./3.;
+ }
+ } else if (aspect==Video::ASPECT4X3) {
+ aspectrt=4./3.;
+ }
+ }
+ if (!wnd_fullscreen) {
+ switch (size_mode) {
+ case WMSZ_BOTTOM:
+ case WMSZ_BOTTOMRIGHT:
+ case WMSZ_TOP:
+ case WMSZ_TOPRIGHT:
+ width=(ULONG)(((double)height)*aspectrt);
+ size->right=size->left+width+adjwidth;
+ break;
+ case WMSZ_BOTTOMLEFT:
+ case WMSZ_TOPLEFT:
+ width=(ULONG)(((double)height)*aspectrt);
+ size->left=size->right-width-adjwidth;
+ break;
+ case WMSZ_LEFT:
+ case WMSZ_RIGHT:
+ height=(ULONG)(((double)width)/aspectrt);
+ size->bottom=size->top+height+adjheight;
+ break;
+ }
+ MoveWindow(win,0,0,width,height,TRUE);
+ } else {
+ RECT newrect={0,0,width,height};
+ DWORD newlength;
+ if ((ULONG)(((double)height)*aspectrt)>width) {
+ newlength=(ULONG)(((double)width)/aspectrt);
+ newrect.top+=(height-newlength)/2;
+ newrect.bottom-=(height-newlength);
+ } else {
+ newlength=(ULONG)(((double)height)*aspectrt);
+ newrect.left+=(width-newlength)/2;
+ newrect.right-=(width-newlength);
+ }
+ MoveWindow(win,newrect.left,newrect.top,newrect.right,newrect.bottom,TRUE);
+ }
+
}
void AdjustWindow() {
- if (!wnd_fullscreen) {
- RECT winrect;
- GetWindowRect(win_main,&winrect);
- CalculateWindowSize(&winrect,WMSZ_BOTTOM);
- MoveWindow(win_main,winrect.left,
- winrect.top,winrect.right-winrect.left,winrect.bottom-winrect.top,true);
- } else {
- RECT winrect;
- GetWindowRect(win_main,&winrect);
- CalculateWindowSize(&winrect,WMSZ_BOTTOM);
-
- }
+ if (!wnd_fullscreen) {
+ RECT winrect;
+ GetWindowRect(win_main,&winrect);
+ CalculateWindowSize(&winrect,WMSZ_BOTTOM);
+ MoveWindow(win_main,winrect.left,
+ winrect.top,winrect.right-winrect.left,winrect.bottom-winrect.top,true);
+ } else {
+ RECT winrect;
+ GetWindowRect(win_main,&winrect);
+ CalculateWindowSize(&winrect,WMSZ_BOTTOM);
+
+ }
}
void ToggleFullscreen() {
- if (wnd_fullscreen) {
- wnd_fullscreen=false;
- SetWindowLong(win_main,GWL_STYLE,WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ if (wnd_fullscreen) {
+ wnd_fullscreen=false;
+ SetWindowLong(win_main,GWL_STYLE,WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
|WS_MINIMIZEBOX | WS_SIZEBOX |WS_MAXIMIZEBOX);
- SetWindowPos(win_main,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
-
- SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_TOP,wnd_fs_rect.left,wnd_fs_rect.top,
- wnd_fs_rect.right-wnd_fs_rect.left,
- wnd_fs_rect.bottom-wnd_fs_rect.top,
- SWP_DRAWFRAME | SWP_FRAMECHANGED);
- MoveWindow(win,wnd_fs_rect_client.left,wnd_fs_rect_client.top,
- wnd_fs_rect_client.right-wnd_fs_rect_client.left,
- wnd_fs_rect_client.bottom-wnd_fs_rect_client.top,TRUE);
- AdjustWindow();
- } else {
- GetWindowRect(win_main,&wnd_fs_rect);
- GetWindowRect(win,&wnd_fs_rect_client);
- SetWindowLong(win_main,GWL_STYLE,WS_VISIBLE | WS_POPUP );
- SetWindowPos(win_main,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
- HMONITOR monitor=MonitorFromWindow(win_main,MONITOR_DEFAULTTONEAREST);
- MONITORINFO moninfo;
- moninfo.cbSize=sizeof(moninfo);
- wnd_fullscreen=true;
- if (!GetMonitorInfo(monitor,&moninfo)) return ;
- SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_TOP,moninfo.rcMonitor.left,moninfo.rcMonitor.top,
- moninfo.rcMonitor.right,moninfo.rcMonitor.bottom,SWP_FRAMECHANGED);
-
- AdjustWindow();
-
- }
+ SetWindowPos(win_main,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
+
+ SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_TOP,wnd_fs_rect.left,wnd_fs_rect.top,
+ wnd_fs_rect.right-wnd_fs_rect.left,
+ wnd_fs_rect.bottom-wnd_fs_rect.top,
+ SWP_DRAWFRAME | SWP_FRAMECHANGED);
+ MoveWindow(win,wnd_fs_rect_client.left,wnd_fs_rect_client.top,
+ wnd_fs_rect_client.right-wnd_fs_rect_client.left,
+ wnd_fs_rect_client.bottom-wnd_fs_rect_client.top,TRUE);
+ AdjustWindow();
+ } else {
+ GetWindowRect(win_main,&wnd_fs_rect);
+ GetWindowRect(win,&wnd_fs_rect_client);
+ SetWindowLong(win_main,GWL_STYLE,WS_VISIBLE | WS_POPUP );
+ SetWindowPos(win_main,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
+ HMONITOR monitor=MonitorFromWindow(win_main,MONITOR_DEFAULTTONEAREST);
+ MONITORINFO moninfo;
+ moninfo.cbSize=sizeof(moninfo);
+ wnd_fullscreen=true;
+ if (!GetMonitorInfo(monitor,&moninfo)) return ;
+ SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_TOP,moninfo.rcMonitor.left,moninfo.rcMonitor.top,
+ moninfo.rcMonitor.right,moninfo.rcMonitor.bottom,SWP_FRAMECHANGED);
+
+ AdjustWindow();
+
+ }
}
void ToggleTopmost() {
- wnd_topmost=!wnd_topmost;
- SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_NOTOPMOST,0,0,
- 0,0,SWP_NOMOVE | SWP_NOSIZE);
+ wnd_topmost=!wnd_topmost;
+ SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_NOTOPMOST,0,0,
+ 0,0,SWP_NOMOVE | SWP_NOSIZE);
}
void CursorUpdate() {
- POINT cursorpos;
- GetCursorPos(&cursorpos);
- HWND asswind;
- asswind=WindowFromPoint(cursorpos);
- if (asswind!=win_main && asswind!=win) {
- return ; //not our responsibility
- }
- if ((timeGetTime()-lastmousemove)<4000 || cmenu) {
- SetCursor(LoadCursor(NULL,IDC_ARROW));
- } else {
- SetCursor(NULL);
- }
+ POINT cursorpos;
+ GetCursorPos(&cursorpos);
+ HWND asswind;
+ asswind=WindowFromPoint(cursorpos);
+ if (asswind!=win_main && asswind!=win) {
+ return ; //not our responsibility
+ }
+ if ((timeGetTime()-lastmousemove)<4000 || cmenu) {
+ SetCursor(LoadCursor(NULL,IDC_ARROW));
+ } else {
+ SetCursor(NULL);
+ }
}
bool ContextMenu(HWND wind,int x,int y) {
- POINT p={x,y};
- RECT clientrect;
- ScreenToClient(wind,&p);
- GetClientRect(wind,&clientrect);
- if (!PtInRect(&clientrect,p)) return false;
- ClientToScreen(wind,&p);
- HMENU menu;
- HMENU popup;
- menu=LoadMenu(hinstance,MAKEINTRESOURCE(VOMPMENU));
- popup=GetSubMenu(menu,0);
- if (wnd_fullscreen) {
- CheckMenuItem(popup,VOMP_FULL_SCREEN,MF_BYCOMMAND|MF_CHECKED);
- } else {
- CheckMenuItem(popup,VOMP_FULL_SCREEN,MF_BYCOMMAND|MF_UNCHECKED);
- }
- if (wnd_topmost) {
- CheckMenuItem(popup,VOMP_TOPMOST,MF_BYCOMMAND|MF_CHECKED);
- } else {
- CheckMenuItem(popup,VOMP_TOPMOST,MF_BYCOMMAND|MF_UNCHECKED);
- }
- cmenu=true;
- TrackPopupMenu(popup,TPM_RIGHTBUTTON|TPM_LEFTALIGN,x,y,0,wind, NULL);
- cmenu=false;
-
-
- DestroyMenu(menu);
- return true;
+ POINT p={x,y};
+ RECT clientrect;
+ ScreenToClient(wind,&p);
+ GetClientRect(wind,&clientrect);
+ if (!PtInRect(&clientrect,p)) return false;
+ ClientToScreen(wind,&p);
+ HMENU menu;
+ HMENU popup;
+ menu=LoadMenu(hinstance,MAKEINTRESOURCE(VOMPMENU));
+ popup=GetSubMenu(menu,0);
+ if (wnd_fullscreen) {
+ CheckMenuItem(popup,VOMP_FULL_SCREEN,MF_BYCOMMAND|MF_CHECKED);
+ } else {
+ CheckMenuItem(popup,VOMP_FULL_SCREEN,MF_BYCOMMAND|MF_UNCHECKED);
+ }
+ if (wnd_topmost) {
+ CheckMenuItem(popup,VOMP_TOPMOST,MF_BYCOMMAND|MF_CHECKED);
+ } else {
+ CheckMenuItem(popup,VOMP_TOPMOST,MF_BYCOMMAND|MF_UNCHECKED);
+ }
+ cmenu=true;
+ TrackPopupMenu(popup,TPM_RIGHTBUTTON|TPM_LEFTALIGN,x,y,0,wind, NULL);
+ cmenu=false;
+
+
+ DestroyMenu(menu);
+ return true;
}
LONG FAR PASCAL WindowProc(HWND wind, UINT msg, WPARAM wparam, LPARAM lparam)
{
-
+
switch (msg) {
case WM_DESTROY: {
- //TODO: call command
- logger->log("Core", Log::NOTICE, "Window closed, shutting down...");
-
- ((RemoteWin*)Remote::getInstance())->SendPower();
- PostQuitMessage(0);
- }break;
+ //TODO: call command
+ logger->log("Core", Log::NOTICE, "Window closed, shutting down...");
+
+ ((RemoteWin*)Remote::getInstance())->SendPower();
+ PostQuitMessage(0);
+ }break;
case WM_SIZING: {
- CalculateWindowSize((RECT*) lparam,wparam);
- return TRUE;
- }break;
- case WM_SIZE: {
+ CalculateWindowSize((RECT*) lparam,wparam);
+ return TRUE;
+ }break;
+ case WM_SIZE: {
int width = LOWORD(lparam);
int height = HIWORD(lparam);
//Call device
}
break;
- case WM_PAINT:
+ case WM_PAINT:
RECT r;
PAINTSTRUCT ps;
if (GetUpdateRect(wind, &r, FALSE)) {
EndPaint(wind, &ps);
}
break;
- case WM_KEYDOWN:
- if (((RemoteWin*)remote)->ReceiveButtonVK(wparam)) {
- return 0L; //We process that Key
- } else {
- return DefWindowProc(wind, msg, wparam, lparam);
- }
-
- break;
- case WM_APPCOMMAND:
- if (((RemoteWin*)remote)->ReceiveButtonAP(GET_APPCOMMAND_LPARAM(lparam))){
- return TRUE; //yes we process that message
- } else {
- return DefWindowProc(wind, msg, wparam, lparam);
- }
-
- break;
- case WM_INPUT:
- if (remotefnc ) {
- //only on XP!
- LPRAWINPUT lpit;
- UINT risize;
- dynGetRawInputData((HRAWINPUT)lparam,RID_INPUT,NULL,&risize,sizeof(RAWINPUTHEADER));
- lpit=(LPRAWINPUT)malloc(risize);
- dynGetRawInputData((HRAWINPUT)lparam,RID_INPUT,lpit,&risize,sizeof(RAWINPUTHEADER));
-
- if (lpit->header.dwType==RIM_TYPEHID && lpit->data.hid.dwSizeHid>=2) {
- DWORD button=lpit->data.hid.bRawData[1] | (lpit->data.hid.bRawData[0]<< 8);
- if (((RemoteWin*)remote)->ReceiveButtonRI(button)){
- free(lpit);
- return 0; //yes we process that message
- }
- }
- free(lpit);
- }
- return DefWindowProc(wind, msg, wparam, lparam);
-
-
- break;
- case WM_COMMAND:
- if (LOWORD(wparam)==VOMP_FULL_SCREEN) {
- ToggleFullscreen();
- return 0;
- }
- if (LOWORD(wparam)==VOMP_TOPMOST) {
- ToggleTopmost();
- return 0;
- }
- if (((RemoteWin*)remote)->ReceiveButtonAP(LOWORD(wparam))){
- return 0; //yes we process that message
- } else {
- return DefWindowProc(wind, msg, wparam, lparam);
- }
-
- break;
- case WM_SETCURSOR:
- if (((HANDLE)wparam)==win) {
- CursorUpdate();
- return 1;
- } else {
- return DefWindowProc(wind, msg, wparam, lparam);
- }
- break;
- case WM_SYSCOMMAND:
- if (wparam==SC_MAXIMIZE) {
- ToggleFullscreen();
- return 0;
- } else if (wparam==SC_SCREENSAVE || wparam==SC_MONITORPOWER) {
- return 0;
- } else {
- return DefWindowProc(wind,msg,wparam, lparam);
- }
- break;
- case WM_MOUSEMOVE: {
-
- lastmousemove=timeGetTime();
- SetCursor(LoadCursor(NULL,IDC_ARROW));
- SetTimer(wind,VOMP_CURSORUPDATE,4500,NULL);
- POINT mpos={GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam)};
- ClientToScreen(wind,&mpos);
- if (TranslateMousePosition(&mpos)) {
- Message *mousemes=new Message();
- mousemes->message=Message::MOUSE_MOVE;
- mousemes->from=NULL;
- mousemes->to=ViewMan::getInstance();
- mousemes->parameter=(mpos.x & 0xFFFF)<< 16| (mpos.y & 0xFFFF);
- mousemes->tag=0;
- //command->postMessageFromOuterSpace(mousemes);
- command->postMessageIfNotBusy(mousemes);
- }
-
- return 0;
- //return DefWindowProc(wind,msg,wparam, lparam);
- }
- break;
- case WM_TIMER:
- if (wparam==VOMP_CURSORUPDATE) {
- CursorUpdate();
- return 0;
- }
- return DefWindowProc(wind, msg, wparam, lparam);
-
- break;
- case WM_CONTEXTMENU:
- if (!ContextMenu(wind,GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam))) {
- return DefWindowProc(wind, msg, wparam, lparam);
- } else {
- return 0;
- }
- break;
- case WM_LBUTTONDOWN:{
- POINT mpos={GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam)};
- ClientToScreen(wind,&mpos);
- if (TranslateMousePosition(&mpos)) {
- Message *mousemes=new Message();
- mousemes->message=Message::MOUSE_LBDOWN;
- mousemes->from=NULL;
- mousemes->to=ViewMan::getInstance();
- mousemes->parameter=(mpos.x & 0xFFFF)<< 16| (mpos.y & 0xFFFF);
- mousemes->tag=0;
- command->postMessageFromOuterSpace(mousemes);
- }
- }break;
+ case WM_KEYDOWN:
+ if (((RemoteWin*)remote)->ReceiveButtonVK(wparam)) {
+ return 0L; //We process that Key
+ } else {
+ return DefWindowProc(wind, msg, wparam, lparam);
+ }
+
+ break;
+ case WM_APPCOMMAND:
+ if (((RemoteWin*)remote)->ReceiveButtonAP(GET_APPCOMMAND_LPARAM(lparam))){
+ return TRUE; //yes we process that message
+ } else {
+ return DefWindowProc(wind, msg, wparam, lparam);
+ }
+
+ break;
+ case WM_INPUT:
+ if (remotefnc ) {
+ //only on XP!
+ LPRAWINPUT lpit;
+ UINT risize;
+ dynGetRawInputData((HRAWINPUT)lparam,RID_INPUT,NULL,&risize,sizeof(RAWINPUTHEADER));
+ lpit=(LPRAWINPUT)malloc(risize);
+ dynGetRawInputData((HRAWINPUT)lparam,RID_INPUT,lpit,&risize,sizeof(RAWINPUTHEADER));
+
+ if (lpit->header.dwType==RIM_TYPEHID && lpit->data.hid.dwSizeHid>=2) {
+ DWORD button=lpit->data.hid.bRawData[1] | (lpit->data.hid.bRawData[0]<< 8);
+ if (((RemoteWin*)remote)->ReceiveButtonRI(button)){
+ free(lpit);
+ return 0; //yes we process that message
+ }
+ }
+ free(lpit);
+ }
+ return DefWindowProc(wind, msg, wparam, lparam);
+
+
+ break;
+ case WM_COMMAND:
+ if (LOWORD(wparam)==VOMP_FULL_SCREEN) {
+ ToggleFullscreen();
+ return 0;
+ }
+ if (LOWORD(wparam)==VOMP_TOPMOST) {
+ ToggleTopmost();
+ return 0;
+ }
+ if (((RemoteWin*)remote)->ReceiveButtonAP(LOWORD(wparam))){
+ return 0; //yes we process that message
+ } else {
+ return DefWindowProc(wind, msg, wparam, lparam);
+ }
+
+ break;
+ case WM_SETCURSOR:
+ if (((HANDLE)wparam)==win) {
+ CursorUpdate();
+ return 1;
+ } else {
+ return DefWindowProc(wind, msg, wparam, lparam);
+ }
+ break;
+ case WM_SYSCOMMAND:
+ if (wparam==SC_MAXIMIZE) {
+ ToggleFullscreen();
+ return 0;
+ } else if (wparam==SC_SCREENSAVE || wparam==SC_MONITORPOWER) {
+ return 0;
+ } else {
+ return DefWindowProc(wind,msg,wparam, lparam);
+ }
+ break;
+ case WM_MOUSEMOVE: {
+
+ lastmousemove=timeGetTime();
+ SetCursor(LoadCursor(NULL,IDC_ARROW));
+ SetTimer(wind,VOMP_CURSORUPDATE,4500,NULL);
+ POINT mpos={GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam)};
+ ClientToScreen(wind,&mpos);
+ if (TranslateMousePosition(&mpos)) {
+ Message *mousemes=new Message();
+ mousemes->message=Message::MOUSE_MOVE;
+ mousemes->from=NULL;
+ mousemes->to=ViewMan::getInstance();
+ mousemes->parameter=(mpos.x & 0xFFFF)<< 16| (mpos.y & 0xFFFF);
+ mousemes->tag=0;
+ //command->postMessageFromOuterSpace(mousemes);
+ command->postMessageIfNotBusy(mousemes);
+ }
+
+ return 0;
+ //return DefWindowProc(wind,msg,wparam, lparam);
+ }
+ break;
+ case WM_TIMER:
+ if (wparam==VOMP_CURSORUPDATE) {
+ CursorUpdate();
+ return 0;
+ }
+ return DefWindowProc(wind, msg, wparam, lparam);
+
+ break;
+ case WM_CONTEXTMENU:
+ if (!ContextMenu(wind,GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam))) {
+ return DefWindowProc(wind, msg, wparam, lparam);
+ } else {
+ return 0;
+ }
+ break;
+ case WM_LBUTTONDOWN:{
+ POINT mpos={GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam)};
+ ClientToScreen(wind,&mpos);
+ if (TranslateMousePosition(&mpos)) {
+ Message *mousemes=new Message();
+ mousemes->message=Message::MOUSE_LBDOWN;
+ mousemes->from=NULL;
+ mousemes->to=ViewMan::getInstance();
+ mousemes->parameter=(mpos.x & 0xFFFF)<< 16| (mpos.y & 0xFFFF);
+ mousemes->tag=0;
+ command->postMessageFromOuterSpace(mousemes);
+ }
+ }break;
default:
return DefWindowProc(wind, msg, wparam, lparam);
}
bool InitApp(HINSTANCE hinst,int cmdshow) {
- /* main window */
- WNDCLASS wcs;
- DWORD flags;
- wcs.style = CS_HREDRAW | CS_VREDRAW;
+ /* main window */
+ WNDCLASS wcs;
+ DWORD flags;
+ wcs.style = CS_HREDRAW | CS_VREDRAW;
wcs.lpfnWndProc = WindowProc;
wcs.cbClsExtra = 0;
wcs.cbWndExtra = sizeof(DWORD);
wcs.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wcs.lpszMenuName = NULL;
wcs.lpszClassName = "vomp";
- acc=LoadAccelerators(hinst,MAKEINTRESOURCE(VOMPACCELERATOR));
- if (!RegisterClass(&wcs))
+ acc=LoadAccelerators(hinst,MAKEINTRESOURCE(VOMPACCELERATOR));
+ if (!RegisterClass(&wcs))
return false;
- flags =WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ flags =WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
|WS_MINIMIZEBOX | WS_SIZEBOX |WS_MAXIMIZEBOX;
- RECT wnted={50,50,768+50,576+50};
- AdjustWindowRect(&wnted,flags ,false);
- win_main=CreateWindow("vomp","VOMP on Windows",flags, CW_USEDEFAULT,CW_USEDEFAULT,
- wnted.right-wnted.left,wnted.bottom-wnted.top,NULL,NULL,hinst,NULL);
- if (!win_main)
+ RECT wnted={50,50,768+50,576+50};
+ AdjustWindowRect(&wnted,flags ,false);
+ win_main=CreateWindow("vomp","VOMP on Windows",flags, CW_USEDEFAULT,CW_USEDEFAULT,
+ wnted.right-wnted.left,wnted.bottom-wnted.top,NULL,NULL,hinst,NULL);
+ if (!win_main)
return FALSE;
- ShowWindow(win_main,SW_SHOWNORMAL);
+ ShowWindow(win_main,SW_SHOWNORMAL);
UpdateWindow(win_main);
- /* in order to handle letterboxing we use a child window */
- WNDCLASS child_wcs;
- child_wcs.style = CS_HREDRAW | CS_VREDRAW;
+ /* in order to handle letterboxing we use a child window */
+ WNDCLASS child_wcs;
+ child_wcs.style = CS_HREDRAW | CS_VREDRAW;
child_wcs.lpfnWndProc = WindowProc;
child_wcs.cbClsExtra = 0;
child_wcs.cbWndExtra = sizeof(DWORD);
child_wcs.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
child_wcs.lpszMenuName = NULL;
child_wcs.lpszClassName = "vomp_playback";
- if (!RegisterClass(&child_wcs))
+ if (!RegisterClass(&child_wcs))
return false;
- win=CreateWindow("vomp_playback","Vomp Playback Window",WS_VISIBLE | WS_CHILD |WS_CLIPCHILDREN,
- 0,0,768,576,win_main,NULL,hinst,NULL);
- if (!win)
- return FALSE;
- ShowWindow(win,SW_SHOWNORMAL);
- UpdateWindow(win);
- if (remotefnc) {//at least windows XP
- /* We want to support MCE Remote controls*/
- RAWINPUTDEVICE remote_control_data[4];
- ZeroMemory(remote_control_data,sizeof(remote_control_data));
- remote_control_data[0].usUsagePage=0xFFBC;
- remote_control_data[0].usUsage=0x88;
- remote_control_data[0].dwFlags=0;
- remote_control_data[1].usUsagePage=0x0C;
- remote_control_data[1].usUsage=0x80;
- remote_control_data[1].dwFlags=0;
- remote_control_data[2].usUsagePage=0x0C;
- remote_control_data[2].usUsage=0x01;
- remote_control_data[2].dwFlags=0;
- remote_control_data[3].usUsagePage=0x01;
- remote_control_data[3].usUsage=0x80;
- remote_control_data[3].dwFlags=0;
- if (dynRegisterRawInputDevices(remote_control_data,4,sizeof(remote_control_data[0]))!=TRUE) {
- MessageBox(0,"Registering remote control failed!","Aborting!",0);
- return FALSE;
- }
-
- }
- return TRUE;
+ win=CreateWindow("vomp_playback","Vomp Playback Window",WS_VISIBLE | WS_CHILD |WS_CLIPCHILDREN,
+ 0,0,768,576,win_main,NULL,hinst,NULL);
+ if (!win)
+ return FALSE;
+ ShowWindow(win,SW_SHOWNORMAL);
+ UpdateWindow(win);
+ if (remotefnc) {//at least windows XP
+ /* We want to support MCE Remote controls*/
+ RAWINPUTDEVICE remote_control_data[4];
+ ZeroMemory(remote_control_data,sizeof(remote_control_data));
+ remote_control_data[0].usUsagePage=0xFFBC;
+ remote_control_data[0].usUsage=0x88;
+ remote_control_data[0].dwFlags=0;
+ remote_control_data[1].usUsagePage=0x0C;
+ remote_control_data[1].usUsage=0x80;
+ remote_control_data[1].dwFlags=0;
+ remote_control_data[2].usUsagePage=0x0C;
+ remote_control_data[2].usUsage=0x01;
+ remote_control_data[2].dwFlags=0;
+ remote_control_data[3].usUsagePage=0x01;
+ remote_control_data[3].usUsage=0x80;
+ remote_control_data[3].dwFlags=0;
+ if (dynRegisterRawInputDevices(remote_control_data,4,sizeof(remote_control_data[0]))!=TRUE) {
+ MessageBox(0,"Registering remote control failed!","Aborting!",0);
+ return FALSE;
+ }
+
+ }
+ return TRUE;
}
ULLONG htonll(ULLONG a)
{
- return (((ULLONG)htonl((ULONG)((a<<32)>> 32))<<32)
- |(ULONG)htonl(((ULONG) (a >> 32))));
+ return (((ULLONG)htonl((ULONG)((a<<32)>> 32))<<32)
+ |(ULONG)htonl(((ULONG) (a >> 32))));
}
#endif