From 9242a80a84fa5c96dbadec9594177875aeeec1ac Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Tue, 10 Jul 2012 18:37:21 +0000 Subject: only added MyDetails and Skins. not adopted yet git-svn-id: http://svn.miranda-ng.org/main/trunk@892 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- 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 0000000000..37c412058a --- /dev/null +++ b/plugins/Skins/SkinLib/ControlFieldState.cpp @@ -0,0 +1,86 @@ +#include "globals.h" +#include "ControlFieldState.h" + + +ControlFieldState::ControlFieldState(DialogState *dialog, ControlField *field) + : FieldState(dialog, 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