diff options
Diffstat (limited to 'otherlibs/win32graph/open.c')
-rw-r--r-- | otherlibs/win32graph/open.c | 320 |
1 files changed, 160 insertions, 160 deletions
diff --git a/otherlibs/win32graph/open.c b/otherlibs/win32graph/open.c index 08f5701f0..047e84c5b 100644 --- a/otherlibs/win32graph/open.c +++ b/otherlibs/win32graph/open.c @@ -55,156 +55,156 @@ HFONT CreationFont(char *name) void SetCoordinates(HWND hwnd) { - RECT rc; + RECT rc; - GetClientRect(hwnd,&rc); - grwindow.width = rc.right; - grwindow.height = rc.bottom; - gr_reset(); + GetClientRect(hwnd,&rc); + grwindow.width = rc.right; + grwindow.height = rc.bottom; + gr_reset(); } void ResetForClose(HWND hwnd) { - DeleteObject(grwindow.hBitmap); - memset(&grwindow,0,sizeof(grwindow)); + DeleteObject(grwindow.hBitmap); + memset(&grwindow,0,sizeof(grwindow)); } - + static LRESULT CALLBACK GraphicsWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { - PAINTSTRUCT ps; - HDC hdc; - - switch (msg) { - // Create the MDI client invisible window - case WM_CREATE: - break; - case WM_PAINT: - hdc = BeginPaint(hwnd,&ps); - BitBlt(hdc,0,0,grwindow.width,grwindow.height, - grwindow.gcBitmap,0,0,SRCCOPY); - EndPaint(hwnd,&ps); - break; - // Move the child windows - case WM_SIZE: - // Position the MDI client window between the tool and status bars - if (wParam != SIZE_MINIMIZED) { - SetCoordinates(hwnd); - } - - return 0; - // End application - case WM_DESTROY: - ResetForClose(hwnd); - break; - case WM_LBUTTONDOWN: - MouseLbuttonDown = 1; - break; - case WM_LBUTTONUP: - MouseLbuttonDown = 0; - break; - case WM_RBUTTONDOWN: - MouseRbuttonDown = 1; - break; - case WM_RBUTTONUP: - MouseRbuttonDown = 0; - break; - case WM_MBUTTONDOWN: - MouseMbuttonDown = 1; - break; - case WM_MBUTTONUP: - MouseMbuttonDown = 0; - break; - case WM_CHAR: + PAINTSTRUCT ps; + HDC hdc; + + switch (msg) { + // Create the MDI client invisible window + case WM_CREATE: + break; + case WM_PAINT: + hdc = BeginPaint(hwnd,&ps); + BitBlt(hdc,0,0,grwindow.width,grwindow.height, + grwindow.gcBitmap,0,0,SRCCOPY); + EndPaint(hwnd,&ps); + break; + // Move the child windows + case WM_SIZE: + // Position the MDI client window between the tool and status bars + if (wParam != SIZE_MINIMIZED) { + SetCoordinates(hwnd); + } + + return 0; + // End application + case WM_DESTROY: + ResetForClose(hwnd); + break; + case WM_LBUTTONDOWN: + MouseLbuttonDown = 1; + break; + case WM_LBUTTONUP: + MouseLbuttonDown = 0; + break; + case WM_RBUTTONDOWN: + MouseRbuttonDown = 1; + break; + case WM_RBUTTONUP: + MouseRbuttonDown = 0; + break; + case WM_MBUTTONDOWN: + MouseMbuttonDown = 1; + break; + case WM_MBUTTONUP: + MouseMbuttonDown = 0; + break; + case WM_CHAR: LastKey = wParam & 0xFF; break; - case WM_KEYUP: + case WM_KEYUP: LastKey = -1; break; - case WM_MOUSEMOVE: + case WM_MOUSEMOVE: #if 0 - pt.x = GET_X_LPARAM(lParam); - pt.y = GET_Y_LPARAM(lParam); - MapWindowPoints(HWND_DESKTOP,grwindow.hwnd,&pt,1); - MouseLastX = pt.x; - MouseLastY = grwindow.height - 1 - pt.y; + pt.x = GET_X_LPARAM(lParam); + pt.y = GET_Y_LPARAM(lParam); + MapWindowPoints(HWND_DESKTOP,grwindow.hwnd,&pt,1); + MouseLastX = pt.x; + MouseLastY = grwindow.height - 1 - pt.y; #else - MouseLastX = GET_X_LPARAM(lParam); - MouseLastY = grwindow.height - 1 - GET_Y_LPARAM(lParam); + MouseLastX = GET_X_LPARAM(lParam); + MouseLastY = grwindow.height - 1 - GET_Y_LPARAM(lParam); #endif - break; - } - return DefWindowProc(hwnd,msg,wParam,lParam); + break; + } + return DefWindowProc(hwnd,msg,wParam,lParam); } int DoRegisterClass(void) { - WNDCLASS wc; - - memset(&wc,0,sizeof(WNDCLASS)); - wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS|CS_OWNDC ; - wc.lpfnWndProc = (WNDPROC)GraphicsWndProc; - wc.hInstance = hInst; - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wc.lpszClassName = szOcamlWindowClass; - wc.lpszMenuName = 0; - wc.hCursor = LoadCursor(NULL,IDC_ARROW); - wc.hIcon = 0; - return RegisterClass(&wc); + WNDCLASS wc; + + memset(&wc,0,sizeof(WNDCLASS)); + wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS|CS_OWNDC ; + wc.lpfnWndProc = (WNDPROC)GraphicsWndProc; + wc.hInstance = hInst; + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wc.lpszClassName = szOcamlWindowClass; + wc.lpszMenuName = 0; + wc.hCursor = LoadCursor(NULL,IDC_ARROW); + wc.hIcon = 0; + return RegisterClass(&wc); } static value gr_reset(void) { - RECT rc; - int screenx,screeny; - - screenx = GetSystemMetrics(SM_CXSCREEN); - screeny = GetSystemMetrics(SM_CYSCREEN); - GetClientRect(grwindow.hwnd,&rc); - grwindow.gc = GetDC(grwindow.hwnd); - grwindow.width = rc.right; - grwindow.height = rc.bottom; - if (grwindow.gcBitmap == (HDC)0) { -// grwindow.hBitmap = CreateCompatibleBitmap(grwindow.gc,grwindow.width,grwindow.height); - grwindow.hBitmap = CreateCompatibleBitmap(grwindow.gc,screenx,screeny); - grwindow.gcBitmap = CreateCompatibleDC(grwindow.gc); - grwindow.tempDC = CreateCompatibleDC(grwindow.gc); - SelectObject(grwindow.gcBitmap,grwindow.hBitmap); - SetMapMode(grwindow.gcBitmap,MM_TEXT); - MoveToEx(grwindow.gcBitmap,0,grwindow.height-1,0); - BitBlt(grwindow.gcBitmap,0,0,screenx,screeny, - grwindow.gcBitmap,0,0,WHITENESS); - grwindow.CurrentFontSize = 15; - grwindow.CurrentFont = CreationFont("Courier"); - } - grwindow.CurrentColor = GetSysColor(COLOR_WINDOWTEXT); - grwindow.grx = 0; - grwindow.gry = 0; - grwindow.CurrentPen = SelectObject(grwindow.gc,GetStockObject(WHITE_PEN)); - SelectObject(grwindow.gc,grwindow.CurrentPen); - SelectObject(grwindow.gcBitmap,grwindow.CurrentPen); - grwindow.CurrentBrush = SelectObject(grwindow.gc,GetStockObject(WHITE_BRUSH)); - SelectObject(grwindow.gc,grwindow.CurrentBrush); - SelectObject(grwindow.gcBitmap,grwindow.CurrentBrush); - SelectObject(grwindow.gc,grwindow.CurrentFont); - SelectObject(grwindow.gcBitmap,grwindow.CurrentFont); - grdisplay_mode = grremember_mode = 1; - MoveToEx(grwindow.gc,0,grwindow.height-1,0); - MoveToEx(grwindow.gcBitmap,0,grwindow.height-1,0); - SetTextAlign(grwindow.gcBitmap,TA_BOTTOM); - SetTextAlign(grwindow.gc,TA_BOTTOM); - return Val_unit; + RECT rc; + int screenx,screeny; + + screenx = GetSystemMetrics(SM_CXSCREEN); + screeny = GetSystemMetrics(SM_CYSCREEN); + GetClientRect(grwindow.hwnd,&rc); + grwindow.gc = GetDC(grwindow.hwnd); + grwindow.width = rc.right; + grwindow.height = rc.bottom; + if (grwindow.gcBitmap == (HDC)0) { +// grwindow.hBitmap = CreateCompatibleBitmap(grwindow.gc,grwindow.width,grwindow.height); + grwindow.hBitmap = CreateCompatibleBitmap(grwindow.gc,screenx,screeny); + grwindow.gcBitmap = CreateCompatibleDC(grwindow.gc); + grwindow.tempDC = CreateCompatibleDC(grwindow.gc); + SelectObject(grwindow.gcBitmap,grwindow.hBitmap); + SetMapMode(grwindow.gcBitmap,MM_TEXT); + MoveToEx(grwindow.gcBitmap,0,grwindow.height-1,0); + BitBlt(grwindow.gcBitmap,0,0,screenx,screeny, + grwindow.gcBitmap,0,0,WHITENESS); + grwindow.CurrentFontSize = 15; + grwindow.CurrentFont = CreationFont("Courier"); + } + grwindow.CurrentColor = GetSysColor(COLOR_WINDOWTEXT); + grwindow.grx = 0; + grwindow.gry = 0; + grwindow.CurrentPen = SelectObject(grwindow.gc,GetStockObject(WHITE_PEN)); + SelectObject(grwindow.gc,grwindow.CurrentPen); + SelectObject(grwindow.gcBitmap,grwindow.CurrentPen); + grwindow.CurrentBrush = SelectObject(grwindow.gc,GetStockObject(WHITE_BRUSH)); + SelectObject(grwindow.gc,grwindow.CurrentBrush); + SelectObject(grwindow.gcBitmap,grwindow.CurrentBrush); + SelectObject(grwindow.gc,grwindow.CurrentFont); + SelectObject(grwindow.gcBitmap,grwindow.CurrentFont); + grdisplay_mode = grremember_mode = 1; + MoveToEx(grwindow.gc,0,grwindow.height-1,0); + MoveToEx(grwindow.gcBitmap,0,grwindow.height-1,0); + SetTextAlign(grwindow.gcBitmap,TA_BOTTOM); + SetTextAlign(grwindow.gc,TA_BOTTOM); + return Val_unit; } void SuspendGraphicThread(void) { - SuspendThread(threadHandle); + SuspendThread(threadHandle); } void ResumeGraphicThread(void) { - ResumeThread(threadHandle); + ResumeThread(threadHandle); } /* For handshake between the event handling thread and the main thread */ @@ -232,17 +232,17 @@ static DWORD WINAPI gr_open_graph_internal(value arg) if (!registered) { registered = DoRegisterClass(); if (!registered) { - open_graph_errmsg = "Cannot register the window class"; - SetEvent(open_graph_event); - return 1; + open_graph_errmsg = "Cannot register the window class"; + SetEvent(open_graph_event); + return 1; } } grwindow.hwnd = CreateWindow(szOcamlWindowClass, - WINDOW_NAME, - WS_OVERLAPPEDWINDOW, - x,y, - w,h, - NULL,0,hInst,NULL); + WINDOW_NAME, + WS_OVERLAPPEDWINDOW, + x,y, + w,h, + NULL,0,hInst,NULL); if (grwindow.hwnd == NULL) { open_graph_errmsg = "Cannot create window"; SetEvent(open_graph_event); @@ -295,9 +295,9 @@ CAMLprim value gr_open_graph(value arg) open_graph_event = CreateEvent(NULL, FALSE, FALSE, NULL); threadHandle = CreateThread(NULL,0, - (LPTHREAD_START_ROUTINE)gr_open_graph_internal,(void **)arg, - 0, - &tid); + (LPTHREAD_START_ROUTINE)gr_open_graph_internal,(void **)arg, + 0, + &tid); WaitForSingleObject(open_graph_event, INFINITE); CloseHandle(open_graph_event); if (open_graph_errmsg != NULL) gr_fail("%s", open_graph_errmsg); @@ -306,70 +306,70 @@ CAMLprim value gr_open_graph(value arg) CAMLprim value gr_close_graph(void) { - if (gr_initialized) { - DeleteDC(grwindow.tempDC); - DeleteDC(grwindow.gcBitmap); - DestroyWindow(grwindow.hwnd); - memset(&grwindow,0,sizeof(grwindow)); - gr_initialized = 0; - } - return Val_unit; + if (gr_initialized) { + DeleteDC(grwindow.tempDC); + DeleteDC(grwindow.gcBitmap); + DestroyWindow(grwindow.hwnd); + memset(&grwindow,0,sizeof(grwindow)); + gr_initialized = 0; + } + return Val_unit; } CAMLprim value gr_clear_graph(void) { - gr_check_open(); - if(grremember_mode) { - BitBlt(grwindow.gcBitmap,0,0,grwindow.width,grwindow.height, - grwindow.gcBitmap,0,0,WHITENESS); - } - if(grdisplay_mode) { - BitBlt(grwindow.gc,0,0,grwindow.width,grwindow.height, - grwindow.gc,0,0,WHITENESS); - } - return Val_unit; + gr_check_open(); + if(grremember_mode) { + BitBlt(grwindow.gcBitmap,0,0,grwindow.width,grwindow.height, + grwindow.gcBitmap,0,0,WHITENESS); + } + if(grdisplay_mode) { + BitBlt(grwindow.gc,0,0,grwindow.width,grwindow.height, + grwindow.gc,0,0,WHITENESS); + } + return Val_unit; } CAMLprim value gr_size_x(void) { - gr_check_open(); - return Val_int(grwindow.width); + gr_check_open(); + return Val_int(grwindow.width); } CAMLprim value gr_size_y(void) { - gr_check_open(); - return Val_int(grwindow.height); + gr_check_open(); + return Val_int(grwindow.height); } CAMLprim value gr_synchronize(void) { - gr_check_open(); - BitBlt(grwindow.gc,0,0,grwindow.width,grwindow.height, - grwindow.gcBitmap,0,0,SRCCOPY); - return Val_unit ; + gr_check_open(); + BitBlt(grwindow.gc,0,0,grwindow.width,grwindow.height, + grwindow.gcBitmap,0,0,SRCCOPY); + return Val_unit ; } CAMLprim value gr_display_mode(value flag) { - grdisplay_mode = (Int_val(flag)) ? 1 : 0; - return Val_unit ; + grdisplay_mode = (Int_val(flag)) ? 1 : 0; + return Val_unit ; } CAMLprim value gr_remember_mode(value flag) { - grremember_mode = (Int_val(flag)) ? 1 : 0; - return Val_unit ; + grremember_mode = (Int_val(flag)) ? 1 : 0; + return Val_unit ; } CAMLprim value gr_sigio_signal(value unit) { - return Val_unit; + return Val_unit; } CAMLprim value gr_sigio_handler(void) { - return Val_unit; + return Val_unit; } |