From 156c91b93ca6674da6f7021b8579b62d79403f20 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 15 Jan 2014 14:53:22 +0000 Subject: correct way of colors & fonts initialization git-svn-id: http://svn.miranda-ng.org/main/trunk@7666 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/chat/chat_opts.cpp | 34 +++++----- src/modules/chat/chat_svc.cpp | 44 ++++++------- src/modules/chat/log.cpp | 140 +++++++++++++---------------------------- src/modules/chat/manager.cpp | 7 ++- 4 files changed, 84 insertions(+), 141 deletions(-) (limited to 'src/modules/chat') diff --git a/src/modules/chat/chat_opts.cpp b/src/modules/chat/chat_opts.cpp index 9702417678..0d5d422310 100644 --- a/src/modules/chat/chat_opts.cpp +++ b/src/modules/chat/chat_opts.cpp @@ -32,15 +32,15 @@ HANDLE g_hOptions = NULL; #define FONTF_ITALIC 2 struct FontOptionsList { - const TCHAR* szDescr; - COLORREF defColour; - const TCHAR* szDefFace; - BYTE defCharset, defStyle; - char defSize; - COLORREF colour; - const TCHAR* szFace; - BYTE charset, style; - char size; + LPCTSTR szDescr; + COLORREF defColour; + LPCTSTR szDefFace; + BYTE defCharset, defStyle; + char defSize; + COLORREF colour; + LPCTSTR szFace; + BYTE charset, style; + char size; } //remeber to put these in the Translate( ) template file too @@ -71,7 +71,7 @@ const int msgDlgFontCount = SIZEOF(fontOptionsList); void LoadLogFonts(void) { - for (int i = 0; i < OPTIONS_FONTCOUNT; i++) + for (int i=0; i < OPTIONS_FONTCOUNT; i++) LoadMsgDlgFont(i, &ci.aFonts[i].lf, &ci.aFonts[i].color); } @@ -115,17 +115,16 @@ void LoadMsgDlgFont(int i, LOGFONT* lf, COLORREF* colour) void RegisterFonts(void) { - FontIDT fontid = { 0 }; - ColourIDT colourid; - char idstr[10]; - int index = 0, i; + int index = 0; - fontid.cbSize = sizeof(FontIDT); + FontIDT fontid = { sizeof(fontid) }; fontid.flags = FIDF_ALLOWREREGISTER | FIDF_DEFAULTVALID | FIDF_NEEDRESTART; - for (i = 0; i < msgDlgFontCount; i++, index++) { + for (int i=0; i < msgDlgFontCount; i++, index++) { strncpy(fontid.dbSettingsGroup, "ChatFonts", sizeof(fontid.dbSettingsGroup)); _tcsncpy(fontid.group, _T("Chat module"), SIZEOF(fontid.group)); _tcsncpy(fontid.name, fontOptionsList[i].szDescr, SIZEOF(fontid.name)); + + char idstr[10]; mir_snprintf(idstr, SIZEOF(idstr), "Font%d", index); strncpy(fontid.prefix, idstr, sizeof(fontid.prefix)); fontid.order = index; @@ -151,8 +150,7 @@ void RegisterFonts(void) FontRegisterT(&fontid); } - colourid.cbSize = sizeof(ColourIDT); - colourid.order = 0; + ColourIDT colourid = { sizeof(colourid) }; strncpy(colourid.dbSettingsGroup, "Chat", sizeof(colourid.dbSettingsGroup)); strncpy(colourid.setting, "ColorLogBG", SIZEOF(colourid.setting)); diff --git a/src/modules/chat/chat_svc.cpp b/src/modules/chat/chat_svc.cpp index 44d6be8c1b..d7cf19655d 100644 --- a/src/modules/chat/chat_svc.cpp +++ b/src/modules/chat/chat_svc.cpp @@ -533,28 +533,6 @@ static int ModulesLoaded(WPARAM wParam, LPARAM lParam) char* mods[3] = { "Chat", "ChatFonts" }; CallService("DBEditorpp/RegisterModule", (WPARAM)mods, 2); - RegisterFonts(); - OptionsInit(); - - CLISTMENUITEM mi = { sizeof(mi) }; - mi.position = -2000090001; - mi.flags = CMIF_DEFAULT; - mi.icolibItem = LoadSkinnedIconHandle(SKINICON_CHAT_JOIN); - mi.pszName = LPGEN("&Join"); - mi.pszService = "GChat/JoinChat"; - hJoinMenuItem = Menu_AddContactMenuItem(&mi); - - mi.position = -2000090000; - mi.icolibItem = LoadSkinnedIconHandle(SKINICON_CHAT_LEAVE); - mi.flags = CMIF_NOTOFFLINE; - mi.pszName = LPGEN("&Leave"); - mi.pszService = "GChat/LeaveChat"; - hLeaveMenuItem = Menu_AddContactMenuItem(&mi); - - HookEvent(ME_FONT_RELOAD, FontsChanged); - HookEvent(ME_SKIN2_ICONSCHANGED, IconsChanged); - HookEvent(ME_SMILEYADD_OPTIONSCHANGED, SmileyOptionsChanged); - ci.SetAllOffline(TRUE, NULL); return 0; } @@ -595,6 +573,28 @@ void LoadChatModule(void) ci.hSendEvent = CreateHookableEvent(ME_GC_EVENT); ci.hBuildMenuEvent = CreateHookableEvent(ME_GC_BUILDMENU); + + RegisterFonts(); + + CLISTMENUITEM mi = { sizeof(mi) }; + mi.position = -2000090001; + mi.flags = CMIF_DEFAULT; + mi.icolibItem = LoadSkinnedIconHandle(SKINICON_CHAT_JOIN); + mi.pszName = LPGEN("&Join"); + mi.pszService = "GChat/JoinChat"; + hJoinMenuItem = Menu_AddContactMenuItem(&mi); + + mi.position = -2000090000; + mi.icolibItem = LoadSkinnedIconHandle(SKINICON_CHAT_LEAVE); + mi.flags = CMIF_NOTOFFLINE; + mi.pszName = LPGEN("&Leave"); + mi.pszService = "GChat/LeaveChat"; + hLeaveMenuItem = Menu_AddContactMenuItem(&mi); + + HookEvent(ME_FONT_RELOAD, FontsChanged); + HookEvent(ME_SKIN2_ICONSCHANGED, IconsChanged); + HookEvent(ME_SMILEYADD_OPTIONSCHANGED, SmileyOptionsChanged); + bInited = true; } diff --git a/src/modules/chat/log.cpp b/src/modules/chat/log.cpp index f791809f54..61bbde9585 100644 --- a/src/modules/chat/log.cpp +++ b/src/modules/chat/log.cpp @@ -339,20 +339,16 @@ char* Log_CreateRTF(LOGSTREAMDATA *streamData) if (header) Log_Append(&buffer, &bufferEnd, &bufferAlloced, header); - // ### RTF BODY (one iteration per event that should be streamed in) - while ( lin ) - { + while (lin) { // filter - if (streamData->si->iType != GCW_CHATROOM || !streamData->si->bFilterEnabled || (streamData->si->iLogFilterFlags&lin->iType) != 0) - { + if (streamData->si->iType != GCW_CHATROOM || !streamData->si->bFilterEnabled || (streamData->si->iLogFilterFlags&lin->iType) != 0) { // create new line, and set font and color Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\par%s ", Log_SetStyle(0, 0)); // Insert icon - if (lin->iType&ci.pSettings->dwIconFlags || lin->bIsHighlighted&&ci.pSettings->dwIconFlags&GC_EVENT_HIGHLIGHT) - { - int iIndex = (lin->bIsHighlighted&&ci.pSettings->dwIconFlags&GC_EVENT_HIGHLIGHT) ? ICON_HIGHLIGHT : EventToIcon(lin); + if (lin->iType & ci.pSettings->dwIconFlags || lin->bIsHighlighted&&ci.pSettings->dwIconFlags & GC_EVENT_HIGHLIGHT) { + int iIndex = (lin->bIsHighlighted && ci.pSettings->dwIconFlags & GC_EVENT_HIGHLIGHT) ? ICON_HIGHLIGHT : EventToIcon(lin); Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\f0\\fs14"); while (bufferAlloced - bufferEnd < logIconBmpSize[0]) bufferAlloced += 4096; @@ -361,35 +357,31 @@ char* Log_CreateRTF(LOGSTREAMDATA *streamData) bufferEnd += logIconBmpSize[iIndex]; } - if (ci.pSettings->TimeStampEventColour) - { + if (ci.pSettings->TimeStampEventColour) { LOGFONT &lf = ci.aFonts[0].lf; // colored timestamps static char szStyle[256]; int iii; - if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE) - { + if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE) { iii = lin->bIsHighlighted?16:(lin->bIsMe ? 2 : 1); mir_snprintf(szStyle, SIZEOF(szStyle), "\\f0\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", iii + 1, lf.lfWeight >= FW_BOLD ? 1 : 0, lf.lfItalic, 2 * abs(lf.lfHeight) * 74 / ci.logPixelSY); Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", szStyle); } - else - { + else { iii = lin->bIsHighlighted?16:EventToIndex(lin); mir_snprintf(szStyle, SIZEOF(szStyle), "\\f0\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", iii + 1, lf.lfWeight >= FW_BOLD ? 1 : 0, lf.lfItalic, 2 * abs(lf.lfHeight) * 74 / ci.logPixelSY); Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", szStyle); } } - else - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(0, 0 )); + else Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(0, 0 )); + // insert a TAB if necessary to put the timestamp in the right position if (ci.pSettings->dwIconFlags) Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tab "); //insert timestamp - if (ci.pSettings->ShowTime) - { + if (ci.pSettings->ShowTime) { TCHAR szTimeStamp[30], szOldTimeStamp[30]; lstrcpyn( szTimeStamp, MakeTimeStamp(ci.pSettings->pszTimeStamp, lin->time), 30); @@ -402,8 +394,7 @@ char* Log_CreateRTF(LOGSTREAMDATA *streamData) } // Insert the nick - if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE) - { + if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE) { TCHAR pszTemp[300], *p1; Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(lin->bIsMe ? 2 : 1, lin->bIsMe ? 2 : 1)); @@ -417,13 +408,10 @@ char* Log_CreateRTF(LOGSTREAMDATA *streamData) } // Insert the message - { - i = lin->bIsHighlighted?16:EventToIndex(lin); - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(i, i)); - streamData->lin = lin; - AddEventToBuffer(&buffer, &bufferEnd, &bufferAlloced, streamData); - } - + i = lin->bIsHighlighted?16:EventToIndex(lin); + Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(i, i)); + streamData->lin = lin; + AddEventToBuffer(&buffer, &bufferEnd, &bufferAlloced, streamData); } lin = lin->prev; } @@ -433,49 +421,17 @@ char* Log_CreateRTF(LOGSTREAMDATA *streamData) return buffer; } -static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb) +char* Log_CreateRtfHeader(MODULEINFO *mi) { - LOGSTREAMDATA *lstrdat = (LOGSTREAMDATA *) dwCookie; - - if (lstrdat) - { - // create the RTF - if (lstrdat->buffer == NULL) - { - lstrdat->bufferOffset = 0; - lstrdat->buffer = Log_CreateRTF(lstrdat); - lstrdat->bufferLen = lstrlenA(lstrdat->buffer); - } - - // give the RTF to the RE control - *pcb = min(cb, lstrdat->bufferLen - lstrdat->bufferOffset); - CopyMemory(pbBuff, lstrdat->buffer + lstrdat->bufferOffset, *pcb); - lstrdat->bufferOffset += *pcb; - - // free stuff if the streaming operation is complete - if (lstrdat->bufferOffset == lstrdat->bufferLen) - { - mir_free(lstrdat->buffer); - lstrdat->buffer = NULL; - } - } - - return 0; -} - -char* Log_CreateRtfHeader(MODULEINFO * mi) -{ - char *buffer; - int bufferAlloced, bufferEnd, i = 0; + int bufferAlloced, bufferEnd, i; // guesstimate amount of memory for the RTF header bufferEnd = 0; bufferAlloced = 4096; - buffer = (char *) mir_realloc(mi->pszHeader, bufferAlloced); + char *buffer = (char *)mir_realloc(mi->pszHeader, bufferAlloced); buffer[0] = '\0'; - - //get the number of pixels per logical inch + // get the number of pixels per logical inch HDC hdc = GetDC(NULL); ci.logPixelSY = GetDeviceCaps(hdc, LOGPIXELSY); ci.logPixelSX = GetDeviceCaps(hdc, LOGPIXELSX); @@ -501,36 +457,25 @@ char* Log_CreateRtfHeader(MODULEINFO * mi) Log_Append(&buffer, &bufferEnd, &bufferAlloced, "}\\pard"); // set tabs and indents - { - int iIndent = 0; + int iIndent = 0; - if (ci.pSettings->dwIconFlags) - { - iIndent += (14 * 1440) / ci.logPixelSX; - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent); - } - if (ci.pSettings->ShowTime) - { - int iSize = (ci.pSettings->LogTextIndent * 1440) / ci.logPixelSX; - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize ); - if (ci.pSettings->LogIndentEnabled) - iIndent += iSize; - } - /* - { // text indent - int iSize = (135*1440)/logPixelSX; - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize ); + if (ci.pSettings->dwIconFlags) { + iIndent += (14 * 1440) / ci.logPixelSX; + Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent); + } + if (ci.pSettings->ShowTime) { + int iSize = (ci.pSettings->LogTextIndent * 1440) / ci.logPixelSX; + Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize); if (ci.pSettings->LogIndentEnabled) - iIndent += iSize; - - } - */ - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\fi-%u\\li%u", iIndent, iIndent); + iIndent += iSize; } + + Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\fi-%u\\li%u", iIndent, iIndent); return buffer; } -#define RTFPICTHEADERMAXSIZE 78 +#define RTFPICTHEADERMAXSIZE 78 + void LoadMsgLogBitmaps(void) { HBRUSH hBkgBrush = CreateSolidBrush(db_get_dw(NULL, "Chat", "ColorLogBG", GetSysColor(COLOR_WINDOW))); @@ -556,20 +501,20 @@ void LoadMsgLogBitmaps(void) for (int i = 0; i < SIZEOF(pLogIconBmpBits); i++) { HICON hIcon = ci.hIcons[i]; size_t size = RTFPICTHEADERMAXSIZE + (bih.biSize + widthBytes * bih.biHeight) * 2; - pLogIconBmpBits[i] = (PBYTE) mir_alloc(size); + pLogIconBmpBits[i] = (PBYTE)mir_alloc(size); int rtfHeaderSize = mir_snprintf((char *)pLogIconBmpBits[i], size, "{\\pict\\dibitmap0\\wbmbitspixel%u\\wbmplanes1\\wbmwidthbytes%u\\picw%u\\pich%u ", bih.biBitCount, widthBytes, bih.biWidth, bih.biHeight); HBITMAP hoBmp = (HBITMAP)SelectObject(hdcMem, hBmp); FillRect(hdcMem, &rc, hBkgBrush); DrawIconEx(hdcMem, 0, 0, hIcon, bih.biWidth, bih.biHeight, 0, NULL, DI_NORMAL); SelectObject(hdcMem, hoBmp); - GetDIBits(hdc, hBmp, 0, bih.biHeight, pBmpBits, (BITMAPINFO *) & bih, DIB_RGB_COLORS); - { - int n; - for (n = 0; n < sizeof(BITMAPINFOHEADER); n++) - sprintf((char *)pLogIconBmpBits[i] + rtfHeaderSize + n * 2, "%02X", ((PBYTE) & bih)[n]); //!!!!!!!!!!!!! - for (n = 0; n < widthBytes * bih.biHeight; n += 4) - sprintf((char *)pLogIconBmpBits[i] + rtfHeaderSize + (bih.biSize + n) * 2, "%02X%02X%02X%02X", pBmpBits[n], pBmpBits[n + 1], pBmpBits[n + 2], pBmpBits[n + 3]); //!!!!!!!!!!!!! - } + GetDIBits(hdc, hBmp, 0, bih.biHeight, pBmpBits, (BITMAPINFO *)& bih, DIB_RGB_COLORS); + + int n; + for (n = 0; n < sizeof(BITMAPINFOHEADER); n++) + sprintf((char *)pLogIconBmpBits[i] + rtfHeaderSize + n * 2, "%02X", ((PBYTE)& bih)[n]); //!!!!!!!!!!!!! + for (n = 0; n < widthBytes * bih.biHeight; n += 4) + sprintf((char *)pLogIconBmpBits[i] + rtfHeaderSize + (bih.biSize + n) * 2, "%02X%02X%02X%02X", pBmpBits[n], pBmpBits[n + 1], pBmpBits[n + 2], pBmpBits[n + 3]); //!!!!!!!!!!!!! + logIconBmpSize[i] = rtfHeaderSize + (bih.biSize + widthBytes * bih.biHeight) * 2 + 1; pLogIconBmpBits[i][logIconBmpSize[i] - 1] = '}'; } @@ -582,7 +527,6 @@ void LoadMsgLogBitmaps(void) void FreeMsgLogBitmaps(void) { - int i; - for (i = 0; i < SIZEOF(pLogIconBmpBits); i++) + for (int i = 0; i < SIZEOF(pLogIconBmpBits); i++) mir_free(pLogIconBmpBits[i]); } diff --git a/src/modules/chat/manager.cpp b/src/modules/chat/manager.cpp index 4b2194df98..cacb05eb50 100644 --- a/src/modules/chat/manager.cpp +++ b/src/modules/chat/manager.cpp @@ -66,8 +66,7 @@ static SESSION_INFO* SM_AddSession(const TCHAR *pszID, const char *pszModule) return NULL; if (!ci.SM_FindSession(pszID, pszModule)) { - SESSION_INFO *node = (SESSION_INFO*)mir_alloc(sizeof(SESSION_INFO)); - ZeroMemory(node, sizeof(SESSION_INFO)); + SESSION_INFO *node = (SESSION_INFO*)mir_calloc(sizeof(SESSION_INFO)); node->ptszID = mir_tstrdup(pszID); node->pszModule = mir_strdup(pszModule); @@ -1483,8 +1482,10 @@ CHAT_MANAGER ci = LoadMsgDlgFont }; -INT_PTR SvcGetChatManager(WPARAM, LPARAM) +INT_PTR SvcGetChatManager(WPARAM, LPARAM lParam) { LoadChatModule(); + ci.pSettings = (GlobalLogSettingsBase*)lParam; + OptionsInit(); return (INT_PTR)&ci; } -- cgit v1.2.3