diff --git a/base/applications/mspaint/lang/bg-BG.rc b/base/applications/mspaint/lang/bg-BG.rc index ec5e62afb95..0b589c37c23 100644 --- a/base/applications/mspaint/lang/bg-BG.rc +++ b/base/applications/mspaint/lang/bg-BG.rc @@ -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 diff --git a/base/applications/mspaint/lang/cs-CZ.rc b/base/applications/mspaint/lang/cs-CZ.rc index f5566e31d0a..fde6dba98f6 100644 --- a/base/applications/mspaint/lang/cs-CZ.rc +++ b/base/applications/mspaint/lang/cs-CZ.rc @@ -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 diff --git a/base/applications/mspaint/lang/de-DE.rc b/base/applications/mspaint/lang/de-DE.rc index b4e05732ae6..4f1f8a0c1d1 100644 --- a/base/applications/mspaint/lang/de-DE.rc +++ b/base/applications/mspaint/lang/de-DE.rc @@ -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 diff --git a/base/applications/mspaint/lang/en-GB.rc b/base/applications/mspaint/lang/en-GB.rc index ec8338999ab..b711763d481 100644 --- a/base/applications/mspaint/lang/en-GB.rc +++ b/base/applications/mspaint/lang/en-GB.rc @@ -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 diff --git a/base/applications/mspaint/lang/en-US.rc b/base/applications/mspaint/lang/en-US.rc index ee392ecbe63..370e0287d1e 100644 --- a/base/applications/mspaint/lang/en-US.rc +++ b/base/applications/mspaint/lang/en-US.rc @@ -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 diff --git a/base/applications/mspaint/lang/es-ES.rc b/base/applications/mspaint/lang/es-ES.rc index 364fd1d324b..eb36912c4ee 100644 --- a/base/applications/mspaint/lang/es-ES.rc +++ b/base/applications/mspaint/lang/es-ES.rc @@ -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 diff --git a/base/applications/mspaint/lang/et-EE.rc b/base/applications/mspaint/lang/et-EE.rc index e103e5fa881..4bce726c502 100644 --- a/base/applications/mspaint/lang/et-EE.rc +++ b/base/applications/mspaint/lang/et-EE.rc @@ -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 diff --git a/base/applications/mspaint/lang/eu-ES.rc b/base/applications/mspaint/lang/eu-ES.rc index f83d5f9c017..7529b60eaa1 100644 --- a/base/applications/mspaint/lang/eu-ES.rc +++ b/base/applications/mspaint/lang/eu-ES.rc @@ -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 diff --git a/base/applications/mspaint/lang/fr-FR.rc b/base/applications/mspaint/lang/fr-FR.rc index b7aa30eaba7..8a73c1adb6b 100644 --- a/base/applications/mspaint/lang/fr-FR.rc +++ b/base/applications/mspaint/lang/fr-FR.rc @@ -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 diff --git a/base/applications/mspaint/lang/he-IL.rc b/base/applications/mspaint/lang/he-IL.rc index 2973bbf5f99..bd4622f4de5 100644 --- a/base/applications/mspaint/lang/he-IL.rc +++ b/base/applications/mspaint/lang/he-IL.rc @@ -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 diff --git a/base/applications/mspaint/lang/hr-HR.rc b/base/applications/mspaint/lang/hr-HR.rc index 81e1cebb749..cc0e454efd8 100644 --- a/base/applications/mspaint/lang/hr-HR.rc +++ b/base/applications/mspaint/lang/hr-HR.rc @@ -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 diff --git a/base/applications/mspaint/lang/hu-HU.rc b/base/applications/mspaint/lang/hu-HU.rc index 29a7c4c22f5..1e1410627fb 100644 --- a/base/applications/mspaint/lang/hu-HU.rc +++ b/base/applications/mspaint/lang/hu-HU.rc @@ -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 diff --git a/base/applications/mspaint/lang/id-ID.rc b/base/applications/mspaint/lang/id-ID.rc index ae84298458e..82d87f4edd2 100644 --- a/base/applications/mspaint/lang/id-ID.rc +++ b/base/applications/mspaint/lang/id-ID.rc @@ -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 diff --git a/base/applications/mspaint/lang/it-IT.rc b/base/applications/mspaint/lang/it-IT.rc index d7e62a67d1f..8440faa92cd 100644 --- a/base/applications/mspaint/lang/it-IT.rc +++ b/base/applications/mspaint/lang/it-IT.rc @@ -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 diff --git a/base/applications/mspaint/lang/ja-JP.rc b/base/applications/mspaint/lang/ja-JP.rc index da5a20b0d8d..4bca4617e70 100644 --- a/base/applications/mspaint/lang/ja-JP.rc +++ b/base/applications/mspaint/lang/ja-JP.rc @@ -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 diff --git a/base/applications/mspaint/lang/nl-NL.rc b/base/applications/mspaint/lang/nl-NL.rc index e4f6b384df6..5074ea0290c 100644 --- a/base/applications/mspaint/lang/nl-NL.rc +++ b/base/applications/mspaint/lang/nl-NL.rc @@ -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 diff --git a/base/applications/mspaint/lang/no-NO.rc b/base/applications/mspaint/lang/no-NO.rc index 8dc2d39b1c1..acf4eaf05ea 100644 --- a/base/applications/mspaint/lang/no-NO.rc +++ b/base/applications/mspaint/lang/no-NO.rc @@ -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 diff --git a/base/applications/mspaint/lang/pl-PL.rc b/base/applications/mspaint/lang/pl-PL.rc index f96a1a3466e..0099282dd25 100644 --- a/base/applications/mspaint/lang/pl-PL.rc +++ b/base/applications/mspaint/lang/pl-PL.rc @@ -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 diff --git a/base/applications/mspaint/lang/pt-BR.rc b/base/applications/mspaint/lang/pt-BR.rc index 6f046946a40..13b2cdb8a80 100644 --- a/base/applications/mspaint/lang/pt-BR.rc +++ b/base/applications/mspaint/lang/pt-BR.rc @@ -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 diff --git a/base/applications/mspaint/lang/pt-PT.rc b/base/applications/mspaint/lang/pt-PT.rc index c4bd3d7e264..ac40bc0d8b1 100644 --- a/base/applications/mspaint/lang/pt-PT.rc +++ b/base/applications/mspaint/lang/pt-PT.rc @@ -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 diff --git a/base/applications/mspaint/lang/ro-RO.rc b/base/applications/mspaint/lang/ro-RO.rc index e86fe8b412a..bf8e464d0e5 100644 --- a/base/applications/mspaint/lang/ro-RO.rc +++ b/base/applications/mspaint/lang/ro-RO.rc @@ -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 diff --git a/base/applications/mspaint/lang/ru-RU.rc b/base/applications/mspaint/lang/ru-RU.rc index b5025117040..78583fd8cab 100644 --- a/base/applications/mspaint/lang/ru-RU.rc +++ b/base/applications/mspaint/lang/ru-RU.rc @@ -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 diff --git a/base/applications/mspaint/lang/sk-SK.rc b/base/applications/mspaint/lang/sk-SK.rc index b1dbdbf2fca..0233718d458 100644 --- a/base/applications/mspaint/lang/sk-SK.rc +++ b/base/applications/mspaint/lang/sk-SK.rc @@ -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 diff --git a/base/applications/mspaint/lang/sq-AL.rc b/base/applications/mspaint/lang/sq-AL.rc index a72f894ce67..ab63e11f2b8 100644 --- a/base/applications/mspaint/lang/sq-AL.rc +++ b/base/applications/mspaint/lang/sq-AL.rc @@ -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 diff --git a/base/applications/mspaint/lang/sv-SE.rc b/base/applications/mspaint/lang/sv-SE.rc index 1a6dcef8e70..4767ce18544 100644 --- a/base/applications/mspaint/lang/sv-SE.rc +++ b/base/applications/mspaint/lang/sv-SE.rc @@ -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 diff --git a/base/applications/mspaint/lang/tr-TR.rc b/base/applications/mspaint/lang/tr-TR.rc index 911eeabf84a..b2dfebcd1bb 100644 --- a/base/applications/mspaint/lang/tr-TR.rc +++ b/base/applications/mspaint/lang/tr-TR.rc @@ -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 diff --git a/base/applications/mspaint/lang/uk-UA.rc b/base/applications/mspaint/lang/uk-UA.rc index 9dda9ab6502..050e6593742 100644 --- a/base/applications/mspaint/lang/uk-UA.rc +++ b/base/applications/mspaint/lang/uk-UA.rc @@ -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 diff --git a/base/applications/mspaint/lang/vi-VN.rc b/base/applications/mspaint/lang/vi-VN.rc index 928d9bbed97..cf89b33f837 100644 --- a/base/applications/mspaint/lang/vi-VN.rc +++ b/base/applications/mspaint/lang/vi-VN.rc @@ -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 diff --git a/base/applications/mspaint/lang/zh-CN.rc b/base/applications/mspaint/lang/zh-CN.rc index 880369c7162..8e9859fe8d4 100644 --- a/base/applications/mspaint/lang/zh-CN.rc +++ b/base/applications/mspaint/lang/zh-CN.rc @@ -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 diff --git a/base/applications/mspaint/lang/zh-HK.rc b/base/applications/mspaint/lang/zh-HK.rc index a20324b4174..4e07e2ce61e 100644 --- a/base/applications/mspaint/lang/zh-HK.rc +++ b/base/applications/mspaint/lang/zh-HK.rc @@ -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 diff --git a/base/applications/mspaint/lang/zh-TW.rc b/base/applications/mspaint/lang/zh-TW.rc index 0ad7a398407..1f34e07b7ea 100644 --- a/base/applications/mspaint/lang/zh-TW.rc +++ b/base/applications/mspaint/lang/zh-TW.rc @@ -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 diff --git a/base/applications/mspaint/main.cpp b/base/applications/mspaint/main.cpp index 53ae6330017..63e7923ec3a 100644 --- a/base/applications/mspaint/main.cpp +++ b/base/applications/mspaint/main.cpp @@ -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) diff --git a/base/applications/mspaint/palette.cpp b/base/applications/mspaint/palette.cpp index 6e48df5d563..01bd1677791 100644 --- a/base/applications/mspaint/palette.cpp +++ b/base/applications/mspaint/palette.cpp @@ -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) */ diff --git a/base/applications/mspaint/palettemodel.cpp b/base/applications/mspaint/palettemodel.cpp index 6d67523bbe5..aedfe9d5cfb 100644 --- a/base/applications/mspaint/palettemodel.cpp +++ b/base/applications/mspaint/palettemodel.cpp @@ -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 - * Copyright 2021 Katayama Hirofumi MZ + * Copyright 2021-2026 Katayama Hirofumi MZ */ #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); +} diff --git a/base/applications/mspaint/palettemodel.h b/base/applications/mspaint/palettemodel.h index 80ca5e82d04..8731630df98 100644 --- a/base/applications/mspaint/palettemodel.h +++ b/base/applications/mspaint/palettemodel.h @@ -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); } }; diff --git a/base/applications/mspaint/resource.h b/base/applications/mspaint/resource.h index 542af0bae06..360c7c54459 100644 --- a/base/applications/mspaint/resource.h +++ b/base/applications/mspaint/resource.h @@ -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