Moved some window painting functions to uitools.c.
This commit is contained in:
parent
b0394dea42
commit
f56c6fb9b2
|
@ -45,7 +45,6 @@ C_SRCS = \
|
||||||
$(TOPOBJDIR)/windows/winpos.c \
|
$(TOPOBJDIR)/windows/winpos.c \
|
||||||
$(TOPOBJDIR)/windows/winproc.c \
|
$(TOPOBJDIR)/windows/winproc.c \
|
||||||
button.c \
|
button.c \
|
||||||
cache.c \
|
|
||||||
caret.c \
|
caret.c \
|
||||||
combo.c \
|
combo.c \
|
||||||
dde/client.c \
|
dde/client.c \
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
* Wine internally cached objects to speedup some things and prevent
|
|
||||||
* infinite duplication of trivial code and data.
|
|
||||||
*
|
|
||||||
* Copyright 1997 Bertho A. Stultiens
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#include "windef.h"
|
|
||||||
#include "winbase.h"
|
|
||||||
#include "wingdi.h"
|
|
||||||
#include "user.h"
|
|
||||||
|
|
||||||
static const WORD wPattern55AA[] =
|
|
||||||
{
|
|
||||||
0x5555, 0xaaaa, 0x5555, 0xaaaa,
|
|
||||||
0x5555, 0xaaaa, 0x5555, 0xaaaa
|
|
||||||
};
|
|
||||||
|
|
||||||
static HBRUSH hPattern55AABrush = 0;
|
|
||||||
static HBITMAP hPattern55AABitmap = 0;
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* CACHE_GetPattern55AABrush
|
|
||||||
*/
|
|
||||||
HBRUSH CACHE_GetPattern55AABrush(void)
|
|
||||||
{
|
|
||||||
if (!hPattern55AABrush)
|
|
||||||
{
|
|
||||||
hPattern55AABitmap = CreateBitmap( 8, 8, 1, 1, wPattern55AA );
|
|
||||||
hPattern55AABrush = CreatePatternBrush( hPattern55AABitmap );
|
|
||||||
}
|
|
||||||
return hPattern55AABrush;
|
|
||||||
}
|
|
|
@ -70,6 +70,9 @@ extern void SCROLL_TrackScrollBar( HWND hwnd, INT scrollbar, POINT pt );
|
||||||
extern INT SCROLL_SetNCSbState( HWND hwnd, int vMin, int vMax, int vPos,
|
extern INT SCROLL_SetNCSbState( HWND hwnd, int vMin, int vMax, int vPos,
|
||||||
int hMin, int hMax, int hPos );
|
int hMin, int hMax, int hPos );
|
||||||
|
|
||||||
|
/* UI tools */
|
||||||
|
extern HBRUSH UITOOLS_GetPattern55AABrush(void);
|
||||||
|
|
||||||
/* combo box */
|
/* combo box */
|
||||||
|
|
||||||
#define ID_CB_LISTBOX 1000
|
#define ID_CB_LISTBOX 1000
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "wownt32.h"
|
#include "wownt32.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
|
#include "controls.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(text);
|
WINE_DEFAULT_DEBUG_CHANNEL(text);
|
||||||
|
@ -1148,7 +1149,7 @@ static BOOL TEXT_GrayString(HDC hdc, HBRUSH hb, GRAYSTRINGPROC fn, LPARAM lp, IN
|
||||||
if(retval || len != -1)
|
if(retval || len != -1)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
hbsave = (HBRUSH)SelectObject(memdc, CACHE_GetPattern55AABrush());
|
hbsave = (HBRUSH)SelectObject(memdc, UITOOLS_GetPattern55AABrush());
|
||||||
PatBlt(memdc, 0, 0, cx, cy, 0x000A0329);
|
PatBlt(memdc, 0, 0, cx, cy, 0x000A0329);
|
||||||
SelectObject(memdc, hbsave);
|
SelectObject(memdc, hbsave);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,12 +27,19 @@
|
||||||
#include "wine/winuser16.h"
|
#include "wine/winuser16.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
|
#include "wine/unicode.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(graphics);
|
WINE_DEFAULT_DEBUG_CHANNEL(graphics);
|
||||||
|
|
||||||
static const WORD wPattern_AA55[8] = { 0xaaaa, 0x5555, 0xaaaa, 0x5555,
|
static const WORD wPattern55AA[] =
|
||||||
0xaaaa, 0x5555, 0xaaaa, 0x5555 };
|
{
|
||||||
|
0x5555, 0xaaaa, 0x5555, 0xaaaa,
|
||||||
|
0x5555, 0xaaaa, 0x5555, 0xaaaa
|
||||||
|
};
|
||||||
|
|
||||||
|
static HBRUSH hPattern55AABrush;
|
||||||
|
static HBITMAP hPattern55AABitmap;
|
||||||
|
|
||||||
/* These tables are used in:
|
/* These tables are used in:
|
||||||
* UITOOLS_DrawDiagEdge()
|
* UITOOLS_DrawDiagEdge()
|
||||||
|
@ -111,6 +118,24 @@ static const signed char LTRBInnerFlat[] = {
|
||||||
-1, COLOR_BTNFACE, COLOR_BTNFACE, COLOR_BTNFACE,
|
-1, COLOR_BTNFACE, COLOR_BTNFACE, COLOR_BTNFACE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* last COLOR id */
|
||||||
|
#define COLOR_MAX COLOR_GRADIENTINACTIVECAPTION
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* UITOOLS_GetPattern55AABrush
|
||||||
|
*/
|
||||||
|
HBRUSH UITOOLS_GetPattern55AABrush(void)
|
||||||
|
{
|
||||||
|
if (!hPattern55AABrush)
|
||||||
|
{
|
||||||
|
hPattern55AABitmap = CreateBitmap( 8, 8, 1, 1, wPattern55AA );
|
||||||
|
hPattern55AABrush = CreatePatternBrush( hPattern55AABitmap );
|
||||||
|
}
|
||||||
|
return hPattern55AABrush;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* UITOOLS_DrawDiagEdge
|
* UITOOLS_DrawDiagEdge
|
||||||
*
|
*
|
||||||
|
@ -617,19 +642,15 @@ static void UITOOLS_DrawCheckedRect( HDC dc, LPRECT rect )
|
||||||
{
|
{
|
||||||
if(GetSysColor(COLOR_BTNHIGHLIGHT) == RGB(255, 255, 255))
|
if(GetSysColor(COLOR_BTNHIGHLIGHT) == RGB(255, 255, 255))
|
||||||
{
|
{
|
||||||
HBITMAP hbm = CreateBitmap(8, 8, 1, 1, wPattern_AA55);
|
|
||||||
HBRUSH hbsave;
|
HBRUSH hbsave;
|
||||||
HBRUSH hb = CreatePatternBrush(hbm);
|
|
||||||
COLORREF bg;
|
COLORREF bg;
|
||||||
|
|
||||||
FillRect(dc, rect, GetSysColorBrush(COLOR_BTNFACE));
|
FillRect(dc, rect, GetSysColorBrush(COLOR_BTNFACE));
|
||||||
bg = SetBkColor(dc, RGB(255, 255, 255));
|
bg = SetBkColor(dc, RGB(255, 255, 255));
|
||||||
hbsave = (HBRUSH)SelectObject(dc, hb);
|
hbsave = SelectObject(dc, UITOOLS_GetPattern55AABrush());
|
||||||
PatBlt(dc, rect->left, rect->top, rect->right-rect->left, rect->bottom-rect->top, 0x00FA0089);
|
PatBlt(dc, rect->left, rect->top, rect->right-rect->left, rect->bottom-rect->top, 0x00FA0089);
|
||||||
SelectObject(dc, hbsave);
|
SelectObject(dc, hbsave);
|
||||||
SetBkColor(dc, bg);
|
SetBkColor(dc, bg);
|
||||||
DeleteObject(hb);
|
|
||||||
DeleteObject(hbm);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1391,3 +1412,335 @@ BOOL WINAPI DrawFrameControl( HDC hdc, LPRECT rc, UINT uType,
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* FillRect (USER32.@)
|
||||||
|
*/
|
||||||
|
INT WINAPI FillRect( HDC hdc, const RECT *rect, HBRUSH hbrush )
|
||||||
|
{
|
||||||
|
HBRUSH prevBrush;
|
||||||
|
|
||||||
|
if (hbrush <= (HBRUSH) (COLOR_MAX + 1)) hbrush = GetSysColorBrush( (INT) hbrush - 1 );
|
||||||
|
|
||||||
|
if (!(prevBrush = SelectObject( hdc, hbrush ))) return 0;
|
||||||
|
PatBlt( hdc, rect->left, rect->top,
|
||||||
|
rect->right - rect->left, rect->bottom - rect->top, PATCOPY );
|
||||||
|
SelectObject( hdc, prevBrush );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* InvertRect (USER32.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI InvertRect( HDC hdc, const RECT *rect )
|
||||||
|
{
|
||||||
|
return PatBlt( hdc, rect->left, rect->top,
|
||||||
|
rect->right - rect->left, rect->bottom - rect->top, DSTINVERT );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* FrameRect (USER32.@)
|
||||||
|
*/
|
||||||
|
INT WINAPI FrameRect( HDC hdc, const RECT *rect, HBRUSH hbrush )
|
||||||
|
{
|
||||||
|
HBRUSH prevBrush;
|
||||||
|
RECT r = *rect;
|
||||||
|
|
||||||
|
if ( (r.right <= r.left) || (r.bottom <= r.top) ) return 0;
|
||||||
|
if (!(prevBrush = SelectObject( hdc, hbrush ))) return 0;
|
||||||
|
|
||||||
|
PatBlt( hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY );
|
||||||
|
PatBlt( hdc, r.right - 1, r.top, 1, r.bottom - r.top, PATCOPY );
|
||||||
|
PatBlt( hdc, r.left, r.top, r.right - r.left, 1, PATCOPY );
|
||||||
|
PatBlt( hdc, r.left, r.bottom - 1, r.right - r.left, 1, PATCOPY );
|
||||||
|
|
||||||
|
SelectObject( hdc, prevBrush );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DrawFocusRect (USER32.@)
|
||||||
|
*
|
||||||
|
* FIXME: PatBlt(PATINVERT) with background brush.
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DrawFocusRect( HDC hdc, const RECT* rc )
|
||||||
|
{
|
||||||
|
HBRUSH hOldBrush;
|
||||||
|
HPEN hOldPen, hNewPen;
|
||||||
|
INT oldDrawMode, oldBkMode;
|
||||||
|
|
||||||
|
hOldBrush = SelectObject(hdc, GetStockObject(NULL_BRUSH));
|
||||||
|
hNewPen = CreatePen(PS_ALTERNATE, 1, GetSysColor(COLOR_WINDOWTEXT));
|
||||||
|
hOldPen = SelectObject(hdc, hNewPen);
|
||||||
|
oldDrawMode = SetROP2(hdc, R2_XORPEN);
|
||||||
|
oldBkMode = SetBkMode(hdc, TRANSPARENT);
|
||||||
|
|
||||||
|
Rectangle(hdc, rc->left, rc->top, rc->right, rc->bottom);
|
||||||
|
|
||||||
|
SetBkMode(hdc, oldBkMode);
|
||||||
|
SetROP2(hdc, oldDrawMode);
|
||||||
|
SelectObject(hdc, hOldPen);
|
||||||
|
DeleteObject(hNewPen);
|
||||||
|
SelectObject(hdc, hOldBrush);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* DrawAnimatedRects (USER32.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DrawAnimatedRects( HWND hwnd, INT idAni, const RECT* lprcFrom, const RECT* lprcTo )
|
||||||
|
{
|
||||||
|
FIXME("(%p,%d,%p,%p): stub\n",hwnd,idAni,lprcFrom,lprcTo);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* UITOOLS_DrawStateJam
|
||||||
|
*
|
||||||
|
* Jams in the requested type in the dc
|
||||||
|
*/
|
||||||
|
static BOOL UITOOLS_DrawStateJam( HDC hdc, UINT opcode, DRAWSTATEPROC func, LPARAM lp, WPARAM wp,
|
||||||
|
LPRECT rc, UINT dtflags, BOOL unicode )
|
||||||
|
{
|
||||||
|
HDC memdc;
|
||||||
|
HBITMAP hbmsave;
|
||||||
|
BOOL retval;
|
||||||
|
INT cx = rc->right - rc->left;
|
||||||
|
INT cy = rc->bottom - rc->top;
|
||||||
|
|
||||||
|
switch(opcode)
|
||||||
|
{
|
||||||
|
case DST_TEXT:
|
||||||
|
case DST_PREFIXTEXT:
|
||||||
|
if(unicode)
|
||||||
|
return DrawTextW(hdc, (LPWSTR)lp, (INT)wp, rc, dtflags);
|
||||||
|
else
|
||||||
|
return DrawTextA(hdc, (LPSTR)lp, (INT)wp, rc, dtflags);
|
||||||
|
|
||||||
|
case DST_ICON:
|
||||||
|
return DrawIcon(hdc, rc->left, rc->top, (HICON)lp);
|
||||||
|
|
||||||
|
case DST_BITMAP:
|
||||||
|
memdc = CreateCompatibleDC(hdc);
|
||||||
|
if(!memdc) return FALSE;
|
||||||
|
hbmsave = (HBITMAP)SelectObject(memdc, (HBITMAP)lp);
|
||||||
|
if(!hbmsave)
|
||||||
|
{
|
||||||
|
DeleteDC(memdc);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
retval = BitBlt(hdc, rc->left, rc->top, cx, cy, memdc, 0, 0, SRCCOPY);
|
||||||
|
SelectObject(memdc, hbmsave);
|
||||||
|
DeleteDC(memdc);
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
case DST_COMPLEX:
|
||||||
|
if(func) {
|
||||||
|
BOOL bRet;
|
||||||
|
/* DRAWSTATEPROC assumes that it draws at the center of coordinates */
|
||||||
|
|
||||||
|
OffsetViewportOrgEx(hdc, rc->left, rc->top, NULL);
|
||||||
|
bRet = func(hdc, lp, wp, cx, cy);
|
||||||
|
/* Restore origin */
|
||||||
|
OffsetViewportOrgEx(hdc, -rc->left, -rc->top, NULL);
|
||||||
|
return bRet;
|
||||||
|
} else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* UITOOLS_DrawState()
|
||||||
|
*/
|
||||||
|
static BOOL UITOOLS_DrawState(HDC hdc, HBRUSH hbr, DRAWSTATEPROC func, LPARAM lp, WPARAM wp,
|
||||||
|
INT x, INT y, INT cx, INT cy, UINT flags, BOOL unicode )
|
||||||
|
{
|
||||||
|
HBITMAP hbm, hbmsave;
|
||||||
|
HFONT hfsave;
|
||||||
|
HBRUSH hbsave, hbrtmp = 0;
|
||||||
|
HDC memdc;
|
||||||
|
RECT rc;
|
||||||
|
UINT dtflags = DT_NOCLIP;
|
||||||
|
COLORREF fg, bg;
|
||||||
|
UINT opcode = flags & 0xf;
|
||||||
|
INT len = wp;
|
||||||
|
BOOL retval, tmp;
|
||||||
|
|
||||||
|
if((opcode == DST_TEXT || opcode == DST_PREFIXTEXT) && !len) /* The string is '\0' terminated */
|
||||||
|
{
|
||||||
|
if(unicode)
|
||||||
|
len = strlenW((LPWSTR)lp);
|
||||||
|
else
|
||||||
|
len = strlen((LPSTR)lp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find out what size the image has if not given by caller */
|
||||||
|
if(!cx || !cy)
|
||||||
|
{
|
||||||
|
SIZE s;
|
||||||
|
CURSORICONINFO *ici;
|
||||||
|
BITMAP bm;
|
||||||
|
|
||||||
|
switch(opcode)
|
||||||
|
{
|
||||||
|
case DST_TEXT:
|
||||||
|
case DST_PREFIXTEXT:
|
||||||
|
if(unicode)
|
||||||
|
retval = GetTextExtentPoint32W(hdc, (LPWSTR)lp, len, &s);
|
||||||
|
else
|
||||||
|
retval = GetTextExtentPoint32A(hdc, (LPSTR)lp, len, &s);
|
||||||
|
if(!retval) return FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DST_ICON:
|
||||||
|
ici = (CURSORICONINFO *)GlobalLock16((HGLOBAL16)lp);
|
||||||
|
if(!ici) return FALSE;
|
||||||
|
s.cx = ici->nWidth;
|
||||||
|
s.cy = ici->nHeight;
|
||||||
|
GlobalUnlock16((HGLOBAL16)lp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DST_BITMAP:
|
||||||
|
if(!GetObjectA((HBITMAP)lp, sizeof(bm), &bm)) return FALSE;
|
||||||
|
s.cx = bm.bmWidth;
|
||||||
|
s.cy = bm.bmHeight;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DST_COMPLEX: /* cx and cy must be set in this mode */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!cx) cx = s.cx;
|
||||||
|
if(!cy) cy = s.cy;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc.left = x;
|
||||||
|
rc.top = y;
|
||||||
|
rc.right = x + cx;
|
||||||
|
rc.bottom = y + cy;
|
||||||
|
|
||||||
|
if(flags & DSS_RIGHT) /* This one is not documented in the win32.hlp file */
|
||||||
|
dtflags |= DT_RIGHT;
|
||||||
|
if(opcode == DST_TEXT)
|
||||||
|
dtflags |= DT_NOPREFIX;
|
||||||
|
|
||||||
|
/* For DSS_NORMAL we just jam in the image and return */
|
||||||
|
if((flags & 0x7ff0) == DSS_NORMAL)
|
||||||
|
{
|
||||||
|
return UITOOLS_DrawStateJam(hdc, opcode, func, lp, len, &rc, dtflags, unicode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For all other states we need to convert the image to B/W in a local bitmap */
|
||||||
|
/* before it is displayed */
|
||||||
|
fg = SetTextColor(hdc, RGB(0, 0, 0));
|
||||||
|
bg = SetBkColor(hdc, RGB(255, 255, 255));
|
||||||
|
hbm = NULL; hbmsave = NULL;
|
||||||
|
memdc = NULL; hbsave = NULL;
|
||||||
|
retval = FALSE; /* assume failure */
|
||||||
|
|
||||||
|
/* From here on we must use "goto cleanup" when something goes wrong */
|
||||||
|
hbm = CreateBitmap(cx, cy, 1, 1, NULL);
|
||||||
|
if(!hbm) goto cleanup;
|
||||||
|
memdc = CreateCompatibleDC(hdc);
|
||||||
|
if(!memdc) goto cleanup;
|
||||||
|
hbmsave = (HBITMAP)SelectObject(memdc, hbm);
|
||||||
|
if(!hbmsave) goto cleanup;
|
||||||
|
rc.left = rc.top = 0;
|
||||||
|
rc.right = cx;
|
||||||
|
rc.bottom = cy;
|
||||||
|
if(!FillRect(memdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH))) goto cleanup;
|
||||||
|
SetBkColor(memdc, RGB(255, 255, 255));
|
||||||
|
SetTextColor(memdc, RGB(0, 0, 0));
|
||||||
|
hfsave = (HFONT)SelectObject(memdc, GetCurrentObject(hdc, OBJ_FONT));
|
||||||
|
|
||||||
|
/* DST_COMPLEX may draw text as well,
|
||||||
|
* so we must be sure that correct font is selected
|
||||||
|
*/
|
||||||
|
if(!hfsave && (opcode <= DST_PREFIXTEXT)) goto cleanup;
|
||||||
|
tmp = UITOOLS_DrawStateJam(memdc, opcode, func, lp, len, &rc, dtflags, unicode);
|
||||||
|
if(hfsave) SelectObject(memdc, hfsave);
|
||||||
|
if(!tmp) goto cleanup;
|
||||||
|
|
||||||
|
/* This state cause the image to be dithered */
|
||||||
|
if(flags & DSS_UNION)
|
||||||
|
{
|
||||||
|
hbsave = (HBRUSH)SelectObject(memdc, UITOOLS_GetPattern55AABrush());
|
||||||
|
if(!hbsave) goto cleanup;
|
||||||
|
tmp = PatBlt(memdc, 0, 0, cx, cy, 0x00FA0089);
|
||||||
|
SelectObject(memdc, hbsave);
|
||||||
|
if(!tmp) goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & DSS_DISABLED)
|
||||||
|
hbrtmp = CreateSolidBrush(GetSysColor(COLOR_3DHILIGHT));
|
||||||
|
else if (flags & DSS_DEFAULT)
|
||||||
|
hbrtmp = CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
|
||||||
|
|
||||||
|
/* Draw light or dark shadow */
|
||||||
|
if (flags & (DSS_DISABLED|DSS_DEFAULT))
|
||||||
|
{
|
||||||
|
if(!hbrtmp) goto cleanup;
|
||||||
|
hbsave = (HBRUSH)SelectObject(hdc, hbrtmp);
|
||||||
|
if(!hbsave) goto cleanup;
|
||||||
|
if(!BitBlt(hdc, x+1, y+1, cx, cy, memdc, 0, 0, 0x00B8074A)) goto cleanup;
|
||||||
|
SelectObject(hdc, hbsave);
|
||||||
|
DeleteObject(hbrtmp);
|
||||||
|
hbrtmp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & DSS_DISABLED)
|
||||||
|
{
|
||||||
|
hbr = hbrtmp = CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
|
||||||
|
if(!hbrtmp) goto cleanup;
|
||||||
|
}
|
||||||
|
else if (!hbr)
|
||||||
|
{
|
||||||
|
hbr = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
||||||
|
}
|
||||||
|
|
||||||
|
hbsave = (HBRUSH)SelectObject(hdc, hbr);
|
||||||
|
|
||||||
|
if(!BitBlt(hdc, x, y, cx, cy, memdc, 0, 0, 0x00B8074A)) goto cleanup;
|
||||||
|
|
||||||
|
retval = TRUE; /* We succeeded */
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
SetTextColor(hdc, fg);
|
||||||
|
SetBkColor(hdc, bg);
|
||||||
|
|
||||||
|
if(hbsave) SelectObject(hdc, hbsave);
|
||||||
|
if(hbmsave) SelectObject(memdc, hbmsave);
|
||||||
|
if(hbrtmp) DeleteObject(hbrtmp);
|
||||||
|
if(hbm) DeleteObject(hbm);
|
||||||
|
if(memdc) DeleteDC(memdc);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* DrawStateA (USER32.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DrawStateA(HDC hdc, HBRUSH hbr,
|
||||||
|
DRAWSTATEPROC func, LPARAM ldata, WPARAM wdata,
|
||||||
|
INT x, INT y, INT cx, INT cy, UINT flags)
|
||||||
|
{
|
||||||
|
return UITOOLS_DrawState(hdc, hbr, func, ldata, wdata, x, y, cx, cy, flags, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* DrawStateW (USER32.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DrawStateW(HDC hdc, HBRUSH hbr,
|
||||||
|
DRAWSTATEPROC func, LPARAM ldata, WPARAM wdata,
|
||||||
|
INT x, INT y, INT cx, INT cy, UINT flags)
|
||||||
|
{
|
||||||
|
return UITOOLS_DrawState(hdc, hbr, func, ldata, wdata, x, y, cx, cy, flags, TRUE);
|
||||||
|
}
|
||||||
|
|
|
@ -136,9 +136,6 @@ extern void USER_CheckNotLock(void);
|
||||||
|
|
||||||
extern BOOL USER_IsExitingThread( DWORD tid );
|
extern BOOL USER_IsExitingThread( DWORD tid );
|
||||||
|
|
||||||
/* gray brush cache */
|
|
||||||
extern HBRUSH CACHE_GetPattern55AABrush(void);
|
|
||||||
|
|
||||||
/* hook.c */
|
/* hook.c */
|
||||||
extern LRESULT HOOK_CallHooks( INT id, INT code, WPARAM wparam, LPARAM lparam, BOOL unicode );
|
extern LRESULT HOOK_CallHooks( INT id, INT code, WPARAM wparam, LPARAM lparam, BOOL unicode );
|
||||||
extern BOOL HOOK_IsHooked( INT id );
|
extern BOOL HOOK_IsHooked( INT id );
|
||||||
|
|
|
@ -23,16 +23,19 @@
|
||||||
#include "wine/port.h"
|
#include "wine/port.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "win.h"
|
|
||||||
#include "user.h"
|
|
||||||
#include "nonclient.h"
|
|
||||||
#include "winpos.h"
|
|
||||||
#include "dce.h"
|
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "imm.h"
|
#include "imm.h"
|
||||||
|
#include "win.h"
|
||||||
|
#include "user.h"
|
||||||
|
#include "controls.h"
|
||||||
|
#include "nonclient.h"
|
||||||
|
#include "winpos.h"
|
||||||
|
#include "dce.h"
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "wine/winuser16.h"
|
#include "wine/winuser16.h"
|
||||||
|
@ -164,7 +167,7 @@ HBRUSH DEFWND_ControlColor( HDC hDC, UINT ctlType )
|
||||||
* look different from the window background.
|
* look different from the window background.
|
||||||
*/
|
*/
|
||||||
if (bk == GetSysColor(COLOR_WINDOW))
|
if (bk == GetSysColor(COLOR_WINDOW))
|
||||||
return CACHE_GetPattern55AABrush();
|
return UITOOLS_GetPattern55AABrush();
|
||||||
|
|
||||||
UnrealizeObject( hb );
|
UnrealizeObject( hb );
|
||||||
return hb;
|
return hb;
|
||||||
|
|
|
@ -261,7 +261,7 @@ BOOL WINAPI DrawCaptionTempW (HWND hwnd, HDC hdc, const RECT *rect, HFONT hFont,
|
||||||
FillRect (hdc, &rc, GetSysColorBrush (COLOR_3DFACE));
|
FillRect (hdc, &rc, GetSysColorBrush (COLOR_3DFACE));
|
||||||
|
|
||||||
if (uFlags & DC_ACTIVE) {
|
if (uFlags & DC_ACTIVE) {
|
||||||
HBRUSH hbr = SelectObject (hdc, CACHE_GetPattern55AABrush ());
|
HBRUSH hbr = SelectObject (hdc, UITOOLS_GetPattern55AABrush ());
|
||||||
PatBlt (hdc, rc.left, rc.top,
|
PatBlt (hdc, rc.left, rc.top,
|
||||||
rc.right-rc.left, rc.bottom-rc.top, 0xFA0089);
|
rc.right-rc.left, rc.bottom-rc.top, 0xFA0089);
|
||||||
SelectObject (hdc, hbr);
|
SelectObject (hdc, hbr);
|
||||||
|
|
|
@ -58,9 +58,6 @@ WINE_DECLARE_DEBUG_CHANNEL(nonclient);
|
||||||
#define UNC_DELAY_NCPAINT 0x0010
|
#define UNC_DELAY_NCPAINT 0x0010
|
||||||
#define UNC_IN_BEGINPAINT 0x0020
|
#define UNC_IN_BEGINPAINT 0x0020
|
||||||
|
|
||||||
/* Last COLOR id */
|
|
||||||
#define COLOR_MAX COLOR_GRADIENTINACTIVECAPTION
|
|
||||||
|
|
||||||
HPALETTE (WINAPI *pfnGDISelectPalette)(HDC hdc, HPALETTE hpal, WORD bkgnd ) = NULL;
|
HPALETTE (WINAPI *pfnGDISelectPalette)(HDC hdc, HPALETTE hpal, WORD bkgnd ) = NULL;
|
||||||
UINT (WINAPI *pfnGDIRealizePalette)(HDC hdc) = NULL;
|
UINT (WINAPI *pfnGDIRealizePalette)(HDC hdc) = NULL;
|
||||||
|
|
||||||
|
@ -943,349 +940,6 @@ BOOL WINAPI ValidateRect( HWND hwnd, const RECT *rect )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* FillRect (USER32.@)
|
|
||||||
*/
|
|
||||||
INT WINAPI FillRect( HDC hdc, const RECT *rect, HBRUSH hbrush )
|
|
||||||
{
|
|
||||||
HBRUSH prevBrush;
|
|
||||||
|
|
||||||
if (hbrush <= (HBRUSH) (COLOR_MAX + 1)) {
|
|
||||||
hbrush = GetSysColorBrush( (INT) hbrush - 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(prevBrush = SelectObject( hdc, hbrush ))) return 0;
|
|
||||||
PatBlt( hdc, rect->left, rect->top,
|
|
||||||
rect->right - rect->left, rect->bottom - rect->top, PATCOPY );
|
|
||||||
SelectObject( hdc, prevBrush );
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* InvertRect (USER32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI InvertRect( HDC hdc, const RECT *rect )
|
|
||||||
{
|
|
||||||
return PatBlt( hdc, rect->left, rect->top,
|
|
||||||
rect->right - rect->left, rect->bottom - rect->top,
|
|
||||||
DSTINVERT );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* FrameRect (USER32.@)
|
|
||||||
*/
|
|
||||||
INT WINAPI FrameRect( HDC hdc, const RECT *rect, HBRUSH hbrush )
|
|
||||||
{
|
|
||||||
HBRUSH prevBrush;
|
|
||||||
RECT r = *rect;
|
|
||||||
|
|
||||||
if ( (r.right <= r.left) || (r.bottom <= r.top) ) return 0;
|
|
||||||
if (!(prevBrush = SelectObject( hdc, hbrush ))) return 0;
|
|
||||||
|
|
||||||
PatBlt( hdc, r.left, r.top, 1,
|
|
||||||
r.bottom - r.top, PATCOPY );
|
|
||||||
PatBlt( hdc, r.right - 1, r.top, 1,
|
|
||||||
r.bottom - r.top, PATCOPY );
|
|
||||||
PatBlt( hdc, r.left, r.top,
|
|
||||||
r.right - r.left, 1, PATCOPY );
|
|
||||||
PatBlt( hdc, r.left, r.bottom - 1,
|
|
||||||
r.right - r.left, 1, PATCOPY );
|
|
||||||
|
|
||||||
SelectObject( hdc, prevBrush );
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* DrawFocusRect (USER32.@)
|
|
||||||
*
|
|
||||||
* FIXME: PatBlt(PATINVERT) with background brush.
|
|
||||||
*/
|
|
||||||
BOOL WINAPI DrawFocusRect( HDC hdc, const RECT* rc )
|
|
||||||
{
|
|
||||||
HBRUSH hOldBrush;
|
|
||||||
HPEN hOldPen, hNewPen;
|
|
||||||
INT oldDrawMode, oldBkMode;
|
|
||||||
|
|
||||||
hOldBrush = SelectObject(hdc, GetStockObject(NULL_BRUSH));
|
|
||||||
hNewPen = CreatePen(PS_ALTERNATE, 1, GetSysColor(COLOR_WINDOWTEXT));
|
|
||||||
hOldPen = SelectObject(hdc, hNewPen);
|
|
||||||
oldDrawMode = SetROP2(hdc, R2_XORPEN);
|
|
||||||
oldBkMode = SetBkMode(hdc, TRANSPARENT);
|
|
||||||
|
|
||||||
Rectangle(hdc, rc->left, rc->top, rc->right, rc->bottom);
|
|
||||||
|
|
||||||
SetBkMode(hdc, oldBkMode);
|
|
||||||
SetROP2(hdc, oldDrawMode);
|
|
||||||
SelectObject(hdc, hOldPen);
|
|
||||||
DeleteObject(hNewPen);
|
|
||||||
SelectObject(hdc, hOldBrush);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* DrawAnimatedRects (USER32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI DrawAnimatedRects( HWND hwnd, INT idAni,
|
|
||||||
const RECT* lprcFrom,
|
|
||||||
const RECT* lprcTo )
|
|
||||||
{
|
|
||||||
FIXME("(%p,%d,%p,%p): stub\n",hwnd,idAni,lprcFrom,lprcTo);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* PAINTING_DrawStateJam
|
|
||||||
*
|
|
||||||
* Jams in the requested type in the dc
|
|
||||||
*/
|
|
||||||
static BOOL PAINTING_DrawStateJam(HDC hdc, UINT opcode,
|
|
||||||
DRAWSTATEPROC func, LPARAM lp, WPARAM wp,
|
|
||||||
LPRECT rc, UINT dtflags, BOOL unicode )
|
|
||||||
{
|
|
||||||
HDC memdc;
|
|
||||||
HBITMAP hbmsave;
|
|
||||||
BOOL retval;
|
|
||||||
INT cx = rc->right - rc->left;
|
|
||||||
INT cy = rc->bottom - rc->top;
|
|
||||||
|
|
||||||
switch(opcode)
|
|
||||||
{
|
|
||||||
case DST_TEXT:
|
|
||||||
case DST_PREFIXTEXT:
|
|
||||||
if(unicode)
|
|
||||||
return DrawTextW(hdc, (LPWSTR)lp, (INT)wp, rc, dtflags);
|
|
||||||
else
|
|
||||||
return DrawTextA(hdc, (LPSTR)lp, (INT)wp, rc, dtflags);
|
|
||||||
|
|
||||||
case DST_ICON:
|
|
||||||
return DrawIcon(hdc, rc->left, rc->top, (HICON)lp);
|
|
||||||
|
|
||||||
case DST_BITMAP:
|
|
||||||
memdc = CreateCompatibleDC(hdc);
|
|
||||||
if(!memdc) return FALSE;
|
|
||||||
hbmsave = (HBITMAP)SelectObject(memdc, (HBITMAP)lp);
|
|
||||||
if(!hbmsave)
|
|
||||||
{
|
|
||||||
DeleteDC(memdc);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
retval = BitBlt(hdc, rc->left, rc->top, cx, cy, memdc, 0, 0, SRCCOPY);
|
|
||||||
SelectObject(memdc, hbmsave);
|
|
||||||
DeleteDC(memdc);
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
case DST_COMPLEX:
|
|
||||||
if(func) {
|
|
||||||
BOOL bRet;
|
|
||||||
/* DRAWSTATEPROC assumes that it draws at the center of coordinates */
|
|
||||||
|
|
||||||
OffsetViewportOrgEx(hdc, rc->left, rc->top, NULL);
|
|
||||||
bRet = func(hdc, lp, wp, cx, cy);
|
|
||||||
/* Restore origin */
|
|
||||||
OffsetViewportOrgEx(hdc, -rc->left, -rc->top, NULL);
|
|
||||||
return bRet;
|
|
||||||
} else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* PAINTING_DrawState()
|
|
||||||
*/
|
|
||||||
static BOOL PAINTING_DrawState(HDC hdc, HBRUSH hbr, DRAWSTATEPROC func, LPARAM lp, WPARAM wp,
|
|
||||||
INT x, INT y, INT cx, INT cy, UINT flags, BOOL unicode )
|
|
||||||
{
|
|
||||||
HBITMAP hbm, hbmsave;
|
|
||||||
HFONT hfsave;
|
|
||||||
HBRUSH hbsave, hbrtmp = 0;
|
|
||||||
HDC memdc;
|
|
||||||
RECT rc;
|
|
||||||
UINT dtflags = DT_NOCLIP;
|
|
||||||
COLORREF fg, bg;
|
|
||||||
UINT opcode = flags & 0xf;
|
|
||||||
INT len = wp;
|
|
||||||
BOOL retval, tmp;
|
|
||||||
|
|
||||||
if((opcode == DST_TEXT || opcode == DST_PREFIXTEXT) && !len) /* The string is '\0' terminated */
|
|
||||||
{
|
|
||||||
if(unicode)
|
|
||||||
len = strlenW((LPWSTR)lp);
|
|
||||||
else
|
|
||||||
len = strlen((LPSTR)lp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find out what size the image has if not given by caller */
|
|
||||||
if(!cx || !cy)
|
|
||||||
{
|
|
||||||
SIZE s;
|
|
||||||
CURSORICONINFO *ici;
|
|
||||||
BITMAP bm;
|
|
||||||
|
|
||||||
switch(opcode)
|
|
||||||
{
|
|
||||||
case DST_TEXT:
|
|
||||||
case DST_PREFIXTEXT:
|
|
||||||
if(unicode)
|
|
||||||
retval = GetTextExtentPoint32W(hdc, (LPWSTR)lp, len, &s);
|
|
||||||
else
|
|
||||||
retval = GetTextExtentPoint32A(hdc, (LPSTR)lp, len, &s);
|
|
||||||
if(!retval) return FALSE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DST_ICON:
|
|
||||||
ici = (CURSORICONINFO *)GlobalLock16((HGLOBAL16)lp);
|
|
||||||
if(!ici) return FALSE;
|
|
||||||
s.cx = ici->nWidth;
|
|
||||||
s.cy = ici->nHeight;
|
|
||||||
GlobalUnlock16((HGLOBAL16)lp);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DST_BITMAP:
|
|
||||||
if(!GetObjectA((HBITMAP)lp, sizeof(bm), &bm))
|
|
||||||
return FALSE;
|
|
||||||
s.cx = bm.bmWidth;
|
|
||||||
s.cy = bm.bmHeight;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DST_COMPLEX: /* cx and cy must be set in this mode */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!cx) cx = s.cx;
|
|
||||||
if(!cy) cy = s.cy;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc.left = x;
|
|
||||||
rc.top = y;
|
|
||||||
rc.right = x + cx;
|
|
||||||
rc.bottom = y + cy;
|
|
||||||
|
|
||||||
if(flags & DSS_RIGHT) /* This one is not documented in the win32.hlp file */
|
|
||||||
dtflags |= DT_RIGHT;
|
|
||||||
if(opcode == DST_TEXT)
|
|
||||||
dtflags |= DT_NOPREFIX;
|
|
||||||
|
|
||||||
/* For DSS_NORMAL we just jam in the image and return */
|
|
||||||
if((flags & 0x7ff0) == DSS_NORMAL)
|
|
||||||
{
|
|
||||||
return PAINTING_DrawStateJam(hdc, opcode, func, lp, len, &rc, dtflags, unicode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For all other states we need to convert the image to B/W in a local bitmap */
|
|
||||||
/* before it is displayed */
|
|
||||||
fg = SetTextColor(hdc, RGB(0, 0, 0));
|
|
||||||
bg = SetBkColor(hdc, RGB(255, 255, 255));
|
|
||||||
hbm = NULL; hbmsave = NULL;
|
|
||||||
memdc = NULL; hbsave = NULL;
|
|
||||||
retval = FALSE; /* assume failure */
|
|
||||||
|
|
||||||
/* From here on we must use "goto cleanup" when something goes wrong */
|
|
||||||
hbm = CreateBitmap(cx, cy, 1, 1, NULL);
|
|
||||||
if(!hbm) goto cleanup;
|
|
||||||
memdc = CreateCompatibleDC(hdc);
|
|
||||||
if(!memdc) goto cleanup;
|
|
||||||
hbmsave = (HBITMAP)SelectObject(memdc, hbm);
|
|
||||||
if(!hbmsave) goto cleanup;
|
|
||||||
rc.left = rc.top = 0;
|
|
||||||
rc.right = cx;
|
|
||||||
rc.bottom = cy;
|
|
||||||
if(!FillRect(memdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH))) goto cleanup;
|
|
||||||
SetBkColor(memdc, RGB(255, 255, 255));
|
|
||||||
SetTextColor(memdc, RGB(0, 0, 0));
|
|
||||||
hfsave = (HFONT)SelectObject(memdc, GetCurrentObject(hdc, OBJ_FONT));
|
|
||||||
|
|
||||||
/* DST_COMPLEX may draw text as well,
|
|
||||||
* so we must be sure that correct font is selected
|
|
||||||
*/
|
|
||||||
if(!hfsave && (opcode <= DST_PREFIXTEXT)) goto cleanup;
|
|
||||||
tmp = PAINTING_DrawStateJam(memdc, opcode, func, lp, len, &rc, dtflags, unicode);
|
|
||||||
if(hfsave) SelectObject(memdc, hfsave);
|
|
||||||
if(!tmp) goto cleanup;
|
|
||||||
|
|
||||||
/* This state cause the image to be dithered */
|
|
||||||
if(flags & DSS_UNION)
|
|
||||||
{
|
|
||||||
hbsave = (HBRUSH)SelectObject(memdc, CACHE_GetPattern55AABrush());
|
|
||||||
if(!hbsave) goto cleanup;
|
|
||||||
tmp = PatBlt(memdc, 0, 0, cx, cy, 0x00FA0089);
|
|
||||||
SelectObject(memdc, hbsave);
|
|
||||||
if(!tmp) goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & DSS_DISABLED)
|
|
||||||
hbrtmp = CreateSolidBrush(GetSysColor(COLOR_3DHILIGHT));
|
|
||||||
else if (flags & DSS_DEFAULT)
|
|
||||||
hbrtmp = CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
|
|
||||||
|
|
||||||
/* Draw light or dark shadow */
|
|
||||||
if (flags & (DSS_DISABLED|DSS_DEFAULT))
|
|
||||||
{
|
|
||||||
if(!hbrtmp) goto cleanup;
|
|
||||||
hbsave = (HBRUSH)SelectObject(hdc, hbrtmp);
|
|
||||||
if(!hbsave) goto cleanup;
|
|
||||||
if(!BitBlt(hdc, x+1, y+1, cx, cy, memdc, 0, 0, 0x00B8074A)) goto cleanup;
|
|
||||||
SelectObject(hdc, hbsave);
|
|
||||||
DeleteObject(hbrtmp);
|
|
||||||
hbrtmp = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & DSS_DISABLED)
|
|
||||||
{
|
|
||||||
hbr = hbrtmp = CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
|
|
||||||
if(!hbrtmp) goto cleanup;
|
|
||||||
}
|
|
||||||
else if (!hbr)
|
|
||||||
{
|
|
||||||
hbr = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
|
||||||
}
|
|
||||||
|
|
||||||
hbsave = (HBRUSH)SelectObject(hdc, hbr);
|
|
||||||
|
|
||||||
if(!BitBlt(hdc, x, y, cx, cy, memdc, 0, 0, 0x00B8074A)) goto cleanup;
|
|
||||||
|
|
||||||
retval = TRUE; /* We succeeded */
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
SetTextColor(hdc, fg);
|
|
||||||
SetBkColor(hdc, bg);
|
|
||||||
|
|
||||||
if(hbsave) SelectObject(hdc, hbsave);
|
|
||||||
if(hbmsave) SelectObject(memdc, hbmsave);
|
|
||||||
if(hbrtmp) DeleteObject(hbrtmp);
|
|
||||||
if(hbm) DeleteObject(hbm);
|
|
||||||
if(memdc) DeleteDC(memdc);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* DrawStateA (USER32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI DrawStateA(HDC hdc, HBRUSH hbr,
|
|
||||||
DRAWSTATEPROC func, LPARAM ldata, WPARAM wdata,
|
|
||||||
INT x, INT y, INT cx, INT cy, UINT flags)
|
|
||||||
{
|
|
||||||
return PAINTING_DrawState(hdc, hbr, func, ldata, wdata, x, y, cx, cy, flags, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* DrawStateW (USER32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI DrawStateW(HDC hdc, HBRUSH hbr,
|
|
||||||
DRAWSTATEPROC func, LPARAM ldata, WPARAM wdata,
|
|
||||||
INT x, INT y, INT cx, INT cy, UINT flags)
|
|
||||||
{
|
|
||||||
return PAINTING_DrawState(hdc, hbr, func, ldata, wdata, x, y, cx, cy, flags, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SelectPalette (Not a Windows API)
|
* SelectPalette (Not a Windows API)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue