线性尺寸增加有时会增加1倍

时间:2012-04-06 13:29:07

标签: c++ windows

我有一个流程布局。在里面我有大约900张桌子。每张桌子一个堆叠在另一个上面。我有一个滑块调整它们的大小,从而导致流程布局也调整大小。

问题是,表格应该线性调整大小。它们的基本尺寸为200x200。因此,当scale = 1.0时,表格的w和h为200。

以下是问题的一个示例:

enter image description here

我的问题是当delta为8而不是9.我能做些什么来确保我的增加总是线性的?

void LobbyTableManagaer::changeTableScale( double scale )
    {
        setTableScale(scale);
    }

    void LobbyTableManager::setTableScale( double scale )
    {
        scale += 0.3;
        scale *= 2.0;

        float scrollRel = m_vScroll->getRelativeValue();
        setScale(scale);
        rescaleTables();
        resizeFlow();
    ...



    double LobbyTableManager::getTableScale() const
        {
            return (getInnerWidth() / 700.0) * getScale();
        }

    void LobbyFilterManager::valueChanged( agui::Slider* source,int val )
    {
        if(source == m_magnifySlider)
        {

            DISPATCH_LOBBY_EVENT
            {
                (*it)->changeTableScale((double)val / source->getRange());
            }
        }
    }

简而言之,我想确保表格总是增加一个线性数量。我不明白为什么每隔几次delta就是8而不是9。

由于

1 个答案:

答案 0 :(得分:1)

查看“200 X Table Scale”值,它们上升了约8.8。因此,当它四舍五入为整数时,它将比前一个值大约80%的时间增加9个,而另外20%的时间则增加8个。

如果你真的需要每次增加相同的大小,你必须用整数做所有事情。否则,您必须调整比例更改,以使结果更接近9.0。