Ignore:
Timestamp:
Oct 11, 1999, 6:04:52 PM (26 years ago)
Author:
cbratschi
Message:

pmframe finished

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 sandervl Exp $ */
     1/* $Id: pmframe.cpp,v 1.4 1999-10-11 16:04:51 cbratschi Exp $ */
    22/*
    33 * Win32 Frame Managment Code for OS/2
     
    2121#include "wprocess.h"
    2222#include "pmframe.h"
     23#include "oslibutil.h"
     24
     25#define PMFRAMELOG
     26
     27VOID 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
     48VOID DeflateRect(RECTL *rect)
     49{
     50  rect->xLeft++;
     51  rect->xRight--;
     52  rect->yTop--;
     53  rect->yBottom++;
     54}
     55
     56VOID 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
     92BOOL 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
     99VOID 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
     111BOOL 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
     127VOID 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}
    23156
    24157//******************************************************************************
     
    45178  {
    46179    case WM_DESTROY:
     180      #ifdef PMFRAMELOG
     181       dprintf(("PMFRAME: WM_DESTROY"));
     182      #endif
    47183      WinSubclassWindow(hwnd,OldFrameProc);
    48184      win32wnd->setOldFrameProc(NULL);
    49185      goto RunDefFrameProc;
    50186
     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
    51263    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      }
    53299
    54300    default:
     
    74320}
    75321
    76 VOID FrameSetBorderSize(Win32BaseWindow *win32wnd)
    77 {
     322VOID FrameGetBorderSize(Win32BaseWindow *win32wnd,PWPOINT pSize)
     323{
     324  WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_QUERYBORDERSIZE,(MPARAM)pSize,(MPARAM)0);
     325}
     326
     327VOID 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);
    78339  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
     355UINT FrameGetDefSizeBorderSize(VOID)
     356{
     357  return WinQuerySysValue(HWND_DESKTOP,SV_CXSIZEBORDER);
     358}
Note: See TracChangeset for help on using the changeset viewer.