我认为递归会解决这个问题;但我不知道怎么样?

时间:2014-12-13 08:50:25

标签: recursion

我正在创建一个UI。现在我正在研究通用box s,它们在调整大小时动态添加和删除滚动条。

我沿着底部和右边缘绘制滚动条。内边缘很重要。

所以在某些时候盒子的大小调整了。如果它已调整大小,我会检查新尺寸是否小于内容所需的尺寸,如果是,则添加滚动条。

我的问题源于只需要一个滚动条的时候;其他尺寸/轴的尺寸非常接近内容所需的尺寸。

这个滚动条是在内边缘绘制的。现在删除可用于内容的区域。问题是,如果显示滚动条,我将不得不再次检查可用区域以查看是否需要其他滚动条。然后再说一遍。

这似乎是一个递归问题;但我不确定它对我有什么帮助。

一些代码:

void Box::UpdateVisibleRegion()
{
    // if the dimensions of this box is smaller than what the widget needs, display horizontal scrollbar
    if(GetDimensions().x < m_widget->GetDimensions().x)
    {
        m_scrollbarH->SetVisibility(true);
        m_scrollbarH->SetSize(utils::coord<int>(GetDimensions().x,m_scrollbarH->GetDimensions().y));
    }
    else
    {
        m_scrollbarH->SetVisibility(false);
    }

    // likewise for vertical scrollbar
    if(GetDimensions().y < m_widget->GetDimensions().y)
    {
        m_scrollbarV->SetVisibility(true);
        m_scrollbarV->SetSize(utils::coord<int>(m_scrollbarV->GetDimensions().x,GetDimensions().y));
    }
    else
    {
        m_scrollbarV->SetVisibility(false);
    }

而且存在问题。如果盒子的高度刚刚超过小部件的高度;宽度远远低于它;然后显示水平滚动条。但现在检查垂直滚动条应该是:

    if(GetDimensions().y - m_scrollbarH->GetDimensions().y < m_widget->GetDimensions().y)

因为滚动条在内侧边缘绘制,所以空间较小。但显然我不知道,直到我检查了另一个。水平和垂直都会相互影响。

我确信递归就是答案;但是我看不到它。

我可以用一两个大的嵌套if语句来做到这一点......

0 个答案:

没有答案