void AnimateBox::OnInitialized() { __super::OnInitialized(); SetMinWidth(_wid); SetMinHeight(_hei); }
void OpTabGroupButton::CalculateAndSetMinWidth() { INT32 min_width, dummy; GetPreferedSize(&min_width, &dummy, 0, 0); SetMinWidth(min_width); SetFixedMinMaxWidth(TRUE); }
void CControlUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) { if( _tcscmp(pstrName, _T("id")) == 0 ) SetID(_ttoi(pstrValue)); else if(_tcscmp(pstrName,_T("font")) == 0) SetFont(_ttoi(pstrValue)); else if(_tcscmp(pstrName, _T("name")) == 0) SetName(pstrValue); else if( _tcscmp(pstrName, _T("width")) == 0 ) SetFixedWidth(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("height")) == 0 ) SetFixedHeight(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("minwidth")) == 0 ) SetMinWidth(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("minheight")) == 0 ) SetMinHeight(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("maxwidth")) == 0 ) SetMaxWidth(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("maxheight")) == 0 ) SetMaxHeight(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("inset")) == 0) { RECT rcInset = { 0 }; LPTSTR pstr = NULL; rcInset.left = _tcstol(pstrValue, &pstr, 10); rcInset.top = _tcstol(pstr + 1, &pstr, 10); rcInset.right = _tcstol(pstr + 1, &pstr, 10); rcInset.bottom = _tcstol(pstr + 1, &pstr, 10); SetInset(rcInset); } else if(_tcscmp(pstrName, _T("visible")) == 0){ bool bVisible = _tcscmp(pstrValue, _T("true"))==0; SetVisible(bVisible); } else if(_tcscmp(pstrName, _T("display")) == 0) SetDisplayed(_tcscmp(pstrValue, _T("true"))==0); else{ #ifdef _DEBUG MessageBox(NULL, pstrValue, pstrName, MB_ICONEXCLAMATION); #endif } }
DIALOG_BOM_EDITOR::DIALOG_BOM_EDITOR( SCH_EDIT_FRAME* parent ) : DIALOG_BOM_EDITOR_BASE( parent ), m_parent( parent ) { m_bom = BOM_TABLE_MODEL::Create(); m_columnListCtrl->DeleteAllItems(); m_columnListCtrl->ClearColumns(); auto nameColumn = m_columnListCtrl->AppendTextColumn( _( "Field" ) ); auto showColumn = m_columnListCtrl->AppendToggleColumn( _( "Show" ), wxDATAVIEW_CELL_ACTIVATABLE, 100 ); // Resize the columns appropriately m_columnListCtrl->Update(); showColumn->SetWidth( wxCOL_WIDTH_AUTOSIZE ); showColumn->SetMinWidth( showColumn->GetWidth() ); showColumn->SetResizeable( false ); m_columnListCtrl->Update(); nameColumn->SetWidth( wxCOL_WIDTH_AUTOSIZE ); nameColumn->SetResizeable( true ); // Read all components LoadComponents(); LoadColumnNames(); ReloadColumns(); m_bom->ReloadTable(); Update(); m_bomView->Update(); // Set default column widths for( unsigned int ii = 0; ii < m_bomView->GetColumnCount(); ii++ ) { auto col = m_bomView->GetColumn( ii ); if( !col ) continue; col->SetWidth( wxCOL_WIDTH_AUTOSIZE ); col->SetResizeable( true ); } Layout(); GetSizer()->SetSizeHints( this ); Centre(); }
void EBox::SetMargin(float left, float right, float up, float down) { _marginLeft = left; _marginRight = right; _marginUp = up; _marginDown = down; SetMinWidth(); SetMinHeight(); UpdateGeometry(); UpdateChild(); }
TabItem::TabItem() { SetClassName(_T("TabItem")); SetMinWidth(16); SetHorizontalContentAlignment(suic::CENTER); SetVerticalContentAlignment(suic::CENTER); SetVerticalAlignment(suic::STRETCH); SetFocusable(true); }
CheckedStaticBox::CheckedStaticBox(wxWindow *parent, int orientation, const wxString &title) : wxPanelWithHelpers(parent, wxVERTICAL) , ThisSizer(*new wxStaticBoxSizer(orientation, this)) , ThisToggle(*new wxCheckBox(this, wxID_ANY, title, wxPoint(8, 0))) { *this += ThisToggle; *this += ThisSizer | pxExpand; // Ensure that the right-side of the static group box isn't too cozy: SetMinWidth(ThisToggle.GetSize().GetWidth() + 32); Bind(wxEVT_CHECKBOX, &CheckedStaticBox::MainToggle_Click, this, ThisToggle.GetId()); }
void CButton::SetText(const std::string &title) { if (!m_pLabel) { m_pLabel = new CLabel(title); AddWidget(m_pLabel); } else m_pLabel->SetText(title); SetMinWidth(SafeConvert<int>(MBWidth(title)) + m_iExtraWidth); // RequestQueuedDraw(); RequestUpdate(); }
void ETextBox::SetFont(EFont *font, int nFontHeight) { XDELETE(_lpFont); if (font != NULL) _lpFont = new EFont(*font); _fMinTextWidth = 0; _nFontSize = 0; if (_lpFont != NULL) { _nFontSize = _lpFont->getHeightPix(); } SetMinWidth(); UpdateGeometry(); }
Dialogs::ConvertMemoryCardDialog::ConvertMemoryCardDialog( wxWindow* parent, const wxDirName& mcdPath, const AppConfig::McdOptions& mcdSourceConfig ) : wxDialogWithHelpers( parent, _( "Convert a memory card to a different format" ) ) , m_mcdPath( mcdPath ) , m_mcdSourceFilename( mcdSourceConfig.Filename.GetFullName() ) { SetMinWidth( 472 * MSW_GetDPIScale()); CreateControls( mcdSourceConfig.Type ); if ( m_radio_CardType ) m_radio_CardType->Realize(); wxBoxSizer& s_buttons( *new wxBoxSizer( wxHORIZONTAL ) ); s_buttons += new wxButton( this, wxID_OK, _( "Convert" ) ) | pxProportion( 2 ); s_buttons += pxStretchSpacer( 3 ); s_buttons += new wxButton( this, wxID_CANCEL ) | pxProportion( 2 ); wxBoxSizer& s_padding( *new wxBoxSizer( wxVERTICAL ) ); s_padding += Heading( wxString( _( "Convert: " ) ) + ( mcdPath + m_mcdSourceFilename ).GetFullPath() ).Unwrapped() | pxSizerFlags::StdExpand(); wxBoxSizer& s_filename( *new wxBoxSizer( wxHORIZONTAL ) ); s_filename += Heading( _( "To: " ) ).Unwrapped().Align(wxALIGN_RIGHT) | pxProportion(1); m_text_filenameInput->SetValue( wxFileName( m_mcdSourceFilename ).GetName() + L"_converted" ); s_filename += m_text_filenameInput | pxProportion(2); s_filename += Heading( L".ps2" ).Align(wxALIGN_LEFT) | pxProportion(1); s_padding += s_filename | pxSizerFlags::StdExpand(); s_padding += m_radio_CardType | pxSizerFlags::StdExpand(); if ( mcdSourceConfig.Type != MemoryCardType::MemoryCard_File ) { s_padding += Heading( pxE( L"Please note that the resulting file may not actually contain all saves, depending on how many are in the source memory card." ) ); } s_padding += Heading( pxE( L"WARNING: Converting a memory card may take a while! Please do not close the emulator during the conversion process, even if the emulator is no longer responding to input." ) ); s_padding += 12; s_padding += s_buttons | pxSizerFlags::StdCenter(); *this += s_padding | pxSizerFlags::StdExpand(); Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConvertMemoryCardDialog::OnOk_Click ) ); Connect( m_text_filenameInput->GetId(), wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( ConvertMemoryCardDialog::OnOk_Click ) ); SetSizerAndFit(GetSizer()); m_text_filenameInput->SetFocus(); m_text_filenameInput->SelectAll(); }
void AnimateBox::AddGif(const suic::String& strPath) { suic::GifDescriptor gd; gd.w = 0; gd.h = 0; suic::SystemHelper::LoadGif(strPath, gd, _frames); _wid = gd.w; _hei = gd.h; _bkcolor = gd.bkcolor; SetMinWidth(_wid); SetMinHeight(_hei); }
Slider::Slider() { SetClassName(_T("Slider")); SetMinHeight(10); SetMinWidth(50); SetHorizontalContentAlignment(suic::LEFT); SetHorizontalAlignment(suic::LEFT); SetVerticalContentAlignment(suic::TOP); SetVerticalAlignment(suic::TOP); SliderButton* pSliderBtn = new SliderButton(this); _thumbBtn = pSliderBtn; pSliderBtn->ThumbDragDelta.Add(this, &Slider::OnThumbDragDelta); }
void ETextBox::SetText(const char *text) { int l = strlen(text) +1; if (_cText != NULL) { free(_cText); _cText = NULL; } _cText = (char *) malloc(l*sizeof(char)); KAssert(_cText != NULL); memset(_cText,0,l*sizeof(char)); strcpy(_cText,text); _fMinTextWidth = 0; SetMinWidth(); UpdateGeometry(); }
void CControlUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) { // ÊÇ·ñÑùʽ±í if(m_pManager != NULL) { LPCTSTR pStyle = m_pManager->GetStyle(pstrValue); if( pStyle != NULL) { ApplyAttributeList(pStyle); return; } } if( _tcsicmp(pstrName, _T("pos")) == 0 ) { RECT rcPos = { 0 }; LPTSTR pstr = NULL; rcPos.left = _tcstol(pstrValue, &pstr, 10); ASSERT(pstr); rcPos.top = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); rcPos.right = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); rcPos.bottom = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); SIZE szXY = {rcPos.left >= 0 ? rcPos.left : rcPos.right, rcPos.top >= 0 ? rcPos.top : rcPos.bottom}; SetFixedXY(szXY); SetFixedWidth(rcPos.right - rcPos.left); SetFixedHeight(rcPos.bottom - rcPos.top); } else if( _tcsicmp(pstrName, _T("float")) == 0 ) { CDuiString nValue = pstrValue; // ¶¯Ì¬¼ÆËãÏà¶Ô±ÈÀý if(nValue.Find(',') < 0) { SetFloat(_tcsicmp(pstrValue, _T("true")) == 0); } else { TPercentInfo piFloatPercent = { 0 }; LPTSTR pstr = NULL; piFloatPercent.left = _tcstod(pstrValue, &pstr); ASSERT(pstr); piFloatPercent.top = _tcstod(pstr + 1, &pstr); ASSERT(pstr); piFloatPercent.right = _tcstod(pstr + 1, &pstr); ASSERT(pstr); piFloatPercent.bottom = _tcstod(pstr + 1, &pstr); ASSERT(pstr); SetFloatPercent(piFloatPercent); SetFloat(true); } } else if( _tcsicmp(pstrName, _T("padding")) == 0 ) { RECT rcPadding = { 0 }; LPTSTR pstr = NULL; rcPadding.left = _tcstol(pstrValue, &pstr, 10); ASSERT(pstr); rcPadding.top = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); rcPadding.right = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); rcPadding.bottom = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); SetPadding(rcPadding); } else if( _tcsicmp(pstrName, _T("bkcolor")) == 0 || _tcsicmp(pstrName, _T("bkcolor1")) == 0 ) { while( *pstrValue > _T('\0') && *pstrValue <= _T(' ') ) pstrValue = ::CharNext(pstrValue); if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); LPTSTR pstr = NULL; DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); SetBkColor(clrColor); } else if( _tcsicmp(pstrName, _T("bkcolor2")) == 0 ) { while( *pstrValue > _T('\0') && *pstrValue <= _T(' ') ) pstrValue = ::CharNext(pstrValue); if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); LPTSTR pstr = NULL; DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); SetBkColor2(clrColor); } else if( _tcsicmp(pstrName, _T("bkcolor3")) == 0 ) { while( *pstrValue > _T('\0') && *pstrValue <= _T(' ') ) pstrValue = ::CharNext(pstrValue); if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); LPTSTR pstr = NULL; DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); SetBkColor3(clrColor); } else if( _tcsicmp(pstrName, _T("forecolor")) == 0 ) { while( *pstrValue > _T('\0') && *pstrValue <= _T(' ') ) pstrValue = ::CharNext(pstrValue); if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); LPTSTR pstr = NULL; DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); SetForeColor(clrColor); } else if( _tcsicmp(pstrName, _T("bordercolor")) == 0 ) { if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); LPTSTR pstr = NULL; DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); SetBorderColor(clrColor); } else if( _tcsicmp(pstrName, _T("focusbordercolor")) == 0 ) { if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); LPTSTR pstr = NULL; DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); SetFocusBorderColor(clrColor); } else if( _tcsicmp(pstrName, _T("colorhsl")) == 0 ) SetColorHSL(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("bordersize")) == 0 ) { CDuiString nValue = pstrValue; if(nValue.Find(',') < 0) { SetBorderSize(_ttoi(pstrValue)); RECT rcPadding = {0}; SetBorderSize(rcPadding); } else { RECT rcPadding = { 0 }; LPTSTR pstr = NULL; rcPadding.left = _tcstol(pstrValue, &pstr, 10); ASSERT(pstr); rcPadding.top = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); rcPadding.right = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); rcPadding.bottom = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); SetBorderSize(rcPadding); } } else if( _tcsicmp(pstrName, _T("leftbordersize")) == 0 ) SetLeftBorderSize(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("topbordersize")) == 0 ) SetTopBorderSize(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("rightbordersize")) == 0 ) SetRightBorderSize(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("bottombordersize")) == 0 ) SetBottomBorderSize(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("borderstyle")) == 0 ) SetBorderStyle(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("borderround")) == 0 ) { SIZE cxyRound = { 0 }; LPTSTR pstr = NULL; cxyRound.cx = _tcstol(pstrValue, &pstr, 10); ASSERT(pstr); cxyRound.cy = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); SetBorderRound(cxyRound); } else if( _tcsicmp(pstrName, _T("bkimage")) == 0 ) SetBkImage(pstrValue); else if( _tcsicmp(pstrName, _T("foreimage")) == 0 ) SetForeImage(pstrValue); else if( _tcsicmp(pstrName, _T("width")) == 0 ) SetFixedWidth(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("height")) == 0 ) SetFixedHeight(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("minwidth")) == 0 ) SetMinWidth(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("minheight")) == 0 ) SetMinHeight(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("maxwidth")) == 0 ) SetMaxWidth(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("maxheight")) == 0 ) SetMaxHeight(_ttoi(pstrValue)); else if( _tcsicmp(pstrName, _T("name")) == 0 ) SetName(pstrValue); else if( _tcsicmp(pstrName, _T("drag")) == 0 ) SetDragEnable(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("drop")) == 0 ) SetDropEnable(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("resourcetext")) == 0 ) SetResourceText(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("text")) == 0 ) SetText(pstrValue); else if( _tcsicmp(pstrName, _T("tooltip")) == 0 ) SetToolTip(pstrValue); else if( _tcsicmp(pstrName, _T("userdata")) == 0 ) SetUserData(pstrValue); else if( _tcsicmp(pstrName, _T("enabled")) == 0 ) SetEnabled(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("mouse")) == 0 ) SetMouseEnabled(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("keyboard")) == 0 ) SetKeyboardEnabled(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("visible")) == 0 ) SetVisible(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("float")) == 0 ) SetFloat(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("shortcut")) == 0 ) SetShortcut(pstrValue[0]); else if( _tcsicmp(pstrName, _T("menu")) == 0 ) SetContextMenuUsed(_tcsicmp(pstrValue, _T("true")) == 0); else if( _tcsicmp(pstrName, _T("cursor")) == 0 && pstrValue) { if( _tcsicmp(pstrValue, _T("arrow")) == 0 ) SetCursor(DUI_ARROW); else if( _tcsicmp(pstrValue, _T("ibeam")) == 0 ) SetCursor(DUI_IBEAM); else if( _tcsicmp(pstrValue, _T("wait")) == 0 ) SetCursor(DUI_WAIT); else if( _tcsicmp(pstrValue, _T("cross")) == 0 ) SetCursor(DUI_CROSS); else if( _tcsicmp(pstrValue, _T("uparrow")) == 0 ) SetCursor(DUI_UPARROW); else if( _tcsicmp(pstrValue, _T("size")) == 0 ) SetCursor(DUI_SIZE); else if( _tcsicmp(pstrValue, _T("icon")) == 0 ) SetCursor(DUI_ICON); else if( _tcsicmp(pstrValue, _T("sizenwse")) == 0 ) SetCursor(DUI_SIZENWSE); else if( _tcsicmp(pstrValue, _T("sizenesw")) == 0 ) SetCursor(DUI_SIZENESW); else if( _tcsicmp(pstrValue, _T("sizewe")) == 0 ) SetCursor(DUI_SIZEWE); else if( _tcsicmp(pstrValue, _T("sizens")) == 0 ) SetCursor(DUI_SIZENS); else if( _tcsicmp(pstrValue, _T("sizeall")) == 0 ) SetCursor(DUI_SIZEALL); else if( _tcsicmp(pstrValue, _T("no")) == 0 ) SetCursor(DUI_NO); else if( _tcsicmp(pstrValue, _T("hand")) == 0 ) SetCursor(DUI_HAND); } else if( _tcsicmp(pstrName, _T("virtualwnd")) == 0 ) SetVirtualWnd(pstrValue); else if( _tcsicmp(pstrName, _T("innerstyle")) == 0 ) { CDuiString sXmlData = pstrValue; sXmlData.Replace(_T("""), _T("\"")); LPCTSTR pstrList = sXmlData.GetData(); CDuiString sItem; CDuiString sValue; while( *pstrList != _T('\0') ) { sItem.Empty(); sValue.Empty(); while( *pstrList != _T('\0') && *pstrList != _T('=') ) { LPTSTR pstrTemp = ::CharNext(pstrList); while( pstrList < pstrTemp) { sItem += *pstrList++; } } ASSERT( *pstrList == _T('=') ); if( *pstrList++ != _T('=') ) return; ASSERT( *pstrList == _T('\"') ); if( *pstrList++ != _T('\"') ) return; while( *pstrList != _T('\0') && *pstrList != _T('\"') ) { LPTSTR pstrTemp = ::CharNext(pstrList); while( pstrList < pstrTemp) { sValue += *pstrList++; } } ASSERT( *pstrList == _T('\"') ); if( *pstrList++ != _T('\"') ) return; SetAttribute(sItem, sValue); if( *pstrList++ != _T(' ') && *pstrList++ != _T(',') ) return; } } }
void Text::UpdateText() { int width = 0; int height = 0; rowWidths_.Clear(); printText_.Clear(); PODVector<unsigned> printToText; if (font_) { const FontFace* face = font_->GetFace(fontSize_); if (!face) return; rowHeight_ = face->rowHeight_; int rowWidth = 0; int rowHeight = (int)(rowSpacing_ * rowHeight_); // First see if the text must be split up if (!wordWrap_) { printText_ = unicodeText_; printToText.Resize(printText_.Size()); for (unsigned i = 0; i < printText_.Size(); ++i) printToText[i] = i; } else { int maxWidth = GetWidth(); unsigned nextBreak = 0; unsigned lineStart = 0; for (unsigned i = 0; i < unicodeText_.Size(); ++i) { unsigned j; unsigned c = unicodeText_[i]; if (c != '\n') { bool ok = true; if (nextBreak <= i) { int futureRowWidth = rowWidth; for (j = i; j < unicodeText_.Size(); ++j) { unsigned d = unicodeText_[j]; if (d == ' ' || d == '\n') { nextBreak = j; break; } const FontGlyph* glyph = face->GetGlyph(d); if (glyph) { futureRowWidth += glyph->advanceX_; if (j < unicodeText_.Size() - 1) futureRowWidth += face->GetKerning(d, unicodeText_[j + 1]); } if (d == '-' && futureRowWidth <= maxWidth) { nextBreak = j + 1; break; } if (futureRowWidth > maxWidth) { ok = false; break; } } } if (!ok) { // If did not find any breaks on the line, copy until j, or at least 1 char, to prevent infinite loop if (nextBreak == lineStart) { while (i < j) { printText_.Push(unicodeText_[i]); printToText.Push(i); ++i; } } printText_.Push('\n'); printToText.Push(Min((int)i, (int)unicodeText_.Size() - 1)); rowWidth = 0; nextBreak = lineStart = i; } if (i < unicodeText_.Size()) { // When copying a space, position is allowed to be over row width c = unicodeText_[i]; const FontGlyph* glyph = face->GetGlyph(c); if (glyph) { rowWidth += glyph->advanceX_; if (i < text_.Length() - 1) rowWidth += face->GetKerning(c, unicodeText_[i + 1]); } if (rowWidth <= maxWidth) { printText_.Push(c); printToText.Push(i); } } } else { printText_.Push('\n'); printToText.Push(Min((int)i, (int)unicodeText_.Size() - 1)); rowWidth = 0; nextBreak = lineStart = i; } } } rowWidth = 0; for (unsigned i = 0; i < printText_.Size(); ++i) { unsigned c = printText_[i]; if (c != '\n') { const FontGlyph* glyph = face->GetGlyph(c); if (glyph) { rowWidth += glyph->advanceX_; if (i < printText_.Size() - 1) rowWidth += face->GetKerning(c, printText_[i + 1]); } } else { width = Max(width, rowWidth); height += rowHeight; rowWidths_.Push(rowWidth); rowWidth = 0; } } if (rowWidth) { width = Max(width, rowWidth); height += rowHeight; rowWidths_.Push(rowWidth); } // Set row height even if text is empty if (!height) height = rowHeight; // Store position & size of each character charPositions_.Resize(unicodeText_.Size() + 1); charSizes_.Resize(unicodeText_.Size()); unsigned rowIndex = 0; int x = GetRowStartPosition(rowIndex); int y = 0; for (unsigned i = 0; i < printText_.Size(); ++i) { charPositions_[printToText[i]] = IntVector2(x, y); unsigned c = printText_[i]; if (c != '\n') { const FontGlyph* glyph = face->GetGlyph(c); charSizes_[printToText[i]] = IntVector2(glyph ? glyph->advanceX_ : 0, rowHeight_); if (glyph) { x += glyph->advanceX_; if (i < printText_.Size() - 1) x += face->GetKerning(c, printText_[i + 1]); } } else { charSizes_[printToText[i]] = IntVector2::ZERO; x = GetRowStartPosition(++rowIndex); y += rowHeight; } } // Store the ending position charPositions_[unicodeText_.Size()] = IntVector2(x, y); } // Set minimum and current size according to the text size, but respect fixed width if set if (!IsFixedWidth()) { SetMinWidth(wordWrap_ ? 0 : width); SetWidth(width); } SetFixedHeight(height); }
BaseFormat& BaseFormat::operator<<(const fmt::MinWidth& Manipulator) { return SetMinWidth(Manipulator.GetValue()); }
void Text::UpdateText(bool onResize) { rowWidths_.clear(); printText_.clear(); if (font_) { FontFace* face = font_->GetFace(fontSize_); if (!face) return; rowHeight_ = face->GetRowHeight(); int width = 0; int height = 0; int rowWidth = 0; auto rowHeight = RoundToInt(rowSpacing_ * rowHeight_); // First see if the text must be split up if (!wordWrap_) { printText_ = unicodeText_; printToText_.resize(printText_.size()); for (unsigned i = 0; i < printText_.size(); ++i) printToText_[i] = i; } else { int maxWidth = GetWidth(); unsigned nextBreak = 0; unsigned lineStart = 0; printToText_.clear(); for (unsigned i = 0; i < unicodeText_.size(); ++i) { unsigned j; unsigned c = unicodeText_[i]; if (c != '\n') { bool ok = true; if (nextBreak <= i) { int futureRowWidth = rowWidth; for (j = i; j < unicodeText_.size(); ++j) { unsigned d = unicodeText_[j]; if (d == ' ' || d == '\n') { nextBreak = j; break; } const FontGlyph* glyph = face->GetGlyph(d); if (glyph) { futureRowWidth += glyph->advanceX_; if (j < unicodeText_.size() - 1) futureRowWidth += face->GetKerning(d, unicodeText_[j + 1]); } if (d == '-' && futureRowWidth <= maxWidth) { nextBreak = j + 1; break; } if (futureRowWidth > maxWidth) { ok = false; break; } } } if (!ok) { // If did not find any breaks on the line, copy until j, or at least 1 char, to prevent infinite loop if (nextBreak == lineStart) { while (i < j) { printText_.push_back(unicodeText_[i]); printToText_.push_back(i); ++i; } } // Eliminate spaces that have been copied before the forced break while (printText_.size() && printText_.back() == ' ') { printText_.pop_back(); printToText_.pop_back(); } printText_.push_back('\n'); printToText_.push_back(Min(i, unicodeText_.size() - 1)); rowWidth = 0; nextBreak = lineStart = i; } if (i < unicodeText_.size()) { // When copying a space, position is allowed to be over row width c = unicodeText_[i]; const FontGlyph* glyph = face->GetGlyph(c); if (glyph) { rowWidth += glyph->advanceX_; if (i < unicodeText_.size() - 1) rowWidth += face->GetKerning(c, unicodeText_[i + 1]); } if (rowWidth <= maxWidth) { printText_.push_back(c); printToText_.push_back(i); } } } else { printText_.push_back('\n'); printToText_.push_back(Min(i, unicodeText_.size() - 1)); rowWidth = 0; nextBreak = lineStart = i; } } } rowWidth = 0; for (unsigned i = 0; i < printText_.size(); ++i) { unsigned c = printText_[i]; if (c != '\n') { const FontGlyph* glyph = face->GetGlyph(c); if (glyph) { rowWidth += glyph->advanceX_; if (i < printText_.size() - 1) rowWidth += face->GetKerning(c, printText_[i + 1]); } } else { width = Max(width, rowWidth); height += rowHeight; rowWidths_.push_back(rowWidth); rowWidth = 0; } } if (rowWidth) { width = Max(width, rowWidth); height += rowHeight; rowWidths_.push_back(rowWidth); } // Set at least one row height even if text is empty if (!height) height = rowHeight; // Set minimum and current size according to the text size, but respect fixed width if set if (!IsFixedWidth()) { if (wordWrap_) SetMinWidth(0); else { SetMinWidth(width); SetWidth(width); } } SetFixedHeight(height); charLocationsDirty_ = true; } else { // No font, nothing to render pageGlyphLocations_.clear(); } // If wordwrap is on, parent may need layout update to correct for overshoot in size. However, do not do this when the // update is a response to resize, as that could cause infinite recursion if (wordWrap_ && !onResize) { UIElement* parent = GetParent(); if (parent && parent->GetLayoutMode() != LM_FREE) parent->UpdateLayout(); } }
void Button::CalcSize() { /* Let the frame calculate its size */ switch (type) { case typeNormal: SetBackground(OS::display->GetFill(OS::Display::buttonBackgroundFillIndex)); if (!OS::display->GetTheme()->FocusOnEditableControlsOnly()) { RequestFocus(); } if (OS::display->GetTheme()->RequestFingerFriendlyControls()) { SetMinWidth(OS::display->GetTheme()->GetFingerFriendlyMinWidth()); SetMinHeight(OS::display->GetTheme()->GetFingerFriendlyMinHeight()); } break; case typeDefault: SetBackground(OS::display->GetFill(OS::Display::defaultButtonBackgroundFillIndex)); if (!OS::display->GetTheme()->FocusOnEditableControlsOnly()) { RequestFocus(); } if (OS::display->GetTheme()->RequestFingerFriendlyControls()) { SetMinWidth(OS::display->GetTheme()->GetFingerFriendlyMinWidth()); SetMinHeight(OS::display->GetTheme()->GetFingerFriendlyMinHeight()); } break; case typeCommit: SetBackground(OS::display->GetFill(OS::Display::positiveButtonBackgroundFillIndex)); if (!OS::display->GetTheme()->FocusOnEditableControlsOnly()) { RequestFocus(); } if (OS::display->GetTheme()->RequestFingerFriendlyControls()) { SetMinWidth(OS::display->GetTheme()->GetFingerFriendlyMinWidth()); SetMinHeight(OS::display->GetTheme()->GetFingerFriendlyMinHeight()); } break; case typeCancel: SetBackground(OS::display->GetFill(OS::Display::negativeButtonBackgroundFillIndex)); if (!OS::display->GetTheme()->FocusOnEditableControlsOnly()) { RequestFocus(); } if (OS::display->GetTheme()->RequestFingerFriendlyControls()) { SetMinWidth(OS::display->GetTheme()->GetFingerFriendlyMinWidth()); SetMinHeight(OS::display->GetTheme()->GetFingerFriendlyMinHeight()); } break; case typeIcon: SetBackground(OS::display->GetFill(OS::Display::buttonBackgroundFillIndex)); if (!OS::display->GetTheme()->FocusOnEditableControlsOnly()) { RequestFocus(); } break; case typeAdditional: SetBackground(OS::display->GetFill(OS::Display::buttonBackgroundFillIndex)); if (!OS::display->GetTheme()->FocusOnEditableControlsOnly()) { RequestFocus(); } break; case typeToolBar: SetBackground(OS::display->GetFill(OS::Display::toolbarButtonBackgroundFillIndex)); SetCanFocus(false); break; case typeScroll: SetBackground(OS::display->GetFill(OS::Display::scrollButtonBackgroundFillIndex)); SetCanFocus(false); break; } width=0; height=0; minWidth=0; minHeight=0; if (ShowObject()) { /* Now we let the image calculate its bounds and simply add its size to the size of the button. */ object->CalcSize(); width=object->GetOWidth(); height=object->GetOHeight(); minWidth=object->GetOMinWidth(); minHeight=object->GetOMinHeight(); } if (ShowImage()) { minWidth+=image->GetWidth(); width+=image->GetWidth(); minHeight=std::max(minHeight,image->GetHeight()); height=std::max(height,image->GetHeight()); } if (ShowObject() && ShowImage()) { minWidth+=OS::display->GetSpaceHorizontal(OS::Display::spaceIntraObject); width+=OS::display->GetSpaceHorizontal(OS::Display::spaceIntraObject); } maxWidth=30000; maxHeight=30000; /* We *must* call CalcSize of our superclass! */ Control::CalcSize(); }