Changeset 1248 for trunk/src/user32/pmframe.cpp
- Timestamp:
- Oct 11, 1999, 6:04:52 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/pmframe.cpp
r1209 r1248 1 /* $Id: pmframe.cpp,v 1. 3 1999-10-09 09:45:27 sandervlExp $ */1 /* $Id: pmframe.cpp,v 1.4 1999-10-11 16:04:51 cbratschi Exp $ */ 2 2 /* 3 3 * Win32 Frame Managment Code for OS/2 … … 21 21 #include "wprocess.h" 22 22 #include "pmframe.h" 23 #include "oslibutil.h" 24 25 #define PMFRAMELOG 26 27 VOID Draw3DRect(HPS hps,RECTL rect,LONG colorBR,LONG colorTL) 28 { 29 POINTL point; 30 31 GpiSetColor(hps,colorBR); 32 point.x = rect.xLeft; 33 point.y = rect.yBottom; 34 GpiMove(hps,&point); 35 point.x = rect.xRight-1; 36 GpiLine(hps,&point); 37 point.y = rect.yTop-1; 38 GpiLine(hps,&point); 39 GpiSetColor(hps,colorTL); 40 point.x--; 41 GpiMove(hps,&point); 42 point.x = rect.xLeft; 43 GpiLine(hps,&point); 44 point.y = rect.yBottom+1; 45 GpiLine(hps,&point); 46 } 47 48 VOID DeflateRect(RECTL *rect) 49 { 50 rect->xLeft++; 51 rect->xRight--; 52 rect->yTop--; 53 rect->yBottom++; 54 } 55 56 VOID DrawFrame(HPS hps,RECTL *rect,Win32BaseWindow *win32wnd) 57 { 58 LONG clrWhite,clrBlack,clrDark,clrLight; 59 POINTL point; 60 DWORD dwExStyle = win32wnd->getExStyle(); 61 DWORD dwStyle = win32wnd->getStyle(); 62 63 clrWhite = CLR_WHITE; 64 clrBlack = CLR_BLACK; 65 clrLight = CLR_PALEGRAY; 66 clrDark = CLR_DARKGRAY; 67 68 if (dwExStyle & WS_EX_CLIENTEDGE_W) 69 { 70 Draw3DRect(hps,*rect,clrWhite,clrDark); 71 DeflateRect(rect); 72 Draw3DRect(hps,*rect,clrLight,clrBlack); 73 } else if (dwExStyle & WS_EX_DLGMODALFRAME_W) 74 { 75 Draw3DRect(hps,*rect,clrBlack,clrLight); 76 DeflateRect(rect); 77 Draw3DRect(hps,*rect,clrDark,clrWhite); 78 DeflateRect(rect); 79 Draw3DRect(hps,*rect,clrLight,clrLight); 80 } else if (dwExStyle & WS_EX_STATICEDGE_W) 81 { 82 Draw3DRect(hps,*rect,clrWhite,clrDark); 83 } else if (dwExStyle & WS_EX_WINDOWEDGE_W); 84 else if (dwStyle & WS_BORDER_W) 85 { 86 Draw3DRect(hps,*rect,clrBlack,clrBlack); 87 } 88 89 DeflateRect(rect); 90 } 91 92 BOOL CanDrawSizeBox(Win32BaseWindow *win32wnd) 93 { 94 return (!win32wnd->isChild() && WinQueryWindowULong(win32wnd->getOS2FrameWindowHandle(),QWL_STYLE) & FS_SIZEBORDER 95 && win32wnd->getVertScrollHandle() && WinQueryWindow(win32wnd->getVertScrollHandle(),QW_PARENT) == win32wnd->getOS2FrameWindowHandle() 96 && win32wnd->getHorzScrollHandle() && WinQueryWindow(win32wnd->getHorzScrollHandle(),QW_PARENT) == win32wnd->getOS2FrameWindowHandle()); 97 } 98 99 VOID GetSizeBox(Win32BaseWindow *win32wnd,RECTL *rect) 100 { 101 SWP swpHorz,swpVert; 102 103 WinQueryWindowPos(win32wnd->getVertScrollHandle(),&swpVert); 104 WinQueryWindowPos(win32wnd->getHorzScrollHandle(),&swpHorz); 105 rect->xLeft = swpVert.x; 106 rect->xRight = swpVert.x+swpVert.cx; 107 rect->yTop = swpHorz.y+swpHorz.cy; 108 rect->yBottom = swpHorz.y; 109 } 110 111 BOOL InSizeBox(Win32BaseWindow *win32wnd,POINTS *points) 112 { 113 if (CanDrawSizeBox(win32wnd)) 114 { 115 RECTL rect; 116 POINTL point; 117 118 point.x = points->x; 119 point.y = points->y; 120 GetSizeBox(win32wnd,&rect); 121 return (WinPtInRect(GetThreadHAB(),&rect,&point)); 122 } 123 124 return FALSE; 125 } 126 127 VOID DrawSizeBox(HPS hps,RECTL rect) 128 { 129 POINTL p1,p2; 130 LONG clrDark = CLR_DARKGRAY,clrWhite = CLR_WHITE; 131 INT x; 132 133 WinFillRect(hps,&rect,SYSCLR_DIALOGBACKGROUND); 134 p1.x = rect.xRight-2; 135 p1.y = rect.yBottom; 136 p2.x = rect.xRight-1; 137 p2.y = rect.yBottom+1; 138 for (x = 0;x < 3;x++) 139 { 140 GpiSetColor(hps,clrDark); 141 GpiMove(hps,&p1); 142 GpiLine(hps,&p2); 143 p1.x--; 144 p2.y++; 145 GpiMove(hps,&p1); 146 GpiLine(hps,&p2); 147 GpiSetColor(hps,clrWhite); 148 p1.x--; 149 p2.y++; 150 GpiMove(hps,&p1); 151 GpiLine(hps,&p2); 152 p1.x -= 2; 153 p2.y += 2; 154 } 155 } 23 156 24 157 //****************************************************************************** … … 45 178 { 46 179 case WM_DESTROY: 180 #ifdef PMFRAMELOG 181 dprintf(("PMFRAME: WM_DESTROY")); 182 #endif 47 183 WinSubclassWindow(hwnd,OldFrameProc); 48 184 win32wnd->setOldFrameProc(NULL); 49 185 goto RunDefFrameProc; 50 186 187 case WM_MOUSEMOVE: 188 #ifdef PMFRAMELOG 189 dprintf(("PMFRAME: WM_MOUSEMOVE")); 190 #endif 191 if (InSizeBox(win32wnd,(POINTS*)&mp1)) 192 { 193 WinSetPointer(HWND_DESKTOP,WinQuerySysPointer(HWND_DESKTOP,SPTR_SIZENWSE,FALSE)); 194 RestoreOS2TIB(); 195 return (MRESULT)TRUE; 196 } else if (win32wnd->isChild()) goto RunDefWndProc; 197 else goto RunDefFrameProc; 198 199 case WM_BUTTON1DOWN: 200 #ifdef PMFRAMELOG 201 dprintf(("PMFRAME: WM_BUTTON1DOWN")); 202 #endif 203 if (InSizeBox(win32wnd,(POINTS*)&mp1)) 204 { 205 WinSendMsg(hwnd,WM_TRACKFRAME,(MPARAM)(TF_RIGHT | TF_BOTTOM),(MPARAM)0); 206 RestoreOS2TIB(); 207 return (MRESULT)TRUE; 208 } else if (win32wnd->isChild()) goto RunDefWndProc; 209 else goto RunDefFrameProc; 210 211 case WM_BUTTON2DOWN: 212 case WM_BUTTON3DOWN: 213 #ifdef PMFRAMELOG 214 dprintf(("PMFRAME: WM_BUTTON2/3DOWN")); 215 #endif 216 if (win32wnd->isChild()) goto RunDefWndProc; 217 else goto RunDefFrameProc; 218 219 case WM_ACTIVATE: 220 #ifdef PMFRAMELOG 221 dprintf(("PMFRAME: WM_ACTIVATE")); 222 #endif 223 if (!win32wnd->isChild()) 224 { 225 if (CanDrawSizeBox(win32wnd)) 226 { 227 MRESULT res; 228 HPS hps; 229 RECTL rect; 230 231 RestoreOS2TIB(); 232 res = OldFrameProc(hwnd,msg,mp1,mp2); 233 SetWin32TIB(); 234 235 GetSizeBox(win32wnd,&rect); 236 hps = WinGetPS(hwnd); 237 DrawSizeBox(hps,rect); 238 WinReleasePS(hps); 239 240 RestoreOS2TIB(); 241 return res; 242 } else goto RunDefFrameProc; 243 } else 244 { 245 MRESULT res; 246 HPS hps; 247 RECTL rect; 248 249 RestoreOS2TIB(); 250 res = OldFrameProc(hwnd,msg,mp1,mp2); 251 SetWin32TIB(); 252 253 hps = WinGetClipPS(hwnd,0,PSF_CLIPCHILDREN); 254 WinQueryWindowRect(hwnd,&rect); 255 DrawFrame(hps,&rect,win32wnd); 256 WinFillRect(hps,&rect,SYSCLR_DIALOGBACKGROUND); 257 WinReleasePS(hps); 258 259 RestoreOS2TIB(); 260 return res; 261 } 262 51 263 case WM_PAINT: 52 //CB: todo 264 #ifdef PMFRAMELOG 265 dprintf(("PMFRAME: WM_PAINT")); 266 #endif 267 if (!win32wnd->isChild()) 268 { 269 if (CanDrawSizeBox(win32wnd)) 270 { 271 MRESULT res; 272 HPS hps; 273 RECTL rect; 274 275 RestoreOS2TIB(); 276 res = OldFrameProc(hwnd,msg,mp1,mp2); 277 SetWin32TIB(); 278 279 GetSizeBox(win32wnd,&rect); 280 hps = WinGetPS(hwnd); 281 DrawSizeBox(hps,rect); 282 WinReleasePS(hps); 283 284 RestoreOS2TIB(); 285 return res; 286 } else goto RunDefFrameProc; 287 } else 288 { 289 RECTL rect; 290 HPS hps = WinBeginPaint(hwnd,0,&rect); 291 292 DrawFrame(hps,&rect,win32wnd); 293 WinFillRect(hps,&rect,SYSCLR_DIALOGBACKGROUND); 294 WinEndPaint(hps); 295 296 RestoreOS2TIB(); 297 return (MRESULT)0; 298 } 53 299 54 300 default: … … 74 320 } 75 321 76 VOID FrameSetBorderSize(Win32BaseWindow *win32wnd) 77 { 322 VOID FrameGetBorderSize(Win32BaseWindow *win32wnd,PWPOINT pSize) 323 { 324 WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_QUERYBORDERSIZE,(MPARAM)pSize,(MPARAM)0); 325 } 326 327 VOID FrameSetBorderSize(Win32BaseWindow *win32wnd,BOOL resize) 328 { 329 POINTL point; 330 331 if (!resize) 332 { 333 WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_SETBORDERSIZE,(MPARAM)win32wnd->getBorderWidth(),(MPARAM)win32wnd->getBorderHeight()); 334 335 return; 336 } 337 338 FrameGetBorderSize(win32wnd,&point); 78 339 WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_SETBORDERSIZE,(MPARAM)win32wnd->getBorderWidth(),(MPARAM)win32wnd->getBorderHeight()); 79 } 340 if (point.x != win32wnd->getBorderWidth() || point.y != win32wnd->getBorderHeight()) 341 { 342 INT xDiff = win32wnd->getBorderWidth()-point.x; 343 INT yDiff = win32wnd->getBorderHeight()-point.y; 344 SWP swp; 345 346 WinQueryWindowPos(win32wnd->getOS2FrameWindowHandle(),&swp); 347 swp.x += xDiff; 348 swp.y += yDiff; 349 swp.cx -= 2*xDiff; 350 swp.cy -= 2*yDiff; 351 WinSetWindowPos(win32wnd->getOS2FrameWindowHandle(),0,swp.x,swp.y,swp.cx,swp.cy,SWP_MOVE | SWP_SIZE); 352 } 353 } 354 355 UINT FrameGetDefSizeBorderSize(VOID) 356 { 357 return WinQuerySysValue(HWND_DESKTOP,SV_CXSIZEBORDER); 358 }
Note:
See TracChangeset
for help on using the changeset viewer.