From bb6784e0e1a385cdd20b41d3254093e89a210332 Mon Sep 17 00:00:00 2001 From: pescuma Date: Wed, 31 Dec 2008 21:12:58 +0000 Subject: skins: Added SkinLib git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@120 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/skins/SkinLib/ControlFieldState.cpp | 86 +++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Plugins/skins/SkinLib/ControlFieldState.cpp (limited to 'Plugins/skins/SkinLib/ControlFieldState.cpp') diff --git a/Plugins/skins/SkinLib/ControlFieldState.cpp b/Plugins/skins/SkinLib/ControlFieldState.cpp new file mode 100644 index 0000000..d3b45e3 --- /dev/null +++ b/Plugins/skins/SkinLib/ControlFieldState.cpp @@ -0,0 +1,86 @@ +#include "globals.h" +#include "ControlFieldState.h" + + +ControlFieldState::ControlFieldState(ControlField *field) : FieldState(field), textSet(false), + font(field->getFont(), field->getFontColor()) +{ +} + + +ControlFieldState::~ControlFieldState() +{ +} + + +ControlField * ControlFieldState::getField() const +{ + return (ControlField *) FieldState::getField(); +} + + +Size ControlFieldState::getTextPreferedSize(unsigned int format) const +{ + HDC hdc = CreateCompatibleDC(NULL); + + HFONT newFont = getFont()->getHFONT(); + HFONT oldFont = (HFONT) SelectObject(hdc, newFont); + + int width = 0; + int height = 0; + + const TCHAR *text = getText(); + int len = lstrlen(text); + if (len <= 0) + { + TEXTMETRIC tm = {0}; + GetTextMetrics(hdc, &tm); + height = tm.tmHeight; + } + else + { + RECT rc = {0}; + if ((format & DT_SINGLELINE) == 0 && size.x >= 0) + { + format |= DT_WORDBREAK; + rc.right = size.x; + } + DrawText(hdc, text, len, &rc, DT_CALCRECT | format); + width = rc.right - rc.left; + height = rc.bottom - rc.top; + } + + SelectObject(hdc, oldFont); + + DeleteDC(hdc); + + return Size(width, height); +} + + +const TCHAR * ControlFieldState::getText() const +{ + if (textSet) + return text.c_str(); + + return getField()->getText(); +} + + +void ControlFieldState::setText(const TCHAR *text) +{ + this->text = text; + textSet = true; +} + + +FontState * ControlFieldState::getFont() +{ + return &font; +} + + +const FontState * ControlFieldState::getFont() const +{ + return &font; +} \ No newline at end of file -- cgit v1.2.3