如果我们不检查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会发生什么?
答案 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会阻止其他处理程序,因此也有点奇怪。