📄 falstatictext.cpp
字号:
return Size(0,0);
}
// return the total extent of the text
float totalHeight = font->getFormattedLineCount(d_window->getText(), renderArea, (TextFormatting)d_horzFormatting) * font->getLineSpacing();
float widestItem = font->getFormattedTextExtent(d_window->getText(), renderArea, (TextFormatting)d_horzFormatting);
return Size(widestItem,totalHeight);
}
/*************************************************************************
Sets the colours to be applied when rendering the text.
*************************************************************************/
void FalagardStaticText::setTextColours(const ColourRect& colours)
{
d_textCols = colours;
d_window->requestRedraw();
}
/*************************************************************************
Set the formatting required for the text.
*************************************************************************/
void FalagardStaticText::setVerticalFormatting(VertFormatting v_fmt)
{
d_vertFormatting = v_fmt;
configureScrollbars();
d_window->requestRedraw();
}
/*************************************************************************
Set the formatting required for the text.
*************************************************************************/
void FalagardStaticText::setHorizontalFormatting(HorzFormatting h_fmt)
{
d_horzFormatting = h_fmt;
configureScrollbars();
d_window->requestRedraw();
}
/*************************************************************************
Set whether the vertical scroll bar will be shown if needed.
*************************************************************************/
void FalagardStaticText::setVerticalScrollbarEnabled(bool setting)
{
d_enableVertScrollbar = setting;
configureScrollbars();
d_window->performChildWindowLayout();
}
/*************************************************************************
Set whether the horizontal scroll bar will be shown if needed.
*************************************************************************/
void FalagardStaticText::setHorizontalScrollbarEnabled(bool setting)
{
d_enableHorzScrollbar = setting;
configureScrollbars();
d_window->performChildWindowLayout();
}
/*************************************************************************
display required integrated scroll bars according to current state
of the edit box and update their values.
*************************************************************************/
void FalagardStaticText::configureScrollbars(void)
{
// get the scrollbars
Scrollbar* vertScrollbar = getVertScrollbar();
Scrollbar* horzScrollbar = getHorzScrollbar();
// get the sizes we need
Rect renderArea(getTextRenderArea());
Size renderAreaSize(renderArea.getSize());
Size documentSize(getDocumentSize(renderArea));
// show or hide vertical scroll bar as required (or as specified by option)
bool showVert = ((documentSize.d_height > renderAreaSize.d_height) && d_enableVertScrollbar);
bool showHorz = ((documentSize.d_width > renderAreaSize.d_width) && d_enableHorzScrollbar);
// show or hide vertical scroll bar
if (showVert)
{
vertScrollbar->show();
}
else
{
vertScrollbar->hide();
}
// show or hide horizontal scroll bar
if (showHorz)
{
horzScrollbar->show();
}
else
{
horzScrollbar->hide();
}
// if scrollbar visibility just changed we have might have a better TextRenderArea
// if so we go with that instead
Rect updatedRenderArea = getTextRenderArea();
if (renderArea!=updatedRenderArea)
{
renderArea = updatedRenderArea;
renderAreaSize = renderArea.getSize();
}
// Set up scroll bar values
vertScrollbar->setDocumentSize(documentSize.d_height);
vertScrollbar->setPageSize(renderAreaSize.d_height);
vertScrollbar->setStepSize(ceguimax(1.0f, renderAreaSize.d_height / 10.0f));
horzScrollbar->setDocumentSize(documentSize.d_width);
horzScrollbar->setPageSize(renderAreaSize.d_width);
horzScrollbar->setStepSize(ceguimax(1.0f, renderAreaSize.d_width / 10.0f));
}
/*************************************************************************
Handler called when text is changed.
*************************************************************************/
bool FalagardStaticText::onTextChanged(const EventArgs& e)
{
configureScrollbars();
d_window->requestRedraw();
return true;
}
/*************************************************************************
Handler called when size is changed
*************************************************************************/
bool FalagardStaticText::onSized(const EventArgs& e)
{
configureScrollbars();
return true;
}
/*************************************************************************
Handler called when font is changed.
*************************************************************************/
bool FalagardStaticText::onFontChanged(const EventArgs& event)
{
configureScrollbars();
d_window->requestRedraw();
return true;
}
/*************************************************************************
Handler for mouse wheel changes
*************************************************************************/
bool FalagardStaticText::onMouseWheel(const EventArgs& event)
{
const MouseEventArgs& e = static_cast<const MouseEventArgs&>(event);
Scrollbar* vertScrollbar = getVertScrollbar();
Scrollbar* horzScrollbar = getHorzScrollbar();
if (vertScrollbar->isVisible() && (vertScrollbar->getDocumentSize() > vertScrollbar->getPageSize()))
{
vertScrollbar->setScrollPosition(vertScrollbar->getScrollPosition() + vertScrollbar->getStepSize() * -e.wheelChange);
}
else if (horzScrollbar->isVisible() && (horzScrollbar->getDocumentSize() > horzScrollbar->getPageSize()))
{
horzScrollbar->setScrollPosition(horzScrollbar->getScrollPosition() + horzScrollbar->getStepSize() * -e.wheelChange);
}
return true;
}
/*************************************************************************
Handler called when the scroll bar positions change
*************************************************************************/
bool FalagardStaticText::handleScrollbarChange(const EventArgs& e)
{
d_window->requestRedraw();
return true;
}
/*************************************************************************
Attach / Detach
*************************************************************************/
void FalagardStaticText::onLookNFeelAssigned()
{
// do initial scrollbar setup
Scrollbar* vertScrollbar = getVertScrollbar();
Scrollbar* horzScrollbar = getHorzScrollbar();
vertScrollbar->hide();
horzScrollbar->hide();
d_window->performChildWindowLayout();
// scrollbar events
vertScrollbar->subscribeEvent(Scrollbar::EventScrollPositionChanged,
Event::Subscriber(&FalagardStaticText::handleScrollbarChange, this));
horzScrollbar->subscribeEvent(Scrollbar::EventScrollPositionChanged,
Event::Subscriber(&FalagardStaticText::handleScrollbarChange, this));
// events that scrollbars should react to
d_connections.push_back(
d_window->subscribeEvent(Window::EventTextChanged,
Event::Subscriber(&FalagardStaticText::onTextChanged, this)));
d_connections.push_back(
d_window->subscribeEvent(Window::EventSized,
Event::Subscriber(&FalagardStaticText::onSized, this)));
d_connections.push_back(
d_window->subscribeEvent(Window::EventFontChanged,
Event::Subscriber(&FalagardStaticText::onFontChanged, this)));
d_connections.push_back(
d_window->subscribeEvent(Window::EventMouseWheel,
Event::Subscriber(&FalagardStaticText::onMouseWheel, this)));
}
void FalagardStaticText::onLookNFeelUnassigned()
{
// clean up connections that rely on widgets created by the look and feel
ConnectionList::iterator i = d_connections.begin();
while (i != d_connections.end())
{
(*i)->disconnect();
++i;
}
d_connections.clear();
}
} // End of CEGUI namespace section
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -