[MSPAINT] Support grayscale palette (#9067)

Preparation for complete
monochrome support.
JIRA issue: CORE-15990
- Add IDM_COLORSGRAYSCALE
  and IDM_COLORSMONOCHROME
  menu items.
- Add PAL_GRAYSCALE and
  PAL_MONOCHROME palette
  modes.
- Add PaletteModel::CreateDitherBrush
  helper function to create a
  dithered brush.
- Use the dithered brush on
  PAL_MONOCHROME in drawing
  the palette window.
This commit is contained in:
Katayama Hirofumi MZ
2026-05-29 20:20:18 +09:00
committed by GitHub
parent d08a581eb1
commit 1cfcfce8cd
36 changed files with 179 additions and 10 deletions
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Нови палитри", IDM_COLORSMODERNPALETTE
MENUITEM "Стари палитри", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Помощ"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Nápověda"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Moderne Palette", IDM_COLORSMODERNPALETTE
MENUITEM "Alte Palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Hilfe"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Help"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Help"
BEGIN
+2
View File
@@ -95,6 +95,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Paleta moderna", IDM_COLORSMODERNPALETTE
MENUITEM "Paleta antigua", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "Ay&uda"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modernne palett", IDM_COLORSMODERNPALETTE
MENUITEM "Vana palett", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Abi"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Paleta modernua", IDM_COLORSMODERNPALETTE
MENUITEM "Paleta zaharra", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Laguntza"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Palette moderne", IDM_COLORSMODERNPALETTE
MENUITEM "Palette ancienne", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Aide"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&עזרה"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Moderna paleta", IDM_COLORSMODERNPALETTE
MENUITEM "Stara paleta", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Pomoć"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern paletta", IDM_COLORSMODERNPALETTE
MENUITEM "Régi paletta", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Súgó"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Warna Modern", IDM_COLORSMODERNPALETTE
MENUITEM "Warna Tua", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Bantuan"
BEGIN
+2
View File
@@ -94,6 +94,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Tavolozza moderna", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Aiuto"
BEGIN
+2
View File
@@ -94,6 +94,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "モダンなパレット", IDM_COLORSMODERNPALETTE
MENUITEM "古いパレット", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "ヘルプ(&H)"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Helpen"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Hjelp"
BEGIN
+2
View File
@@ -95,6 +95,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Nowoczesna paleta", IDM_COLORSMODERNPALETTE
MENUITEM "Stara paleta", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "Pomo&c"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Ajuda"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Palete moderna", IDM_COLORSMODERNPALETTE
MENUITEM "Palete antiga", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Ajuda"
BEGIN
+2
View File
@@ -94,6 +94,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Paletă &modernă", IDM_COLORSMODERNPALETTE
MENUITEM "Paletă &veche", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Ajutor"
BEGIN
+2
View File
@@ -96,6 +96,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Современная", IDM_COLORSMODERNPALETTE
MENUITEM "Старая", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Справка"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Pomocník"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Paleta moderne", IDM_COLORSMODERNPALETTE
MENUITEM "Paleta te vjetra", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Ndihmë"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Hjälp"
BEGIN
+2
View File
@@ -94,6 +94,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Çağdaş Renk Paleti", IDM_COLORSMODERNPALETTE
MENUITEM "&Eski Renk Paleti", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Yardım"
BEGIN
+2
View File
@@ -94,6 +94,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Довідка"
BEGIN
+2
View File
@@ -92,6 +92,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Bảng màu hiện tại", IDM_COLORSMODERNPALETTE
MENUITEM "Bảng màu cũ", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "&Trợ giúp"
BEGIN
+2
View File
@@ -95,6 +95,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "现代调色板", IDM_COLORSMODERNPALETTE
MENUITEM "传统调色板", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "帮助(&H)"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "新調色板", IDM_COLORSMODERNPALETTE
MENUITEM "舊調色板", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "説明(&H)"
BEGIN
+2
View File
@@ -93,6 +93,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "新調色板", IDM_COLORSMODERNPALETTE
MENUITEM "舊調色板", IDM_COLORSOLDPALETTE
MENUITEM "Grayscale palette", IDM_COLORSGRAYSCALE
MENUITEM "Monochrome palette", IDM_COLORSMONOCHROME
END
POPUP "說明(&H)"
BEGIN
+8
View File
@@ -761,6 +761,8 @@ LRESULT CMainWindow::OnInitMenuPopup(UINT nMsg, WPARAM wParam, LPARAM lParam, BO
//
CheckMenuItem(menu, IDM_COLORSMODERNPALETTE, CHECKED_IF(paletteModel.SelectedPalette() == PAL_MODERN));
CheckMenuItem(menu, IDM_COLORSOLDPALETTE, CHECKED_IF(paletteModel.SelectedPalette() == PAL_OLDTYPE));
CheckMenuItem(menu, IDM_COLORSGRAYSCALE, CHECKED_IF(paletteModel.SelectedPalette() == PAL_GRAYSCALE));
CheckMenuItem(menu, IDM_COLORSMONOCHROME, CHECKED_IF(paletteModel.SelectedPalette() == PAL_MONOCHROME));
return 0;
}
@@ -1130,6 +1132,12 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
case IDM_COLORSOLDPALETTE:
paletteModel.SelectPalette(PAL_OLDTYPE);
break;
case IDM_COLORSGRAYSCALE:
paletteModel.SelectPalette(PAL_GRAYSCALE);
break;
case IDM_COLORSMONOCHROME:
paletteModel.SelectPalette(PAL_MONOCHROME);
break;
case IDM_IMAGEINVERTCOLORS:
{
if (selectionModel.m_bShow)
+10 -7
View File
@@ -31,15 +31,12 @@ CPaletteWindow::~CPaletteWindow()
::DeleteObject(m_hbmCached);
}
static VOID drawColorBox(HDC hDC, LPCRECT prc, COLORREF rgbColor, UINT nBorder)
static VOID drawColorBox(HDC hDC, LPCRECT prc, HBRUSH hbr, UINT nBorder)
{
RECT rc = *prc;
::FillRect(hDC, &rc, (HBRUSH)(COLOR_3DFACE + 1));
::DrawEdge(hDC, &rc, nBorder, BF_RECT | BF_ADJUST);
HBRUSH hbr = ::CreateSolidBrush(rgbColor);
::FillRect(hDC, &rc, hbr);
::DeleteObject(hbr);
}
static VOID getColorBoxRect(LPRECT prc, const RECT& rcClient, INT iColor)
@@ -112,20 +109,26 @@ LRESULT CPaletteWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& b
rc.top = Y_MARGIN + (CXY_BIGBOX * 5 / 8) - (CXY_SELECTEDBOX / 2);
rc.right = rc.left + CXY_SELECTEDBOX;
rc.bottom = rc.top + CXY_SELECTEDBOX;
drawColorBox(hMemDC, &rc, paletteModel.GetBgColor(), BDR_RAISEDINNER);
HBRUSH hbrBg = paletteModel.CreateBgBrush();
drawColorBox(hMemDC, &rc, hbrBg, BDR_RAISEDINNER);
DeleteObject(hbrBg);
/* Draw the black box (overlapping the white box), at 3/8 position */
rc.left = X_MARGIN + (CXY_BIGBOX * 3 / 8) - (CXY_SELECTEDBOX / 2);
rc.top = Y_MARGIN + (CXY_BIGBOX * 3 / 8) - (CXY_SELECTEDBOX / 2);
rc.right = rc.left + CXY_SELECTEDBOX;
rc.bottom = rc.top + CXY_SELECTEDBOX;
drawColorBox(hMemDC, &rc, paletteModel.GetFgColor(), BDR_RAISEDINNER);
HBRUSH hbrFg = paletteModel.CreateFgBrush();
drawColorBox(hMemDC, &rc, hbrFg, BDR_RAISEDINNER);
DeleteObject(hbrFg);
/* Draw the normal color boxes */
for (INT i = 0; i < COLOR_COUNT; i++)
{
getColorBoxRect(&rc, rcClient, i);
drawColorBox(hMemDC, &rc, paletteModel.GetColor(i), BDR_SUNKENOUTER);
HBRUSH hbr = paletteModel.CreateColorBrush(paletteModel.GetColor(i));
drawColorBox(hMemDC, &rc, hbr, BDR_SUNKENOUTER);
DeleteObject(hbr);
}
/* Transfer bits (hDC <-- hMemDC) */
+91 -3
View File
@@ -3,7 +3,7 @@
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Keep track of palette data, notify listeners
* COPYRIGHT: Copyright 2015 Benedikt Freisen <[email protected]>
* Copyright 2021 Katayama Hirofumi MZ <[email protected]>
* Copyright 2021-2026 Katayama Hirofumi MZ <[email protected]>
*/
#include "precomp.h"
@@ -14,8 +14,8 @@ PaletteModel paletteModel;
PaletteModel::PaletteModel()
{
m_fgColor = 0x00000000;
m_bgColor = 0x00ffffff;
m_fgColor = RGB(0, 0, 0);
m_bgColor = RGB(255, 255, 255);
SelectPalette(PAL_MODERN);
}
@@ -40,6 +40,13 @@ void PaletteModel::SelectPalette(PAL_TYPE nPalette)
0xffffff, 0xc0c0c0, 0x0000ff, 0x00ffff, 0x00ff00, 0xffff00, 0xff0000,
0xff00ff, 0x80ffff, 0x80ff00, 0xffff80, 0xff8080, 0x8000ff, 0x4080ff
};
static const COLORREF grayscale[NUM_COLORS] =
{
0x000000, 0x090909, 0x121212, 0x1C1C1C, 0x252525, 0x2F2F2F, 0x383838,
0x424242, 0x4B4B4B, 0x555555, 0x5E5E5E, 0x676767, 0x717171, 0x7B7B7B,
0xFFFFFF, 0xF6F6F6, 0xEDEDED, 0xE3E3E3, 0xD9D9D9, 0xD0D0D0, 0xC7C7C7,
0xBDBDBD, 0xB4B4B4, 0xAAAAAA, 0xA1A1A1, 0x979797, 0x8E8E8E, 0x848484
};
switch (nPalette)
{
case PAL_MODERN:
@@ -48,8 +55,14 @@ void PaletteModel::SelectPalette(PAL_TYPE nPalette)
case PAL_OLDTYPE:
CopyMemory(m_colors, oldColors, sizeof(m_colors));
break;
case PAL_GRAYSCALE:
case PAL_MONOCHROME:
CopyMemory(m_colors, grayscale, sizeof(m_colors));
break;
}
m_nSelectedPalette = nPalette;
m_fgColor = RGB(0, 0, 0);
m_bgColor = RGB(255, 255, 255);
NotifyPaletteChanged();
}
@@ -107,3 +120,78 @@ void PaletteModel::NotifyPaletteChanged()
if (paletteWindow.IsWindow())
paletteWindow.Invalidate(FALSE);
}
HBRUSH
PaletteModel::CreateDitherBrush(COLORREF color, COLORREF monoColor0, COLORREF monoColor1)
{
// 8x8 Bayer ordered dithering matrix (0 to 63)
static const BYTE s_bayerMatrix[8][8] =
{
{ 0, 32, 8, 40, 2, 34, 10, 42 },
{ 48, 16, 56, 24, 50, 18, 58, 26 },
{ 12, 44, 4, 36, 14, 46, 6, 38 },
{ 60, 28, 52, 20, 62, 30, 54, 22 },
{ 3, 35, 11, 43, 1, 33, 9, 41 },
{ 51, 19, 59, 27, 49, 17, 57, 25 },
{ 15, 47, 7, 39, 13, 45, 5, 37 },
{ 63, 31, 55, 23, 61, 29, 53, 21 },
};
INT sum = GetRValue(color) + GetGValue(color) + GetBValue(color);
INT brightness = sum / 3;
if (brightness < 0)
brightness = 0;
if (brightness >= 255)
brightness = 256; // White out
BITMAPINFO bmi = {};
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 8;
bmi.bmiHeader.biHeight = -8; // Top-down
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
const BYTE b0 = GetBValue(monoColor0), g0 = GetGValue(monoColor0), r0 = GetRValue(monoColor0);
const BYTE b1 = GetBValue(monoColor1), g1 = GetGValue(monoColor1), r1 = GetRValue(monoColor1);
BYTE pixels[8 * 8 * 3];
for (INT y = 0; y < 8; ++y)
{
INT index = y * (3 * CHAR_BIT);
for (INT x = 0; x < 8; ++x)
{
const INT threshold = s_bayerMatrix[y][x] * 255 / 63;
if (brightness > threshold)
{
pixels[index++] = b1; // Blue
pixels[index++] = g1; // Green
pixels[index++] = r1; // Red
}
else
{
pixels[index++] = b0; // Blue
pixels[index++] = g0; // Green
pixels[index++] = r0; // Red
}
}
}
HDC hdc = GetDC(NULL);
HBITMAP hBitmap = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, pixels, &bmi, DIB_RGB_COLORS);
ReleaseDC(NULL, hdc);
if (!hBitmap)
return NULL;
HBRUSH hBrush = CreatePatternBrush(hBitmap);
DeleteObject(hBitmap);
return hBrush;
}
HBRUSH PaletteModel::CreateColorBrush(COLORREF color)
{
if (m_nSelectedPalette == PAL_MONOCHROME)
return CreateDitherBrush(color, RGB(0, 0, 0), RGB(255, 255, 255));
else
return CreateSolidBrush(color);
}
+6
View File
@@ -13,6 +13,8 @@ enum PAL_TYPE
{
PAL_MODERN = 1,
PAL_OLDTYPE = 2,
PAL_GRAYSCALE = 3,
PAL_MONOCHROME = 4,
};
/* CLASSES **********************************************************/
@@ -27,6 +29,7 @@ private:
void NotifyColorChanged();
void NotifyPaletteChanged();
static HBRUSH CreateDitherBrush(COLORREF color, COLORREF monoColor0, COLORREF monoColor1);
public:
PaletteModel();
@@ -38,4 +41,7 @@ public:
void SetFgColor(COLORREF newColor);
COLORREF GetBgColor() const;
void SetBgColor(COLORREF newColor);
HBRUSH CreateColorBrush(COLORREF color);
HBRUSH CreateFgBrush() { return CreateColorBrush(m_fgColor); }
HBRUSH CreateBgBrush() { return CreateColorBrush(m_bgColor); }
};
+2
View File
@@ -94,6 +94,8 @@
#define IDM_COLORSEDITPALETTE 260
#define IDM_COLORSMODERNPALETTE 261
#define IDM_COLORSOLDPALETTE 262
#define IDM_COLORSGRAYSCALE 263
#define IDM_COLORSMONOCHROME 264
#define IDM_HELPHELPTOPICS 270
#define IDM_HELPINFO 271