Skip to content

Commit

Permalink
Merge pull request #29 from chirsz-ever/color-200704
Browse files Browse the repository at this point in the history
修正颜色格式相关
  • Loading branch information
wysaid authored Jul 4, 2020
2 parents 8624fe4 + 65bcfce commit f76ecae
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 37 deletions.
15 changes: 7 additions & 8 deletions src/ege.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,19 +160,18 @@
#endif

#define SHOWCONSOLE 1 // 进入图形模式时,保留控制台的显示
#define RGBTOBGR(color) ((((color) & 0xFF) << 16) | (((color) & 0xFF0000) >> 16) | ((color) & 0xFF00FF00))
#define EGERGB(r, g, b) ( ((r)<<16) | ((g)<<8) | (b))
#define EGERGBA(r, g, b, a) ( ((r)<<16) | ((g)<<8) | (b) | ((a)<<24) )
#define EGEARGB(a, r, g, b) ( ((r)<<16) | ((g)<<8) | (b) | ((a)<<24) )
#define EGERGB(r, g, b) EGERGBA(r, g, b, 0xFF)
#define EGEARGB(a, r, g, b) EGERGBA(r, g, b, a)
#define EGEACOLOR(a, color) ( ((color) & 0xFFFFFF) | ((a)<<24) )
#define EGECOLORA(color, a) ( ((color) & 0xFFFFFF) | ((a)<<24) )
#define EGECOLORA(color, a) EGEACOLOR(a, color)
#define EGEGET_R(c) ( ((c)>>16) & 0xFF )
#define EGEGET_G(c) ( ((c)>> 8) & 0xFF )
#define EGEGET_B(c) ( ((c)) & 0xFF )
#define EGEGET_A(c) ( ((c)>>24) & 0xFF )
#define EGEGRAY(gray) ( ((gray)<<16) | ((gray)<<8) | (gray))
#define EGEGRAYA(gray, a) ( ((gray)<<16) | ((gray)<<8) | (gray) | ((a)<<24) )
#define EGEAGRAY(a, gray) ( ((gray)<<16) | ((gray)<<8) | (gray) | ((a)<<24) )
#define EGEGRAY(gray) EGERGB(gray, gray, gray)
#define EGEGRAYA(gray, a) EGERGBA(gray, gray, gray, a)
#define EGEAGRAY(a, gray) EGEGRAYA(gray, a)
#define NAMESPACE_EGE_L namespace ege {
#define NAMESPACE_EGE_R }

