scroll when focusing widgets

This commit is contained in:
Eduardo Bart 2012-06-01 21:38:26 -03:00
parent ba01909088
commit 59a80ffaf9
14 changed files with 38 additions and 21 deletions

View File

@ -26,8 +26,8 @@ end
function UIScrollArea:updateScrollBars() function UIScrollArea:updateScrollBars()
local offset = { x = 0, y = 0 } local offset = { x = 0, y = 0 }
local scrollheight = math.max(self:getChildrenRect().height - self:getClippingRect().height, 0) local scrollheight = math.max(self:getChildrenRect().height - self:getPaddingRect().height, 0)
local scrollwidth = math.max(self:getChildrenRect().width - self:getClippingRect().width, 0) local scrollwidth = math.max(self:getChildrenRect().width - self:getPaddingRect().width, 0)
local scrollbar = self.verticalScrollBar local scrollbar = self.verticalScrollBar
if scrollbar then if scrollbar then
@ -83,3 +83,18 @@ function UIScrollArea:onMouseWheel(mousePos, mouseWheel)
end end
return true return true
end end
function UIScrollArea:onChildFocusChange(focusedChild, oldFocused, reason)
if focusedChild and (reason == MouseFocusReason or reason == KeyboardFocusReason) then
local paddingRect = self:getPaddingRect()
local delta = paddingRect.y - focusedChild:getY()
if delta > 0 then
self.verticalScrollBar:decrement(delta)
end
delta = (focusedChild:getY() + focusedChild:getHeight()) - (paddingRect.y + paddingRect.height)
if delta > 0 then
self.verticalScrollBar:increment(delta)
end
end
end

View File

@ -126,11 +126,13 @@ function UIScrollBar:onStyleApply(styleName, styleNode)
end end
end end
function UIScrollBar:decrement() function UIScrollBar:decrement(count)
count = count or self.step
self:setValue(self.value - self.step) self:setValue(self.value - self.step)
end end
function UIScrollBar:increment() function UIScrollBar:increment(count)
count = count or self.step
self:setValue(self.value + self.step) self:setValue(self.value + self.step)
end end

View File

@ -35,10 +35,10 @@ local function onGameQuestLine(questId, questMissions)
local missionList = questLineWindow:getChildById('missionList') local missionList = questLineWindow:getChildById('missionList')
local missionDescription = questLineWindow:getChildById('missionDescription') local missionDescription = questLineWindow:getChildById('missionDescription')
missionList.onChildFocusChange = function(self, focusedChild) connect(missionList, { onChildFocusChange = function(self, focusedChild)
if focusedChild == nil then return end if focusedChild == nil then return end
missionDescription:setText(focusedChild.description) missionDescription:setText(focusedChild.description)
end end })
for i,questMission in pairs(questMissions) do for i,questMission in pairs(questMissions) do
local name, description = unpack(questMission) local name, description = unpack(questMission)

View File

@ -116,7 +116,7 @@ void Application::registerLuaFunctions()
g_lua.bindClassMemberFunction<UIWidget>("hasChild", &UIWidget::hasChild); g_lua.bindClassMemberFunction<UIWidget>("hasChild", &UIWidget::hasChild);
g_lua.bindClassMemberFunction<UIWidget>("getChildIndex", &UIWidget::getChildIndex); g_lua.bindClassMemberFunction<UIWidget>("getChildIndex", &UIWidget::getChildIndex);
g_lua.bindClassMemberFunction<UIWidget>("getMarginRect", &UIWidget::getMarginRect); g_lua.bindClassMemberFunction<UIWidget>("getMarginRect", &UIWidget::getMarginRect);
g_lua.bindClassMemberFunction<UIWidget>("getClippingRect", &UIWidget::getClippingRect); g_lua.bindClassMemberFunction<UIWidget>("getPaddingRect", &UIWidget::getPaddingRect);
g_lua.bindClassMemberFunction<UIWidget>("getChildrenRect", &UIWidget::getChildrenRect); g_lua.bindClassMemberFunction<UIWidget>("getChildrenRect", &UIWidget::getChildrenRect);
g_lua.bindClassMemberFunction<UIWidget>("getAnchoredLayout", &UIWidget::getAnchoredLayout); g_lua.bindClassMemberFunction<UIWidget>("getAnchoredLayout", &UIWidget::getAnchoredLayout);
g_lua.bindClassMemberFunction<UIWidget>("getRootParent", &UIWidget::getRootParent); g_lua.bindClassMemberFunction<UIWidget>("getRootParent", &UIWidget::getRootParent);

