- The problem with CairoWidget was that it did scale a pixmap of ~100x100
with a *factor* of ~640x480. That means ~64*48*10^6*3 bytes = a ~1.1 Gb RAM pixmap. The problem didn't show in versions of cairo >= 1.2 because it automagically clips (yeah, cairo programmers *are* smart :-)) It is temporary fixed for the moment, will be made better asap. git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@892 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
09ad981251
commit
f42eea8514
|
@ -27,6 +27,7 @@
|
||||||
#include <gdkmm/window.h>
|
#include <gdkmm/window.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
using namespace sgpem;
|
using namespace sgpem;
|
||||||
|
@ -73,6 +74,7 @@ CairoWidget::update(const History& history)
|
||||||
cairo_t* ctx = gdk_cairo_create(_buf->gobj());
|
cairo_t* ctx = gdk_cairo_create(_buf->gobj());
|
||||||
|
|
||||||
// do the drawing...
|
// do the drawing...
|
||||||
|
std::cout << " Dimensions, w : " << _w << ", h : " << _h << std::endl;
|
||||||
cairo_scale(ctx, _w, _h);
|
cairo_scale(ctx, _w, _h);
|
||||||
draw_widget(ctx);
|
draw_widget(ctx);
|
||||||
cairo_destroy(ctx);
|
cairo_destroy(ctx);
|
||||||
|
@ -133,6 +135,16 @@ CairoWidget::on_size_allocate(const Gtk::Allocation& allocation)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CairoWidget::on_size_request(Gtk::Requisition* requisition)
|
||||||
|
{
|
||||||
|
*requisition = Gtk::Requisition();
|
||||||
|
|
||||||
|
requisition->width = _w;
|
||||||
|
requisition->height = _h;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
CairoWidget::on_expose_event(GdkEventExpose* event)
|
CairoWidget::on_expose_event(GdkEventExpose* event)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,6 +44,7 @@ namespace sgpem
|
||||||
|
|
||||||
virtual void on_realize();
|
virtual void on_realize();
|
||||||
virtual void on_size_allocate(const Gtk::Allocation& allocation);
|
virtual void on_size_allocate(const Gtk::Allocation& allocation);
|
||||||
|
virtual void on_size_request(Gtk::Requisition* request);
|
||||||
virtual bool on_expose_event(GdkEventExpose* event);
|
virtual bool on_expose_event(GdkEventExpose* event);
|
||||||
virtual bool on_button_press_event(GdkEventButton* event);
|
virtual bool on_button_press_event(GdkEventButton* event);
|
||||||
virtual void draw_widget(cairo_t* ctx) = 0;
|
virtual void draw_widget(cairo_t* ctx) = 0;
|
||||||
|
|
|
@ -46,13 +46,13 @@ SimulationWidget::draw_widget(cairo_t* ctx)
|
||||||
// NOTE: just to try
|
// NOTE: just to try
|
||||||
CairoElements ce(ctx);
|
CairoElements ce(ctx);
|
||||||
|
|
||||||
Rectangle area = { 30, 30, 100, 100 };
|
Rectangle area = { 0.3, 0.3, 1.0, 1.0 };
|
||||||
ce.draw_container(area);
|
ce.draw_container(area);
|
||||||
|
|
||||||
Color red = { 1, 0, 0 };
|
Color red = { 1, 0, 0 };
|
||||||
Point center = { 25, 25 };
|
Point center = { 0.25, 0.25 };
|
||||||
|
|
||||||
ce.draw_3dsphere(center, 20, red);
|
ce.draw_3dsphere(center, 0.20, red);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,10 +63,12 @@ SimulationWidget::calc_size(const History& history, size_t& width, size_t& heigh
|
||||||
width = get_allocation().get_width();
|
width = get_allocation().get_width();
|
||||||
height = get_allocation().get_height();
|
height = get_allocation().get_height();
|
||||||
|
|
||||||
|
/*
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
using namespace std;
|
using namespace std;
|
||||||
clog << " [DD] New allocation event on " << hex << this << ": "
|
clog << " [DD] New allocation event on " << hex << this << ": "
|
||||||
<< dec << width << 'x' << height << endl;
|
<< dec << width << 'x' << height << endl;
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue