Diego A. Fons ?????:
[...]
Still I don't understand why can't get a context and store it in a member variable.

[...]

Then look here:
this is Plot class definition:

class Plot
{
public:
   Plot(Cairo::RefPtr<Cairo::Context>& context, Gdk::Rectangle& plotarea);
   ~Plot();
   std::vector<Series*> series;
...
private:
   *Cairo::RefPtr<Cairo::Context> plot_context;*
   Gdk::Color background_color, foreground_color;
....
};

Plot constructor:

Plot::Plot(Cairo::RefPtr<Cairo::Context>& context, Gdk::Rectangle& pltarea)
{
   plotarea = pltarea;
marginrect = Gdk::Rectangle(int(0.03*plotarea.get_width()), int(0.03*plotarea.get_height()),
       int(0.94*plotarea.get_width()), int(0.94*plotarea.get_height()));
   plotrect = marginrect;
  * plot_context = context;*
   background_color = Gdk::Color("white");
...
}

Plot resizing:

void Plot::resize(Cairo::RefPtr<Cairo::Context>& context, Gdk::Rectangle& pltarea)
{ // ??????????? ???????? ??? ????????? ???????
  * plot_context = context;*
   plotarea = pltarea;
plot_context->set_source_rgb(background_color.get_red(), background_color.get_green(), background_color.get_blue());
...
}

And this is plot initialization from MainWindow:
void Mainwindow::plot_init(void)
{ // ????????? ????????? ???????
   plotarea_win = drawingarea->get_window();
...
win_context->set_source_rgb(color.get_red(), color.get_green(), color.get_blue());
   //prepare a copy
plotareaCopy = Gdk::Pixmap::create(plotarea_win, drawingarea->get_allocation().get_width(),
     drawingarea->get_allocation().get_height(), -1);
   gc = Gdk::GC::create(plotarea_win);//sorry...
  * cairo = plotareaCopy->create_cairo_context();*
   int pwidth, pheight;
   plotareaCopy->get_size(pwidth, pheight);
   Gdk::Rectangle plot_area = Gdk::Rectangle(0, 0, pwidth, pheight);
   *plot = new Plot(cairo, plot_area);*
   ....
   drawingarea->signal_expose_event().connect(
       sigc::mem_fun(*this, &Mainwindow::on_drawingarea_expose_event));
}

This is an expose event - sorry, but for the sake of speed I use here Gdk::GC approach
for simple copying of area from a background copy:

bool Mainwindow::on_drawingarea_expose_event(GdkEventExpose *event)
{ plotarea_win->draw_drawable(gc, plotareaCopy, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height);

  ...
 return true;
}

And here is resizing of a plot:
bool Mainwindow::on_drawingarea_configure_event(GdkEventConfigure*)
{ // redefine demensions
   plotareaCopy = Gdk::Pixmap::create(plotarea_win,
drawingarea->get_allocation().get_width(), drawingarea->get_allocation().get_height(), -1);
   if (plot)
       {
       *cairo = plotareaCopy->create_cairo_context();*
       int pwidth, pheight;
       plotareaCopy->get_size(pwidth, pheight);
       Gdk::Rectangle plot_area = Gdk::Rectangle(0, 0, pwidth, pheight);
       plot->resize(cairo, plot_area);
       plot->drawplots();
       }
return true;
}

When I need printing I just call Plot::resize(Cairo::RefPt...) with the context and rectangle
taken from Gtk::PrintContext.

  Hope it helps somewhat,
     Igor Gorbounov
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to