mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 17:05:45 +00:00
[SDK] cicuif.h: Implement CUIFMenuItemSeparator::OnPaintO10 (#6490)
Supporting the Language bar... JIRA issue: CORE-19363 - Implement CUIFMenuItemSeparator::OnPaintO10 method. - Implement CUIFSchemeDef::GetCtrlFaceOffset method. - Implement CUIFWindow::PaintObject method. - Implement cicDrawMaskBmpOnDC function.
This commit is contained in:
parent
a7ef18303a
commit
019872dd12
1 changed files with 112 additions and 45 deletions
|
@ -441,6 +441,7 @@ HBITMAP cicConvertBlackBKGBitmap(LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, HBRUSH
|
||||||
HBITMAP cicCreateMaskBmp(LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, HBRUSH hbr,
|
HBITMAP cicCreateMaskBmp(LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, HBRUSH hbr,
|
||||||
COLORREF rgbColor, COLORREF rgbBack);
|
COLORREF rgbColor, COLORREF rgbBack);
|
||||||
BOOL cicGetIconBitmaps(HICON hIcon, HBITMAP *hbm1, HBITMAP *hbm2, const SIZE *pSize);
|
BOOL cicGetIconBitmaps(HICON hIcon, HBITMAP *hbm1, HBITMAP *hbm2, const SIZE *pSize);
|
||||||
|
void cicDrawMaskBmpOnDC(HDC hDC, LPCRECT prc, HBITMAP hbmp, HBITMAP hbmpMask);
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -472,7 +473,7 @@ public:
|
||||||
STDMETHOD_(void, FillRect)(HDC hDC, LPCRECT prc, INT iColor);
|
STDMETHOD_(void, FillRect)(HDC hDC, LPCRECT prc, INT iColor);
|
||||||
STDMETHOD_(void, FrameRect)(HDC hDC, LPCRECT prc, INT iColor);
|
STDMETHOD_(void, FrameRect)(HDC hDC, LPCRECT prc, INT iColor);
|
||||||
STDMETHOD_(void, DrawSelectionRect)(HDC hDC, LPCRECT prc, int) = 0;
|
STDMETHOD_(void, DrawSelectionRect)(HDC hDC, LPCRECT prc, int) = 0;
|
||||||
STDMETHOD_(INT, GetCtrlFaceOffset)(DWORD, DWORD dwDrawFlags, LPSIZE pSize) = 0;
|
STDMETHOD_(void, GetCtrlFaceOffset)(DWORD, DWORD dwDrawFlags, LPSIZE pSize) = 0;
|
||||||
STDMETHOD_(void, DrawCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
|
STDMETHOD_(void, DrawCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
|
||||||
STDMETHOD_(void, DrawCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
|
STDMETHOD_(void, DrawCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
|
||||||
STDMETHOD_(void, DrawCtrlText)(HDC hDC, LPCRECT prc, LPCWSTR pszText, INT cchText, DWORD dwDrawFlags, BOOL bRight) = 0;
|
STDMETHOD_(void, DrawCtrlText)(HDC hDC, LPCRECT prc, LPCWSTR pszText, INT cchText, DWORD dwDrawFlags, BOOL bRight) = 0;
|
||||||
|
@ -506,7 +507,7 @@ public:
|
||||||
STDMETHOD_(INT, CxWndBorder)() override { return 1; }
|
STDMETHOD_(INT, CxWndBorder)() override { return 1; }
|
||||||
STDMETHOD_(INT, CyWndBorder)() override { return 1; }
|
STDMETHOD_(INT, CyWndBorder)() override { return 1; }
|
||||||
STDMETHOD_(void, DrawSelectionRect)(HDC hDC, LPCRECT prc, int) override;
|
STDMETHOD_(void, DrawSelectionRect)(HDC hDC, LPCRECT prc, int) override;
|
||||||
STDMETHOD_(INT, GetCtrlFaceOffset)(DWORD, DWORD dwDrawFlags, LPSIZE pSize) override;
|
STDMETHOD_(void, GetCtrlFaceOffset)(DWORD dwUnknownFlags, DWORD dwDrawFlags, LPSIZE pSize) override;
|
||||||
STDMETHOD_(void, DrawCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
|
STDMETHOD_(void, DrawCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
|
||||||
STDMETHOD_(void, DrawCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
|
STDMETHOD_(void, DrawCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
|
||||||
STDMETHOD_(void, DrawCtrlText)(HDC hDC, LPCRECT prc, LPCWSTR pszText, INT cchText, DWORD dwDrawFlags, BOOL bRight) override;
|
STDMETHOD_(void, DrawCtrlText)(HDC hDC, LPCRECT prc, LPCWSTR pszText, INT cchText, DWORD dwDrawFlags, BOOL bRight) override;
|
||||||
|
@ -546,6 +547,9 @@ enum
|
||||||
UIF_WINDOW_MONITOR = 0x100,
|
UIF_WINDOW_MONITOR = 0x100,
|
||||||
UIF_WINDOW_LAYOUTRTL = 0x200,
|
UIF_WINDOW_LAYOUTRTL = 0x200,
|
||||||
UIF_WINDOW_NOMOUSEMSG = 0x400,
|
UIF_WINDOW_NOMOUSEMSG = 0x400,
|
||||||
|
UIF_WINDOW_USESCHEME1 = 0x10000000,
|
||||||
|
UIF_WINDOW_USESCHEME2 = 0x20000000,
|
||||||
|
UIF_WINDOW_USESCHEME3 = 0x40000000,
|
||||||
UIF_WINDOW_ENABLETHEMED = 0x80000000,
|
UIF_WINDOW_ENABLETHEMED = 0x80000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1801,7 +1805,13 @@ inline void cicDoneUIFScheme(void)
|
||||||
/// @unimplemented
|
/// @unimplemented
|
||||||
inline CUIFScheme *cicCreateUIFScheme(DWORD type)
|
inline CUIFScheme *cicCreateUIFScheme(DWORD type)
|
||||||
{
|
{
|
||||||
return new(cicNoThrow) CUIFSchemeDef(type);
|
switch (type)
|
||||||
|
{
|
||||||
|
//case 1: return new(cicNoThrow) CUIFSchemeOff10(1);
|
||||||
|
//case 2: return new(cicNoThrow) CUIFSchemeOff10(2);
|
||||||
|
//case 3: return new(cicNoThrow) CUIFSchemeOff10(3);
|
||||||
|
default: return new(cicNoThrow) CUIFSchemeDef(type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline STDMETHODIMP_(DWORD) CUIFSchemeDef::GetType()
|
inline STDMETHODIMP_(DWORD) CUIFSchemeDef::GetType()
|
||||||
|
@ -1849,10 +1859,44 @@ inline STDMETHODIMP_(void) CUIFSchemeDef::DrawSelectionRect(HDC hDC, LPCRECT prc
|
||||||
::FillRect(hDC, prc, GetBrush(6));
|
::FillRect(hDC, prc, GetBrush(6));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
inline STDMETHODIMP_(void)
|
||||||
inline STDMETHODIMP_(INT) CUIFSchemeDef::GetCtrlFaceOffset(DWORD, DWORD dwDrawFlags, LPSIZE pSize)
|
CUIFSchemeDef::GetCtrlFaceOffset(DWORD dwUnknownFlags, DWORD dwDrawFlags, LPSIZE pSize)
|
||||||
{
|
{
|
||||||
return 0;
|
if (!(dwDrawFlags & UIF_DRAW_PRESSED))
|
||||||
|
{
|
||||||
|
if (dwDrawFlags & 0x2)
|
||||||
|
{
|
||||||
|
if (dwUnknownFlags & 0x10)
|
||||||
|
{
|
||||||
|
pSize->cx = pSize->cy = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pSize->cx = pSize->cy = !!(dwUnknownFlags & 0x20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(dwDrawFlags & 0x1))
|
||||||
|
{
|
||||||
|
pSize->cx = pSize->cy = -((dwUnknownFlags & 1) != 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dwUnknownFlags & 0x4)
|
||||||
|
{
|
||||||
|
pSize->cx = pSize->cy = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pSize->cx = pSize->cy = !!(dwUnknownFlags & 0x8);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(dwUnknownFlags & 0x40))
|
||||||
|
{
|
||||||
|
pSize->cx = pSize->cy = !!(dwUnknownFlags & 0x80);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pSize->cx = pSize->cy = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline STDMETHODIMP_(void)
|
inline STDMETHODIMP_(void)
|
||||||
|
@ -2547,6 +2591,24 @@ inline BOOL cicGetIconBitmaps(HICON hIcon, HBITMAP *hbm1, HBITMAP *hbm2, const S
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void cicDrawMaskBmpOnDC(HDC hDC, LPCRECT prc, HBITMAP hbmp, HBITMAP hbmpMask)
|
||||||
|
{
|
||||||
|
if (!CUIFBitmapDC::s_fInitBitmapDCs)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LONG cx = prc->right - prc->left, cy = prc->bottom - prc->top;
|
||||||
|
CUIFBitmapDC::s_phdcDst->SetDIB(cx, cy, 1, 32);
|
||||||
|
CUIFBitmapDC::s_phdcSrc->SetBitmap(hbmp);
|
||||||
|
CUIFBitmapDC::s_phdcMask->SetBitmap(hbmpMask);
|
||||||
|
::BitBlt(*CUIFBitmapDC::s_phdcDst, 0, 0, cx, cy, hDC, prc->left, prc->top, SRCCOPY);
|
||||||
|
::BitBlt(*CUIFBitmapDC::s_phdcDst, 0, 0, cx, cy, *CUIFBitmapDC::s_phdcMask, 0, 0, SRCAND);
|
||||||
|
::BitBlt(*CUIFBitmapDC::s_phdcDst, 0, 0, cx, cy, *CUIFBitmapDC::s_phdcSrc, 0, 0, SRCINVERT);
|
||||||
|
::BitBlt(hDC, prc->left, prc->top, cx, cy, *CUIFBitmapDC::s_phdcDst, 0, 0, SRCCOPY);
|
||||||
|
CUIFBitmapDC::s_phdcSrc->Uninit(FALSE);
|
||||||
|
CUIFBitmapDC::s_phdcMask->Uninit(FALSE);
|
||||||
|
CUIFBitmapDC::s_phdcDst->Uninit(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
inline CUIFWindow::CUIFWindow(HINSTANCE hInst, DWORD style)
|
inline CUIFWindow::CUIFWindow(HINSTANCE hInst, DWORD style)
|
||||||
|
@ -2677,14 +2739,12 @@ inline void CUIFWindow::CreateScheme()
|
||||||
}
|
}
|
||||||
|
|
||||||
INT iScheme = 0;
|
INT iScheme = 0;
|
||||||
if (m_style & 0x10000000)
|
if (m_style & UIF_WINDOW_USESCHEME1)
|
||||||
iScheme = 1;
|
iScheme = 1;
|
||||||
else if (m_style & 0x20000000)
|
else if (m_style & UIF_WINDOW_USESCHEME2)
|
||||||
iScheme = 2;
|
iScheme = 2;
|
||||||
else if (m_style & 0x40000000)
|
else if (m_style & UIF_WINDOW_USESCHEME3)
|
||||||
iScheme = 3;
|
iScheme = 3;
|
||||||
else
|
|
||||||
iScheme = 0;
|
|
||||||
|
|
||||||
m_pScheme = cicCreateUIFScheme(iScheme);
|
m_pScheme = cicCreateUIFScheme(iScheme);
|
||||||
SetScheme(m_pScheme);
|
SetScheme(m_pScheme);
|
||||||
|
@ -2700,11 +2760,11 @@ CUIFWindow::GetWndStyle()
|
||||||
else
|
else
|
||||||
ret = WS_POPUP | WS_DISABLED;
|
ret = WS_POPUP | WS_DISABLED;
|
||||||
|
|
||||||
if (m_style & 0x10000000)
|
if (m_style & UIF_WINDOW_USESCHEME1)
|
||||||
ret |= WS_BORDER;
|
ret |= WS_BORDER;
|
||||||
else if (m_style & UIF_WINDOW_DLGFRAME)
|
else if (m_style & UIF_WINDOW_DLGFRAME)
|
||||||
ret |= WS_DLGFRAME;
|
ret |= WS_DLGFRAME;
|
||||||
else if ((m_style & 0x20000000) || (m_style & 0x10))
|
else if ((m_style & UIF_WINDOW_USESCHEME2) || (m_style & 0x10))
|
||||||
ret |= WS_BORDER;
|
ret |= WS_BORDER;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -3207,7 +3267,6 @@ inline void CUIFWindow::SetTimerObject(CUIFObject *pTimerObject, UINT uElapse)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
inline STDMETHODIMP_(void)
|
inline STDMETHODIMP_(void)
|
||||||
CUIFWindow::PaintObject(HDC hDC, LPCRECT prc)
|
CUIFWindow::PaintObject(HDC hDC, LPCRECT prc)
|
||||||
{
|
{
|
||||||
|
@ -3218,40 +3277,28 @@ CUIFWindow::PaintObject(HDC hDC, LPCRECT prc)
|
||||||
bGotDC = TRUE;
|
bGotDC = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPCRECT pRect = prc;
|
if (!prc)
|
||||||
if (!pRect)
|
prc = &m_rc;
|
||||||
pRect = &m_rc;
|
|
||||||
|
|
||||||
HDC hMemDC = ::CreateCompatibleDC(hDC);
|
HDC hMemDC = ::CreateCompatibleDC(hDC);
|
||||||
if (!hMemDC)
|
HBITMAP hbmMem = ::CreateCompatibleBitmap(hDC, prc->right - prc->left, prc->bottom - prc->top);
|
||||||
return;
|
|
||||||
|
|
||||||
HBITMAP hbmMem = ::CreateCompatibleBitmap(hDC,
|
|
||||||
pRect->right - pRect->left,
|
|
||||||
pRect->bottom - pRect->top);
|
|
||||||
if (hbmMem)
|
|
||||||
{
|
|
||||||
HGDIOBJ hbmOld = ::SelectObject(hMemDC, hbmMem);
|
HGDIOBJ hbmOld = ::SelectObject(hMemDC, hbmMem);
|
||||||
::SetViewportOrgEx(hMemDC, -pRect->left, -pRect->top, NULL);
|
::SetViewportOrgEx(hMemDC, -prc->left, -prc->top, NULL);
|
||||||
|
if (FAILED(EnsureThemeData(m_hWnd)) ||
|
||||||
if ((FAILED(CUIFTheme::EnsureThemeData(m_hWnd)) ||
|
((!(m_style & UIF_WINDOW_CHILD) || FAILED(DrawThemeParentBackground(m_hWnd, hMemDC, &m_rc))) &&
|
||||||
!(m_style & UIF_WINDOW_CHILD) ||
|
FAILED(DrawThemeBackground(hMemDC, m_iStateId, &m_rc, NULL))))
|
||||||
FAILED(DrawThemeParentBackground(m_hWnd, hMemDC, &m_rc))) &&
|
|
||||||
FAILED(DrawThemeBackground(hMemDC, m_iStateId, &m_rc, 0)))
|
|
||||||
{
|
{
|
||||||
if (m_pScheme)
|
if (m_pScheme)
|
||||||
m_pScheme->FillRect(hMemDC, pRect, 22);
|
m_pScheme->FillRect(hMemDC, prc, 22);
|
||||||
}
|
}
|
||||||
CUIFObject::PaintObject(hMemDC, pRect);
|
|
||||||
::BitBlt(hDC,
|
CUIFObject::PaintObject(hMemDC, prc);
|
||||||
pRect->left, pRect->top,
|
::BitBlt(hDC, prc->left, prc->top,
|
||||||
pRect->right - pRect->left, pRect->bottom - pRect->top,
|
prc->right - prc->left, prc->bottom - prc->top,
|
||||||
hMemDC,
|
hMemDC, prc->left, prc->top, SRCCOPY);
|
||||||
pRect->left, pRect->top,
|
|
||||||
SRCCOPY);
|
|
||||||
::SelectObject(hMemDC, hbmOld);
|
::SelectObject(hMemDC, hbmOld);
|
||||||
::DeleteObject(hbmMem);
|
::DeleteObject(hbmMem);
|
||||||
}
|
|
||||||
::DeleteDC(hMemDC);
|
::DeleteDC(hMemDC);
|
||||||
|
|
||||||
if (bGotDC)
|
if (bGotDC)
|
||||||
|
@ -6450,9 +6497,29 @@ CUIFMenuItemSeparator::OnPaintDef(HDC hDC)
|
||||||
m_pScheme->DrawMenuSeparator(hDC, &rc);
|
m_pScheme->DrawMenuSeparator(hDC, &rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @unimplemented
|
|
||||||
inline STDMETHODIMP_(void)
|
inline STDMETHODIMP_(void)
|
||||||
CUIFMenuItemSeparator::OnPaintO10(HDC hDC)
|
CUIFMenuItemSeparator::OnPaintO10(HDC hDC)
|
||||||
{
|
{
|
||||||
//FIXME
|
if (!m_pScheme)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LONG cx = m_rc.right - m_rc.left - 4;
|
||||||
|
LONG cy = (m_rc.bottom - m_rc.top - 2) / 2;
|
||||||
|
|
||||||
|
RECT rc;
|
||||||
|
GetRect(&rc);
|
||||||
|
|
||||||
|
rc.right = rc.left + m_pMenu->m_cxyMargin + 2;
|
||||||
|
if (m_pMenu->m_bHasMargin)
|
||||||
|
rc.right += m_pMenu->m_cxyMargin;
|
||||||
|
|
||||||
|
HBRUSH hBrush = m_pScheme->GetBrush(9);
|
||||||
|
::FillRect(hDC, &rc, hBrush);
|
||||||
|
rc = {
|
||||||
|
m_rc.left + m_pMenu->m_cxyMargin + 4,
|
||||||
|
m_rc.top + cy,
|
||||||
|
m_rc.left + cx + 2,
|
||||||
|
m_rc.top + cy + 1
|
||||||
|
};
|
||||||
|
m_pScheme->DrawMenuSeparator(hDC, &rc);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue