Changeset 158 for trunk/src


Ignore:
Timestamp:
Jun 22, 1999, 10:00:04 PM (26 years ago)
Author:
achimha
Message:

Ported latest DrawEdge from WINE, moved everything to new src/user32/uitools.cpp

Location:
trunk/src/user32
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/Makefile

    r131 r158  
    1 # $Id: Makefile,v 1.5 1999-06-20 14:02:13 sandervl Exp $
     1# $Id: Makefile,v 1.6 1999-06-22 20:00:03 achimha Exp $
    22
    33#
     
    2424        wndproc.obj wndsubproc.obj wndclass.obj dde.obj \
    2525        dlgconvert.obj icon.obj hook.obj hooks.obj menu.obj \
    26         usrcall.obj defwndproc.obj syscolor.obj  char.obj initterm.obj
     26        usrcall.obj defwndproc.obj syscolor.obj char.obj initterm.obj \
     27        uitools.obj
    2728
    2829
     
    6768wndclass.obj: wndclass.cpp \
    6869              $(PDWIN32_INCLUDE)\wndproc.h $(PDWIN32_INCLUDE)\wndclass.h
    69 
    7070initterm.obj: initterm.cpp
     71uitools.obj: uitools.cpp
    7172
    7273
  • trunk/src/user32/user32.cpp

    r143 r158  
    1 /* $Id: user32.cpp,v 1.12 1999-06-21 13:57:28 sandervl Exp $ */
     1/* $Id: user32.cpp,v 1.13 1999-06-22 20:00:04 achimha Exp $ */
    22
    33/*
     
    34263426}
    34273427//******************************************************************************
    3428 //Stolen from Wine (controls\uitools.c)
    3429 //******************************************************************************
    3430 BOOL DrawEdgeDiag(HDC hdc, RECT *rect, UINT edge, UINT flags)
    3431 {
    3432   HPEN facePen, shadowPen, lightPen, blackPen, grayPen, nullPen;
    3433   HPEN iPen, oPen, oldPen;
    3434   HBRUSH oldBrush, faceBrush;
    3435   int cl, cr, ct, cb;
    3436   BOOL mainDiag;
    3437   POINT tp;
    3438   RECT r;
    3439 
    3440   /* If both rasied and sunken is specified, they anihilate one another */
    3441   if( !((flags & BF_MONO) || (flags & BF_FLAT)) ){
    3442     if( (edge & BDR_RAISEDOUTER) && (edge & BDR_SUNKENOUTER) )
    3443       return FALSE;
    3444     if( (edge & BDR_RAISEDINNER) && (edge & BDR_SUNKENINNER) )
    3445       return FALSE;
    3446   }
    3447 
    3448   /* Create/get the tools of the trade... */
    3449   facePen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNFACE));
    3450   shadowPen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW));
    3451   lightPen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT));
    3452   grayPen = CreatePen(PS_SOLID, 0, RGB(168, 152, 144));
    3453   blackPen = GetStockObject(BLACK_PEN);
    3454   nullPen = GetStockObject(NULL_PEN);
    3455   faceBrush = GetSysColorBrush(COLOR_BTNFACE);
    3456   oldPen = SelectObject(hdc, nullPen);
    3457   oldBrush = SelectObject(hdc, faceBrush);
    3458 
    3459   /* this is my working rectangle */
    3460   r = *rect;
    3461 
    3462   if(flags & BF_MONO){
    3463     oPen = blackPen;
    3464     iPen = nullPen;
    3465   }else if(flags & BF_FLAT){
    3466     oPen = shadowPen;
    3467     iPen = facePen;
    3468   }else {
    3469     if(flags & BF_SOFT){
    3470       if(flags & BF_BOTTOM){
    3471     oPen = (edge & BDR_RAISEDOUTER) ? blackPen : lightPen;
    3472     iPen = (edge & BDR_RAISEDINNER) ? shadowPen : grayPen;
    3473       }
    3474       else{
    3475     oPen = (edge & BDR_RAISEDOUTER) ? lightPen : blackPen;
    3476     iPen = (edge & BDR_RAISEDINNER) ? grayPen : shadowPen;
    3477       }
    3478     }
    3479     else{
    3480       if(flags & BF_BOTTOM){
    3481     oPen = (edge & BDR_RAISEDOUTER) ? blackPen : lightPen;
    3482     iPen = (edge & BDR_RAISEDINNER) ? shadowPen : grayPen;
    3483       }
    3484       else{
    3485     oPen = (edge & BDR_RAISEDOUTER) ? grayPen : shadowPen;
    3486     iPen = (edge & BDR_RAISEDINNER) ? lightPen : blackPen;
    3487       }
    3488     }
    3489   }
    3490 
    3491   if(flags & BF_BOTTOM){
    3492     if(flags & BF_LEFT){
    3493       cr = -1; cl =  0;
    3494       ct =  0; cb = -1;
    3495       mainDiag = TRUE;
    3496       tp.x = r.left; tp.y = r.top;
    3497     }
    3498     else{ /* RIGHT */
    3499       cr = -1; cl =  0;
    3500       ct =  1; cb =  0;
    3501       tp.x = r.left; tp.y = r.bottom-1;
    3502       mainDiag = FALSE;
    3503     }
    3504   }
    3505   else{  /* TOP */
    3506     if(flags & BF_LEFT){
    3507       cr =  0; cl =  1;
    3508       ct =  0; cb = -1;
    3509       mainDiag = FALSE;
    3510       tp.x = r.right; tp.y = r.top;
    3511     }
    3512     else{ /* RIGHT */
    3513       cr =  0; cl =  1;
    3514       ct =  1; cb =  0;
    3515       tp.x = r.right; tp.y = r.bottom-1;
    3516       mainDiag = TRUE;
    3517     }
    3518   }
    3519 
    3520   /* if it has external edge, draw it */
    3521   if(edge & BDR_OUTER){
    3522     SelectObject(hdc, oPen);
    3523     MoveToEx(hdc, r.left, mainDiag ? r.bottom-1 : r.top, 0);
    3524     LineTo(hdc, r.right, mainDiag ? r.top-1 : r.bottom);
    3525     r.left += cl; r.right += cr; r.top += ct; r.bottom += cb;
    3526   }
    3527 
    3528   /* if it has internal edge, draw it */
    3529   if(edge & BDR_INNER){
    3530     SelectObject(hdc, iPen);
    3531     MoveToEx(hdc, r.left, mainDiag ? r.bottom-1 : r.top, 0);
    3532     LineTo(hdc, r.right, mainDiag ? r.top-1 : r.bottom);
    3533     r.left += cl; r.right += cr; r.top += ct; r.bottom += cb;
    3534   }
    3535 
    3536   if((flags & BF_MIDDLE) && !(flags & BF_MONO)){
    3537     POINT p[3];
    3538     p[0].x = mainDiag ? r.right: r.left;
    3539     p[0].y = r.top;
    3540     p[1].x = mainDiag ? r.left : r.right;
    3541     p[1].y = r.bottom;
    3542     p[2].x = tp.x;
    3543     p[2].y = tp.y;
    3544     SelectObject(hdc, nullPen);
    3545     SelectObject(hdc, faceBrush);
    3546     Polygon(hdc, p, 3);
    3547   }
    3548 
    3549   if(flags & BF_ADJUST)
    3550     *rect = r;
    3551 
    3552   /* Restore the DC */
    3553   SelectObject(hdc, oldPen);
    3554   SelectObject(hdc, oldBrush);
    3555 
    3556   /* Clean-up */
    3557   DeleteObject(facePen);
    3558   DeleteObject(shadowPen);
    3559   DeleteObject(lightPen);
    3560   DeleteObject(grayPen);
    3561 
    3562   return TRUE;
    3563 }
    3564 //******************************************************************************
    3565 //Stolen from Wine (controls\uitools.c)
    3566 //******************************************************************************
    3567 BOOL WIN32API DrawEdge(HDC hdc, LPRECT rect, UINT edge, UINT flags)
    3568 {
    3569   HBRUSH faceBrush, shadowBrush, lightBrush, blackBrush, grayBrush, nullBrush;
    3570   HBRUSH iNBrush, iSBrush, iEBrush, iWBrush;
    3571   HBRUSH oNBrush, oSBrush, oEBrush, oWBrush;
    3572   HBRUSH oldBrush;
    3573   POINT  point[2];
    3574   RECT r;
    3575 
    3576 #ifdef DEBUG
    3577   WriteLog("USER32:  DrawEdge %X %X, partially implemented\n", edge, flags);
    3578   WriteLog("USER32:  DrawEdge (%d,%d) (%d,%d)\n", rect->left, rect->top, rect->right, rect->bottom);
    3579 #endif
    3580 
    3581   if(flags & BF_DIAGONAL) {
    3582     return DrawEdgeDiag(hdc, rect, edge, flags);
    3583   }
    3584   /* If both rasied and sunken is specified, they anihilate one another */
    3585   if( !((flags & BF_MONO) || (flags & BF_FLAT)) ){
    3586     if( (edge & BDR_RAISEDOUTER) && (edge & BDR_SUNKENOUTER) )
    3587       return FALSE;
    3588     if( (edge & BDR_RAISEDINNER) && (edge & BDR_SUNKENINNER) )
    3589       return FALSE;
    3590   }
    3591 
    3592   faceBrush = GetSysColorBrush(COLOR_BTNFACE);
    3593   shadowBrush = GetSysColorBrush(COLOR_BTNSHADOW);
    3594   lightBrush = GetSysColorBrush(COLOR_BTNHILIGHT);
    3595   blackBrush = GetStockObject(BLACK_BRUSH);
    3596   grayBrush = GetStockObject(LTGRAY_BRUSH);
    3597   nullBrush = GetStockObject(NULL_BRUSH);
    3598   oldBrush = SelectObject(hdc, nullBrush);
    3599 
    3600   /* this is my working rectangle */
    3601   r = *rect;
    3602 
    3603   if(flags & BF_MONO){
    3604     oNBrush = oSBrush = oEBrush = oWBrush = blackBrush;
    3605     iNBrush = iSBrush = iEBrush = iWBrush = nullBrush;
    3606   }else if(flags & BF_FLAT){
    3607     oNBrush = oSBrush = oEBrush = oWBrush = shadowBrush;
    3608     iNBrush = iSBrush = iEBrush = iWBrush = faceBrush;
    3609   }else {
    3610     if(flags & BF_SOFT){
    3611       oNBrush = oWBrush = (edge & BDR_RAISEDOUTER) ? lightBrush  : blackBrush;
    3612       oSBrush = oEBrush = (edge & BDR_RAISEDOUTER) ? blackBrush  : lightBrush;
    3613       iNBrush = iWBrush = (edge & BDR_RAISEDINNER) ? grayBrush   : shadowBrush;
    3614       iSBrush = iEBrush = (edge & BDR_RAISEDINNER) ? shadowBrush : grayBrush;
    3615     }
    3616     else{
    3617       oNBrush = oWBrush = (edge & BDR_RAISEDOUTER) ? grayBrush   : shadowBrush;
    3618       oSBrush = oEBrush = (edge & BDR_RAISEDOUTER) ? blackBrush  : lightBrush;
    3619       iNBrush = iWBrush = (edge & BDR_RAISEDINNER) ? lightBrush  : blackBrush;
    3620       iSBrush = iEBrush = (edge & BDR_RAISEDINNER) ? shadowBrush : grayBrush;
    3621     }
    3622   }
    3623 
    3624   /* if it has external edge, draw it */
    3625   if(edge & BDR_OUTER){
    3626      if(flags & BF_RIGHT){
    3627        SelectObject(hdc, oEBrush);
    3628        PatBlt(hdc, r.right-1, r.top, 1, r.bottom - r.top, PATCOPY);
    3629        r.right--;
    3630      }
    3631      if(flags & BF_BOTTOM){
    3632        SelectObject(hdc, oSBrush);
    3633        PatBlt(hdc, r.left, r.bottom-1, r.right-r.left, 1, PATCOPY);
    3634        r.bottom--;
    3635      }
    3636      if(flags & BF_LEFT){
    3637        SelectObject(hdc, oWBrush);
    3638        PatBlt(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY);
    3639        r.left++;
    3640      }
    3641      if(flags & BF_TOP){
    3642        SelectObject(hdc, oNBrush);
    3643        PatBlt(hdc, r.left, r.top, r.right-r.left, 1, PATCOPY);
    3644        r.top++;
    3645      }
    3646   }
    3647 
    3648   /* if it has internal edge, draw it */
    3649   if(edge & BDR_INNER){
    3650      if(flags & BF_RIGHT){
    3651        SelectObject(hdc, iEBrush);
    3652        PatBlt(hdc, r.right-1, r.top, 1, r.bottom - r.top, PATCOPY);
    3653        r.right--;
    3654      }
    3655      if(flags & BF_BOTTOM){
    3656        SelectObject(hdc, iSBrush);
    3657        PatBlt(hdc, r.left, r.bottom-1, r.right-r.left, 1, PATCOPY);
    3658        r.bottom--;
    3659      }
    3660      if(flags & BF_LEFT){
    3661        SelectObject(hdc, iWBrush);
    3662        PatBlt(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY);
    3663        r.left++;
    3664      }
    3665      if(flags & BF_TOP){
    3666        SelectObject(hdc, iNBrush);
    3667        PatBlt(hdc, r.left, r.top, r.right-r.left, 1, PATCOPY);
    3668        r.top++;
    3669      }
    3670   }
    3671 
    3672   /* if we got to fill the middle, to it now */
    3673   if((flags & BF_MIDDLE) && !(flags & BF_MONO))
    3674     FillRect(hdc, &r, faceBrush);
    3675 
    3676   /* adjust the rectangle if required */
    3677   if(flags & BF_ADJUST)
    3678     *rect = r;
    3679 
    3680   /* Restore the DC */
    3681   SelectObject(hdc, oldBrush);
    3682 
    3683   return TRUE;
    3684 }
    3685 //******************************************************************************
    36863428//******************************************************************************
    36873429LRESULT WIN32API SendMessageTimeoutA(HWND hwnd, UINT Msg, WPARAM wParam,
Note: See TracChangeset for help on using the changeset viewer.