指针检查cairo上下文的好处

时间:2014-07-28 07:04:16

标签: c++ cairo

如果我们不检查cairo上下文是否存在以及返回false时会发生什么情况会发生什么,例如:

bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
      if ( !cr) return false;  // what realy happens when we return false?
      // is the function called once again?
}

// approach 2
bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
      // do stuff
      return true;  // works just fine without checking so why to check??
}

有什么好处,为什么要检查上下文?

如果返回false会发生什么?

1 个答案:

答案 0 :(得分:2)

This包含virtual bool Gtk::Widget::on_draw(const::Cairo::RefPtr<::Cairo::Context>& cr)的文档。我假设,你已经超越了那个或类似的东西。文档没有说明返回值,但声明它是Gtk::Widget::signal_draw()的默认处理程序。以下是该文档的引用:

  

返回

     

如果要阻止为事件调用其他处理程序,则为true。 %false以进一步传播事件。

如果cr没有指向任何内容,那么调用draw事件的其他处理程序可能没什么意义。然后,所有实际使用cr的处理程序都应该检查它,所以我不认为这里的cheking是必要的。如果你有很多处理程序,当它们都不能工作时返回true可能会减少一些开销。我猜测停止事件对于控制用户操作的事件流而不是绘制事件更有用。

仅当cr没有指向任何内容时才返回false,这对我来说似乎很奇怪。在没有检查的情况下返回true会阻止其他处理程序,因此也有点奇怪。