From 05f6cf3f7788f8bfe5ee589a9f27a89217c67989 Mon Sep 17 00:00:00 2001 From: pescuma Date: Sat, 3 Jan 2009 05:12:30 +0000 Subject: skins: It's ALIVE! git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@121 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/skins/MirandaFont.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Plugins/skins/MirandaFont.cpp (limited to 'Plugins/skins/MirandaFont.cpp') diff --git a/Plugins/skins/MirandaFont.cpp b/Plugins/skins/MirandaFont.cpp new file mode 100644 index 0000000..e8f45d5 --- /dev/null +++ b/Plugins/skins/MirandaFont.cpp @@ -0,0 +1,88 @@ +#include "MirandaFont.h" + +MirandaFont::MirandaFont(Field *aField, const char *description) + : field(aField), hFont(NULL) +{ + ZeroMemory(&fid, sizeof(fid)); + strncpy(fid.name, description, sizeof(fid.name)); +} + +MirandaFont::~MirandaFont() +{ + releaseFont(); +} + +void MirandaFont::registerFont(FontState *font) +{ + if (fid.cbSize != 0) + return; + + MirandaSkinnedDialog * dlg = (MirandaSkinnedDialog *) field->getDialog(); + + HDC hdc = GetDC(NULL); + + // ZeroMemory(&fid, sizeof(fid)); + fid.cbSize = sizeof(fid); + strncpy(fid.group, field->getDialog()->getName(), sizeof(fid.group)); + strncpy(fid.dbSettingsGroup, dlg->getModule(), sizeof(fid.dbSettingsGroup)); + + char tmp[sizeof(fid.prefix)]; + mir_snprintf(tmp, sizeof(tmp), "%s_%s_Font_", field->getDialog()->getName(), field->getName()); + strncpy(fid.prefix, tmp, sizeof(fid.prefix)); + + fid.deffontsettings.colour = font->getColor(); + fid.deffontsettings.size = -MulDiv(font->getSize(), GetDeviceCaps(hdc, LOGPIXELSY), 72); + fid.deffontsettings.style = (font->isBold() ? DBFONTF_BOLD : 0) + | (font->isItalic() ? DBFONTF_ITALIC : 0) + | (font->isUnderline() ? DBFONTF_UNDERLINE : 0) + | (font->isStrikeOut() ? DBFONTF_STRIKEOUT : 0); + fid.deffontsettings.charset = DEFAULT_CHARSET; + strncpy(fid.deffontsettings.szFace, TcharToUtf8(font->getFace()), sizeof(fid.deffontsettings.szFace)); + fid.order = dlg->getIndexOf(field); + fid.flags = FIDF_DEFAULTVALID | FIDF_ALLOWEFFECTS; + + CallService(MS_FONT_REGISTER, (WPARAM)&fid, 0); + + ReleaseDC(NULL, hdc); + + HookEventObj(ME_FONT_RELOAD, staticReloadFont, this); + + reloadFont(); +} + +void MirandaFont::reloadFont() +{ + releaseFont(); + + LOGFONT log_font; + COLORREF color = (COLORREF) CallService(MS_FONT_GET, (WPARAM) &fid, (LPARAM) &log_font); + hFont = CreateFontIndirect(&log_font); + + switch(field->getType()) + { + case SIMPLE_TEXT: + ((TextField *) field)->setFontColor(color); + ((TextField *) field)->setFont(hFont); + break; + case CONTROL_LABEL: + case CONTROL_BUTTON: + case CONTROL_EDIT: + ((ControlField *) field)->setFont(hFont); + break; + } +} + +int MirandaFont::staticReloadFont(void *obj, WPARAM wParam, LPARAM lParam) +{ + ((MirandaFont *) obj)->reloadFont(); + return 0; +} + +void MirandaFont::releaseFont() +{ + if (hFont != NULL) + { + DeleteObject(hFont); + hFont = NULL; + } +} \ No newline at end of file -- cgit v1.2.3