bug fixed for `repaint`

`calculate`少考虑了一种情况: 
1. 滚动容器内容从多（足以滚动）变少（不足以滚动）
2. 程序调用`repaint`后，`vertical`或`horizontal`会变为`false`
3. 滚动容器内容从少（不足以滚动）变多（足以滚动）
4. 程序调用`repaint`后, `vertical`或`horizontal`会依旧为`false`
5. 此后容器就永久无法滚动