Expand Down Expand Up @@ -263,7 +262,7 @@ enum message_mouse {

// 颜色
enum COLORS {
BLACK = 0,
BLACK = EGERGB(0, 0, 0),
BLUE = EGERGB(0, 0, 0xA8),
GREEN = EGERGB(0, 0xA8, 0),
CYAN = EGERGB(0, 0xA8, 0xA8),
Expand Down
20 changes: 1 addition & 19 deletions src/ege/sys_edit.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,25 +79,7 @@ class sys_edit : public egeControlBase
}
return 0;
}
LRESULT onMessage(UINT message, WPARAM wParam, LPARAM lParam) {
if (message == WM_CTLCOLOREDIT) {
HDC dc = (HDC)wParam;
HBRUSH br = ::CreateSolidBrush(RGBTOBGR(m_bgcolor));

::SetBkColor(dc, RGBTOBGR(m_bgcolor));
::SetTextColor(dc, RGBTOBGR(m_color));
::DeleteObject(m_hBrush);
m_hBrush = br;
return (LRESULT)br;
//} else if (message == WM_SETFOCUS) {
// int a = 0;
// int b = 1;
// return 0;
} else {
return ((LRESULT (CALLBACK *)(HWND, UINT, WPARAM, LPARAM))m_callback)(m_hwnd, message, wParam, lParam);
}
//return 0;
}
LRESULT onMessage(UINT message, WPARAM wParam, LPARAM lParam);
void visible(bool bvisible) {
egeControlBase::visible(bvisible);
::ShowWindow(m_hwnd, (int)bvisible);
Expand Down
8 changes: 8 additions & 0 deletions src/ege_head.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,14 @@
#define IFATODOB(A, B) ( (A) && (B, 0) )
#define IFNATODOB(A, B) ( (A) || (B, 0) )

// 0xaarrggbb -> 0xaabbggrr
#define RGBTOBGR(color) ((((color) & 0xFF) << 16) | (((color) & 0xFF0000) >> 16) | ((color) & 0xFF00FF00))

// 将 color_t 与 Bitmap Buffer 所用的 0xaarrggbb 格式
// 转换为 COLORREF 所用的 0x00bbggrr,忽略 Alpha 通道
// 仅用于向 GDI32 API 传递颜色时
#define ARGBTOZBGR(c) ((((c) & 0xFF) << 16) | (((c) & 0xFF0000) >> 16) | ((c) & 0xFF00))

#define CONVERT_IMAGE(pimg) ( ((size_t)(pimg)<0x20 ?\
((pimg) ?\
(graph_setting.img_page[(size_t)(pimg) & 0xF])\
Expand Down
39 changes: 29 additions & 10 deletions src/egegapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,7 @@ static int upattern2array(unsigned short upattern, DWORD style[]) {

static void update_pen(PIMAGE img) {
LOGBRUSH lbr;
lbr.lbColor = RGBTOBGR(img->m_color) & 0x00FFFFFF;
lbr.lbColor = ARGBTOZBGR(img->m_color);
lbr.lbStyle = BS_SOLID;
lbr.lbHatch = 0;

Expand Down Expand Up @@ -728,7 +728,7 @@ setcolor(color_t color, PIMAGE pimg) {
img->m_color = color;

update_pen(img);
SetTextColor(img->m_hDC, RGBTOBGR(color) & 0x00FFFFFF);
SetTextColor(img->m_hDC, ARGBTOZBGR(color));
}
CONVERT_IMAGE_END;
}
Expand All @@ -738,8 +738,7 @@ setfillcolor(color_t color, PIMAGE pimg) {
PIMAGE img = CONVERT_IMAGE_CONST(pimg);
LOGBRUSH lbr = {0};
img->m_fillcolor = color;
color = RGBTOBGR(color);
lbr.lbColor = color;
lbr.lbColor = ARGBTOZBGR(color);
lbr.lbHatch = BS_SOLID;
HBRUSH hbr = CreateBrushIndirect(&lbr);
if (hbr) {
Expand Down Expand Up @@ -780,7 +779,7 @@ setbkcolor(color_t color, PIMAGE pimg) {
int size = img->m_width * img->m_height;
color_t col = img->m_bk_color;
img->m_bk_color = color;
SetBkColor(img->m_hDC, RGBTOBGR(color));
SetBkColor(img->m_hDC, ARGBTOZBGR(color));
for (int n = 0; n < size; n++, p++) {
if (*p == col) {
*p = color;
Expand All @@ -795,7 +794,7 @@ setbkcolor_f(color_t color, PIMAGE pimg) {

if (img && img->m_hDC) {
img->m_bk_color = color;
SetBkColor(img->m_hDC, RGBTOBGR(color));
SetBkColor(img->m_hDC, ARGBTOZBGR(color));
}
CONVERT_IMAGE_END;
}
Expand All @@ -804,7 +803,7 @@ void setfontbkcolor(color_t color, PIMAGE pimg) {
PIMAGE img = CONVERT_IMAGE(pimg);

if (img && img->m_hDC) {
SetBkColor(img->m_hDC, RGBTOBGR(color));
SetBkColor(img->m_hDC, ARGBTOZBGR(color));
}
CONVERT_IMAGE_END;
}
Expand Down Expand Up @@ -1090,7 +1089,7 @@ void
floodfill(int x, int y, int border, PIMAGE pimg) {
PIMAGE img = CONVERT_IMAGE(pimg);
if (img) {
FloodFill(img->m_hDC, x, y, RGBTOBGR(border));
FloodFill(img->m_hDC, x, y, ARGBTOZBGR(border));
}
CONVERT_IMAGE_END;
}
Expand All @@ -1099,7 +1098,7 @@ void
floodfillsurface(int x, int y, color_t areacolor, PIMAGE pimg) {
PIMAGE img = CONVERT_IMAGE(pimg);
if (img) {
ExtFloodFill(img->m_hDC, x, y, RGBTOBGR(areacolor), FLOODFILLSURFACE);
ExtFloodFill(img->m_hDC, x, y, ARGBTOZBGR(areacolor), FLOODFILLSURFACE);
}
CONVERT_IMAGE_END;
}
Expand Down Expand Up @@ -1472,7 +1471,7 @@ setfillstyle(int pattern, color_t color, PIMAGE pimg) {
PIMAGE img = CONVERT_IMAGE_CONST(pimg);
LOGBRUSH lbr = {0};
img->m_fillcolor = color;
lbr.lbColor = RGBTOBGR(color);
lbr.lbColor = ARGBTOZBGR(color);
//SetBkColor(img->m_hDC, color);
if (pattern < SOLID_FILL) {
lbr.lbHatch = BS_NULL;
Expand Down Expand Up @@ -2611,4 +2610,24 @@ ege_uncompress(void *dest, unsigned long *destLen, const void *source, unsigned
}
}

LRESULT sys_edit::onMessage(UINT message, WPARAM wParam, LPARAM lParam) {
if (message == WM_CTLCOLOREDIT) {
HDC dc = (HDC)wParam;
HBRUSH br = ::CreateSolidBrush(ARGBTOZBGR(m_bgcolor));

::SetBkColor(dc, ARGBTOZBGR(m_bgcolor));
::SetTextColor(dc, ARGBTOZBGR(m_color));
::DeleteObject(m_hBrush);
m_hBrush = br;
return (LRESULT)br;
//} else if (message == WM_SETFOCUS) {
// int a = 0;
// int b = 1;
// return 0;
} else {
return ((LRESULT (CALLBACK *)(HWND, UINT, WPARAM, LPARAM))m_callback)(m_hwnd, message, wParam, lParam);
}
//return 0;
}

} // namespace ege

0 comments on commit f76ecae

Please sign in to comment.