View File

@ -134,7 +134,7 @@ LONG CALLBACK ExceptionHandler(LPEXCEPTION_POINTERS e)
if(fout.is_open() && fout.good()) { if(fout.is_open() && fout.good()) {
fout << ss.str(); fout << ss.str();
fout.close(); fout.close();
g_logger.info("Crash report saved to file %s", fileName); g_logger.info(stdext::format("Crash report saved to file %s", fileName));
} else } else
g_logger.error("Failed to save crash report!"); g_logger.error("Failed to save crash report!");

View File

@ -140,7 +140,7 @@ bool UIAnchorLayout::updateWidget(const UIWidgetPtr& widget, UIAnchorGroup& anch
// determine hooked widget edge point // determine hooked widget edge point
Rect hookedWidgetRect = hookedWidget->getRect(); Rect hookedWidgetRect = hookedWidget->getRect();
if(hookedWidget == parentWidget) if(hookedWidget == parentWidget)
hookedWidgetRect = parentWidget->getClippingRect(); hookedWidgetRect = parentWidget->getPaddingRect();
int point = 0; int point = 0;
switch(anchor.getHookedEdge()) { switch(anchor.getHookedEdge()) {

View File

@ -79,7 +79,7 @@ bool UIGridLayout::internalUpdate()
UIWidgetList widgets = parentWidget->getChildren(); UIWidgetList widgets = parentWidget->getChildren();
Rect clippingRect = parentWidget->getClippingRect(); Rect clippingRect = parentWidget->getPaddingRect();
Point topLeft = clippingRect.topLeft(); Point topLeft = clippingRect.topLeft();
int numColumns = m_numColumns; int numColumns = m_numColumns;

View File

@ -46,7 +46,7 @@ bool UIHorizontalLayout::internalUpdate()
std::reverse(widgets.begin(), widgets.end()); std::reverse(widgets.begin(), widgets.end());
bool changed = false; bool changed = false;
Rect clippingRect = parentWidget->getClippingRect(); Rect clippingRect = parentWidget->getPaddingRect();
Point pos = (m_alignRight) ? clippingRect.topRight() : clippingRect.topLeft(); Point pos = (m_alignRight) ? clippingRect.topRight() : clippingRect.topLeft();
int preferredWidth = 0; int preferredWidth = 0;
int gap; int gap;

View File

@ -47,7 +47,7 @@ bool UIVerticalLayout::internalUpdate()
if(m_alignBottom) if(m_alignBottom)
std::reverse(widgets.begin(), widgets.end()); std::reverse(widgets.begin(), widgets.end());
Rect clippingRect = parentWidget->getClippingRect(); Rect clippingRect = parentWidget->getPaddingRect();
Point pos = (m_alignBottom) ? clippingRect.bottomLeft() : clippingRect.topLeft(); Point pos = (m_alignBottom) ? clippingRect.bottomLeft() : clippingRect.topLeft();
int preferredHeight = 0; int preferredHeight = 0;
int gap; int gap;

View File

@ -61,7 +61,7 @@ void UIWidget::draw(const Rect& visibleRect, bool foregroundPane)
if(m_children.size() > 0) { if(m_children.size() > 0) {
if(m_clipping) if(m_clipping)
g_painter->setClipRect(visibleRect.intersection(getClippingRect())); g_painter->setClipRect(visibleRect.intersection(getPaddingRect()));
drawChildren(visibleRect, foregroundPane); drawChildren(visibleRect, foregroundPane);
} }
@ -683,7 +683,7 @@ void UIWidget::bindRectToParent()
Rect boundRect = m_rect; Rect boundRect = m_rect;
UIWidgetPtr parent = getParent(); UIWidgetPtr parent = getParent();
if(parent) { if(parent) {
Rect parentRect = parent->getClippingRect(); Rect parentRect = parent->getPaddingRect();
boundRect.bind(parentRect); boundRect.bind(parentRect);
} }
@ -980,7 +980,7 @@ int UIWidget::getChildIndex(const UIWidgetPtr& child)
return -1; return -1;
} }
Rect UIWidget::getClippingRect() Rect UIWidget::getPaddingRect()
{ {
Rect rect = m_rect; Rect rect = m_rect;
rect.expand(-m_padding.top, -m_padding.right, -m_padding.bottom, -m_padding.left); rect.expand(-m_padding.top, -m_padding.right, -m_padding.bottom, -m_padding.left);
@ -1007,7 +1007,7 @@ Rect UIWidget::getChildrenRect()
childrenRect = childrenRect.united(marginRect); childrenRect = childrenRect.united(marginRect);
} }
Rect myClippingRect = getClippingRect(); Rect myClippingRect = getPaddingRect();
if(!childrenRect.isValid()) if(!childrenRect.isValid())
childrenRect = myClippingRect; childrenRect = myClippingRect;
else { else {

View File

@ -137,7 +137,7 @@ public:
bool isChildLocked(const UIWidgetPtr& child); bool isChildLocked(const UIWidgetPtr& child);
bool hasChild(const UIWidgetPtr& child); bool hasChild(const UIWidgetPtr& child);
int getChildIndex(const UIWidgetPtr& child); int getChildIndex(const UIWidgetPtr& child);
Rect getClippingRect(); Rect getPaddingRect();
Rect getMarginRect(); Rect getMarginRect();
Rect getChildrenRect(); Rect getChildrenRect();
UIAnchorLayoutPtr getAnchoredLayout(); UIAnchorLayoutPtr getAnchoredLayout();
@ -243,7 +243,7 @@ public:
bool isDestroyed() { return m_destroyed; } bool isDestroyed() { return m_destroyed; }
bool hasChildren() { return m_children.size() > 0; } bool hasChildren() { return m_children.size() > 0; }
bool containsChildPoint(const Point& point) { return getClippingRect().contains(point); } bool containsChildPoint(const Point& point) { return getPaddingRect().contains(point); }
bool containsPoint(const Point& point) { return m_rect.contains(point); } bool containsPoint(const Point& point) { return m_rect.contains(point); }
std::string getId() { return m_id; } std::string getId() { return m_id; }

View File

@ -33,7 +33,7 @@ void UICreature::drawSelf(bool foregroundPane)
if(m_creature) { if(m_creature) {
g_painter->setColor(Color::white); g_painter->setColor(Color::white);
Rect drawRect = getClippingRect(); Rect drawRect = getPaddingRect();
m_creature->drawOutfit(drawRect, !m_fixedCreatureSize); m_creature->drawOutfit(drawRect, !m_fixedCreatureSize);
} }
} }

View File

@ -38,7 +38,7 @@ void UIItem::drawSelf(bool foregroundPane)
UIWidget::drawSelf(foregroundPane); UIWidget::drawSelf(foregroundPane);
if(m_item) { if(m_item) {
Rect drawRect = getClippingRect(); Rect drawRect = getPaddingRect();
Point dest = drawRect.topLeft(); Point dest = drawRect.topLeft();
int exactSize = m_item->getExactSize(); int exactSize = m_item->getExactSize();

View File

@ -159,7 +159,7 @@ void UIMap::updateVisibleDimension()
void UIMap::updateMapSize() void UIMap::updateMapSize()
{ {
Rect clippingRect = getClippingRect(); Rect clippingRect = getPaddingRect();
Size mapSize; Size mapSize;
if(m_aspectRatio != 0.0f) { if(m_aspectRatio != 0.0f) {
Rect mapRect = clippingRect.expanded(-1); Rect mapRect = clippingRect.expanded(-1);