From 2ad54d3a441e42f187213f1bdec14d61272a3b27 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 21 Mar 2024 18:26:38 +0300 Subject: for #4289 - fix for a font color in NS --- plugins/NewStory/src/TxDIB.cpp | 8 ++------ plugins/NewStory/src/history_control.cpp | 20 +++++++++++--------- plugins/NewStory/src/history_control.h | 3 ++- plugins/NewStory/src/templates.cpp | 2 +- plugins/NewStory/src/webpage.cpp | 12 ++++++++++++ 5 files changed, 28 insertions(+), 17 deletions(-) (limited to 'plugins/NewStory/src') diff --git a/plugins/NewStory/src/TxDIB.cpp b/plugins/NewStory/src/TxDIB.cpp index 094fd4a2f2..074bc57403 100644 --- a/plugins/NewStory/src/TxDIB.cpp +++ b/plugins/NewStory/src/TxDIB.cpp @@ -326,9 +326,6 @@ void CTxDIB::tile(HDC hdc, LPRECT rcDraw, LPRECT rcClip /*= NULL*/) bf.AlphaFormat = AC_SRC_ALPHA; bf.SourceConstantAlpha = 255; - int x = 0; - int y = 0; - HBITMAP bmp = createBitmap(hdc); HDC memDC = CreateCompatibleDC(hdc); HBITMAP oldBmp = (HBITMAP)SelectObject(memDC, bmp); @@ -415,7 +412,7 @@ BOOL CTxDIB::createFromHBITMAP(HBITMAP bmp) if (dib) { int nColors = FreeImage_GetColorsUsed(dib); HDC dc = GetDC(NULL); - int res = GetDIBits(dc, bmp, 0, FreeImage_GetHeight(dib), FreeImage_GetBits(dib), FreeImage_GetInfo(dib), DIB_RGB_COLORS); + GetDIBits(dc, bmp, 0, FreeImage_GetHeight(dib), FreeImage_GetBits(dib), FreeImage_GetInfo(dib), DIB_RGB_COLORS); ReleaseDC(NULL, dc); FreeImage_GetInfoHeader(dib)->biClrUsed = nColors; FreeImage_GetInfoHeader(dib)->biClrImportant = nColors; @@ -445,7 +442,6 @@ BOOL CTxDIB::attach(LPVOID pdib) } } if (dib) { - BITMAPINFO *hdr = FreeImage_GetInfo(dib); m_width = FreeImage_GetWidth(dib); m_height = FreeImage_GetHeight(dib); m_bits = (LPRGBQUAD)malloc(m_width * m_height * sizeof(RGBQUAD)); @@ -759,7 +755,7 @@ bool CTxDIB::QIShrink(int newWidth, int newHeight, CTxDIB *dst /*= NULL */) srcPtrS = m_bits; destPtrS = newBits; int ex = 0, ey = 0; //ex and ey replace division... - int dy = 0; + //(we just add pixels, until by adding newWidth or newHeight we get a number greater than old size... then // it's time to move to next pixel) diff --git a/plugins/NewStory/src/history_control.cpp b/plugins/NewStory/src/history_control.cpp index b5e323d412..d559085d5f 100644 --- a/plugins/NewStory/src/history_control.cpp +++ b/plugins/NewStory/src/history_control.cpp @@ -676,32 +676,31 @@ void NewstoryListData::Paint(simpledib::dib &dib, RECT *rcDraw) POINT pos; int height = pItem->calcHeight(top, cachedWindowWidth, &pos); - COLORREF clText, clBack, clLine; + COLORREF clLine; int fontid, colorid; pItem->getFontColor(fontid, colorid); if (pItem->m_bHighlighted) { - clText = g_fontTable[FONT_HIGHLIGHT].cl; - clBack = g_colorTable[COLOR_HIGHLIGHT_BACK].cl; + webPage.clText = g_fontTable[FONT_HIGHLIGHT].cl; + webPage.clBack = g_colorTable[COLOR_HIGHLIGHT_BACK].cl; clLine = g_colorTable[COLOR_FRAME].cl; } else if (pItem->m_bSelected) { - clText = g_colorTable[COLOR_SELTEXT].cl; - clBack = g_colorTable[COLOR_SELBACK].cl; + webPage.clText = g_colorTable[COLOR_SELTEXT].cl; + webPage.clBack = g_colorTable[COLOR_SELBACK].cl; clLine = g_colorTable[COLOR_SELFRAME].cl; } else { - clText = g_fontTable[fontid].cl; + webPage.clText = g_fontTable[fontid].cl; + webPage.clBack = g_colorTable[colorid].cl; clLine = g_colorTable[COLOR_FRAME].cl; - clBack = g_colorTable[colorid].cl; } - HBRUSH hbr = CreateSolidBrush(clBack); + HBRUSH hbr = CreateSolidBrush(webPage.clBack); RECT rc = { 0, top, cachedWindowWidth, top + height }; FillRect(dib, &rc, hbr); DeleteObject(hbr); - SetTextColor(dib, clText); SetBkMode(dib, TRANSPARENT); pos.x = 2; @@ -786,6 +785,9 @@ void NewstoryListData::Paint(simpledib::dib &dib, RECT *rcDraw) RECT rc = { 0, 0, cachedWindowWidth, cachedWindowHeight }; DrawEdge(dib, &rc, BDR_SUNKENOUTER, BF_RECT); } + + cairo_destroy(cr); + cairo_surface_destroy(surface); } void NewstoryListData::RecalcScrollBar() diff --git a/plugins/NewStory/src/history_control.h b/plugins/NewStory/src/history_control.h index 3667a22d4e..41ee67ed1c 100644 --- a/plugins/NewStory/src/history_control.h +++ b/plugins/NewStory/src/history_control.h @@ -11,6 +11,7 @@ class NSWebPage : public windows_container cairo_images_cache m_images; cairo_surface_t *get_image(const std::string &url) override; + litehtml::string resolve_color(const litehtml::string &color) const; void get_client_rect(litehtml::position &client) const override; void import_css(litehtml::string &text, const litehtml::string &url, litehtml::string &baseurl) override; @@ -28,7 +29,7 @@ public: ctrl(_1) {} - litehtml::uint_ptr getRC() const { return (litehtml::uint_ptr)m_temp_cr; } + COLORREF clText = -1, clBack = -1; }; struct NewstoryListData : public MZeroedObject diff --git a/plugins/NewStory/src/templates.cpp b/plugins/NewStory/src/templates.cpp index 9d73c35d1b..adf7870a50 100644 --- a/plugins/NewStory/src/templates.cpp +++ b/plugins/NewStory/src/templates.cpp @@ -135,7 +135,7 @@ CMStringA ItemData::formatHtml(const wchar_t *pwszStr) auto &F = g_fontTable[fontID]; char szFont[100]; - str.AppendFormat("body {margin: 0px; text-align: left; %s; overflow: auto;}\n", font2html(F.lf, szFont)); + str.AppendFormat("body {margin: 0px; text-align: left; %s; color: NSText; overflow: auto;}\n", font2html(F.lf, szFont)); str.AppendFormat(".nick {color: #%06X }\n", color2html(g_colorTable[(dbe.flags & DBEF_SENT) ? COLOR_OUTNICK : COLOR_INNICK].cl)); str.Append("\n"); diff --git a/plugins/NewStory/src/webpage.cpp b/plugins/NewStory/src/webpage.cpp index 1c74ea683c..f4b9be0c99 100644 --- a/plugins/NewStory/src/webpage.cpp +++ b/plugins/NewStory/src/webpage.cpp @@ -39,6 +39,18 @@ cairo_surface_t *dib_to_surface(CTxDIB &img) return surface; } +litehtml::string NSWebPage::resolve_color(const litehtml::string &color) const +{ + char buf[20]; + + if (color == "NSText") { + mir_snprintf(buf, "#%02X%02X%02X", GetRValue(clText), GetGValue(clText), GetBValue(clText)); + return buf; + } + + return windows_container::resolve_color(color); +} + void NSWebPage::on_image_loaded(const wchar_t *file, const wchar_t *url, bool redraw_only) { if (!mir_wstrncmp(file, L"file://", 7)) -- cgit v1.2.3