Re: How to maintain a reference to Cairo::Context or Cairo::Surface?
- From: "BC Zhu" <zhubicen gmail com>
- To: "Milosz Derezynski" <internalerror gmail com>
- Cc: gtkmm-list gnome org
- Subject: Re: How to maintain a reference to Cairo::Context or Cairo::Surface?
- Date: Thu, 4 Dec 2008 09:24:31 +0800
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
<internalerror gmail com>
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
<zhubicen gmail com>
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]