Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();// The above sentence indicate me that cr is an smart pointer , so i can keep it as a class memeber or pass it as an argument to anthoer function, if this i can used it anywhere, and doesn't need to call " get_window()->create_cairo_context()" again and again. May be " get_window()->create_cairo_context()" is a cheap action, but according to the rule "DONOT REPEAT YOURSELF", i think its better to creat it one time, and use it any where.
2008/12/3 Milosz Derezynski <[EMAIL PROTECTED]> > It does not seem neccessary to create 2 separate Cairo Contexts: > > class MyArea : public Gtk::DrawingArea > { > public: > virtual ~MyArea(); > protected: > //Override default signal handler: > virtual bool on_expose_event( > >> GdkEventExpose* event); >> }; >> MyArea::MyArea() >> { >> } >> MyArea::~MyArea() >> { >> } >> bool MyArea::on_expose_event(GdkEventExpose* event) >> { >> // This is where we draw on the window >> Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context(); >> cr->set_line_width(10.0); >> cr->move_to(0, 0); >> cr->line_to(100, 100); >> cr->stroke(); >> return true; >> } >> > > This will work equally well. Is there any specific reason why you want to > keep the surface member in the class and use it the way you wrote it in the > preceding mail? > > M. > > > 2008/12/3 BC Zhu <[EMAIL PROTECTED]> > >> Now i am using Gtkmm. I want to maintain a reference to Cairo::Context or >> Cairo::Surface, so i can draw something on it anywhere. >> I am trying to do this , but failed. >> With following code , i am trying to keep a reference to >> Cairo:::Surface,but when on_expose_event was called secondly , it will fail. >> And i have tried to maintain a reference to Cairo::Context too, but failed >> either. >> Could some body give me an advice? >> Thanks in advance! >> >> >> class MyArea : public Gtk::DrawingArea >> { >> public: >> virtual ~MyArea(); >> protected: >> //Override default signal handler: >> virtual bool on_expose_event(GdkEventExpose* event); >> private: >> Cairo::RefPtr<Cairo::Surface> surf_; >> }; >> MyArea::MyArea() >> { >> } >> MyArea::~MyArea() >> { >> } >> bool MyArea::on_expose_event(GdkEventExpose* event) >> { >> // This is where we draw on the window >> if(!surf_){ >> Glib::RefPtr<Gdk::Window> window = get_window(); >> Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context(); >> surf_ = cr->get_target(); >> } >> Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surf_); >> cr->set_line_width(10.0); >> cr->move_to(0, 0); >> cr->line_to(100, 100); >> cr->stroke(); >> return true; >> } >> >> >> -- >> Best Regards >> Bicen.Zhu >> >> _______________________________________________ >> gtkmm-list mailing list >> gtkmm-list@gnome.org >> http://mail.gnome.org/mailman/listinfo/gtkmm-list >> >> > > > -- > Please note that according to the German law on data retention, > information on every electronic information exchange with me is > retained for a period of six months. > [Bitte beachten Sie, dass dem Gesetz zur Vorratsdatenspeicherung zufolge > jeder elektronische Kontakt mit mir sechs Monate lang gespeichert wird.] > -- Best Regards Bicen.Zhu
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtkmm-list