From b43a196eacf8a02f0bfdbdfb967e216f3e3363cd Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Fri, 15 Mar 2013 21:59:10 -0300 Subject: [PATCH] Minor fixes and add auto resize for images --- modules/client_terminal/terminal.lua | 11 +++++++---- modules/corelib/ui/uitabbar.lua | 4 +++- src/framework/luafunctions.cpp | 2 ++ src/framework/ui/uiwidget.cpp | 2 +- src/framework/ui/uiwidget.h | 3 +++ src/framework/ui/uiwidgetimage.cpp | 16 ++++++++++++++-- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/modules/client_terminal/terminal.lua b/modules/client_terminal/terminal.lua index e32e78b5..a4c03ebd 100644 --- a/modules/client_terminal/terminal.lua +++ b/modules/client_terminal/terminal.lua @@ -257,10 +257,13 @@ function flushLines() for _,line in pairs(cachedLines) do -- delete old lines if needed if numLines > MaxLogLines then - local len = #terminalBuffer:getChildByIndex(1):getText() - terminalBuffer:getChildByIndex(1):destroy() - table.remove(allLines, 1) - fulltext = string.sub(fulltext, len) + local firstChild = terminalBuffer:getChildByIndex(1) + if firstChild then + local len = #firstChild:getText() + firstChild:destroy() + table.remove(allLines, 1) + fulltext = string.sub(fulltext, len) + end end local label = g_ui.createWidget('TerminalLabel', terminalBuffer) diff --git a/modules/corelib/ui/uitabbar.lua b/modules/corelib/ui/uitabbar.lua index c6779fea..43ed3411 100644 --- a/modules/corelib/ui/uitabbar.lua +++ b/modules/corelib/ui/uitabbar.lua @@ -110,7 +110,9 @@ function UITabBar:selectTab(tab) tab:setOn(false) local parent = tab:getParent() - parent:focusChild(tab, MouseFocusReason) + if parent then + parent:focusChild(tab, MouseFocusReason) + end end function UITabBar:selectNextTab() diff --git a/src/framework/luafunctions.cpp b/src/framework/luafunctions.cpp index f7505d77..71561ccf 100644 --- a/src/framework/luafunctions.cpp +++ b/src/framework/luafunctions.cpp @@ -569,6 +569,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("setImageFixedRatio", &UIWidget::setImageFixedRatio); g_lua.bindClassMemberFunction("setImageRepeated", &UIWidget::setImageRepeated); g_lua.bindClassMemberFunction("setImageSmooth", &UIWidget::setImageSmooth); + g_lua.bindClassMemberFunction("setImageAutoResize", &UIWidget::setImageAutoResize); g_lua.bindClassMemberFunction("setImageBorderTop", &UIWidget::setImageBorderTop); g_lua.bindClassMemberFunction("setImageBorderRight", &UIWidget::setImageBorderRight); g_lua.bindClassMemberFunction("setImageBorderBottom", &UIWidget::setImageBorderBottom); @@ -585,6 +586,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("getImageColor", &UIWidget::getImageColor); g_lua.bindClassMemberFunction("isImageFixedRatio", &UIWidget::isImageFixedRatio); g_lua.bindClassMemberFunction("isImageSmooth", &UIWidget::isImageSmooth); + g_lua.bindClassMemberFunction("isImageAutoResize", &UIWidget::isImageAutoResize); g_lua.bindClassMemberFunction("getImageBorderTop", &UIWidget::getImageBorderTop); g_lua.bindClassMemberFunction("getImageBorderRight", &UIWidget::getImageBorderRight); g_lua.bindClassMemberFunction("getImageBorderBottom", &UIWidget::getImageBorderBottom); diff --git a/src/framework/ui/uiwidget.cpp b/src/framework/ui/uiwidget.cpp index d384b436..f5571f59 100644 --- a/src/framework/ui/uiwidget.cpp +++ b/src/framework/ui/uiwidget.cpp @@ -98,9 +98,9 @@ void UIWidget::drawSelf(Fw::DrawPane drawPane) } drawImage(m_rect); - drawBorder(m_rect); drawIcon(m_rect); drawText(m_rect); + drawBorder(m_rect); } void UIWidget::drawChildren(const Rect& visibleRect, Fw::DrawPane drawPane) diff --git a/src/framework/ui/uiwidget.h b/src/framework/ui/uiwidget.h index c91393ee..a00eff0c 100644 --- a/src/framework/ui/uiwidget.h +++ b/src/framework/ui/uiwidget.h @@ -419,6 +419,7 @@ protected: stdext::boolean m_imageFixedRatio; stdext::boolean m_imageRepeated; stdext::boolean m_imageSmooth; + stdext::boolean m_imageAutoResize; EdgeGroup m_imageBorder; public: @@ -435,6 +436,7 @@ public: void setImageFixedRatio(bool fixedRatio) { m_imageFixedRatio = fixedRatio; updateImageCache(); } void setImageRepeated(bool repeated) { m_imageRepeated = repeated; updateImageCache(); } void setImageSmooth(bool smooth) { m_imageSmooth = smooth; } + void setImageAutoResize(bool autoResize) { m_imageAutoResize = autoResize; } void setImageBorderTop(int border) { m_imageBorder.top = border; configureBorderImage(); } void setImageBorderRight(int border) { m_imageBorder.right = border; configureBorderImage(); } void setImageBorderBottom(int border) { m_imageBorder.bottom = border; configureBorderImage(); } @@ -452,6 +454,7 @@ public: Color getImageColor() { return m_imageColor; } bool isImageFixedRatio() { return m_imageFixedRatio; } bool isImageSmooth() { return m_imageSmooth; } + bool isImageAutoResize() { return m_imageAutoResize; } int getImageBorderTop() { return m_imageBorder.top; } int getImageBorderRight() { return m_imageBorder.right; } int getImageBorderBottom() { return m_imageBorder.bottom; } diff --git a/src/framework/ui/uiwidgetimage.cpp b/src/framework/ui/uiwidgetimage.cpp index e96b613e..79d90ec2 100644 --- a/src/framework/ui/uiwidgetimage.cpp +++ b/src/framework/ui/uiwidgetimage.cpp @@ -68,9 +68,10 @@ void UIWidget::parseImageStyle(const OTMLNodePtr& styleNode) setImageBorderBottom(node->value()); else if(node->tag() == "image-border-left") setImageBorderLeft(node->value()); - else if(node->tag() == "image-border") { + else if(node->tag() == "image-border") setImageBorder(node->value()); - } + else if(node->tag() == "image-auto-resize") + setImageAutoResize(node->value()); } } @@ -180,5 +181,16 @@ void UIWidget::setImageSource(const std::string& source) m_imageTexture = nullptr; else m_imageTexture = g_textures.getTexture(source); + + if(m_imageTexture && (!m_rect.isValid() || m_imageAutoResize)) { + Size size = getSize(); + Size imageSize = m_imageTexture->getSize(); + if(size.width() <= 0 || m_imageAutoResize) + size.setWidth(imageSize.width()); + if(size.height() <= 0 || m_imageAutoResize) + size.setHeight(imageSize.height()); + setSize(size); + } + m_imageMustRecache = true; }