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

Reply via email to