(我正在使用C ++,尽管这是一个可能适用于任何语言的算法问题)
我正在编写一个两个窗格的文本编辑器,其左窗格上有说明,右窗格中有渲染的窗体:
rectangle(10, 10, 100, 100); | ---------------
circle(50, 50, 10); | | |
| | |
| ---------------
| ______
| / \
| | |
| \______/
我面临的问题就是这个问题:我希望用户能够通过滚动右侧窗格来显示用户正在编辑的形状,从而始终能够看到左侧更改内容的表单在左边。
我为左边的简单指令编写了一个解析器,但由于形状可以有不同的尺寸,我很不确定如何实现“滚动到正确的形状”行为。
现在我试图存储生成形状的线条:
struct Shape { // Base class
int kind;
int original_line; // The original line in the left pane for this shape
};
然后在用户通过右窗格中的所有形状之间的二进制搜索移动左窗格上的插入符时在运行时找到它。
这种表现很糟糕,所以我想知道是否有更好的方法(甚至是标准方法)。