首页 > 解决方案 > 了解 FLTK 中的小部件损坏

问题描述

因为我对 fltk 内置 Scroll 组的样式不满意,所以我想创建自己的滚动组组件,具有类似的功能。阅读 的源代码FL_Scroll,我了解到“屏蔽”滚动组子项中不需要的部分的过程涉及使用 fltk 的损坏功能。我发现小部件损坏是一个难以理解的概念。似乎它与小部件的绘制方式有关,但我不明白它如何用于有选择地绘制小部件的一部分。

根据 and 的fltk -rs 文档,损坏似乎是某种开/关状态,例如.WidgetExt::set_damage()WidgetExt::damage()set_resizeable()

然而在FLTK 文档中,我看到了这个定义:

When redrawing your widgets you should look at the damage bits to see what parts of your widget need redrawing. 
The handle() method can then set individual damage bits to limit the amount of drawing that needs to be done:
MyClass::handle(int event) {
    ...
    if (change_to_part1) damage(1);
    if (change_to_part2) damage(2);
    if (change_to_part3) damage(4);
  }
  
  MyClass::draw() {
    if (damage() & fltk::DAMAGE_ALL) {
      ... draw frame/box and other static stuff ...
    }
    if (damage() & (fltk::DAMAGE_ALL | 1)) draw_part1();
    if (damage() & (fltk::DAMAGE_ALL | 2)) draw_part2();
    if (damage() & (fltk::DAMAGE_ALL | 4)) draw_part3();
  }

这种描述使小部件损坏似乎是指有关小部件的某种字节数据数组。我猜是滚动组,您只想在滚动组的区域内绘制字节数据。但是这个字节数据存储在哪里呢?如何访问它?损坏与这些数据有什么关系?

标签: rustfltk

解决方案


推荐阅读