gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
path: root/agg-plot/plot.h
diff options
context:
space:
mode:
authorFrancesco Abbate <francesco.bbt@gmail.com>2012年10月14日 16:46:09 +0200
committerFrancesco Abbate <francesco.bbt@gmail.com>2012年10月15日 00:17:51 +0200
commit5d6496885209bfc7b71c04a0da5d87ed3e081d03 (patch)
tree1bc400408a48c4fe6294516cb68ee8d73d56a0ed /agg-plot/plot.h
parentfa253d32d9a0c67abad7e1ae852c8d2381c6401d (diff)
downloadgsl-shell-5d6496885209bfc7b71c04a0da5d87ed3e081d03.tar.gz
Fix problem by storing plot active area matrix in the window
Diffstat (limited to 'agg-plot/plot.h')
-rw-r--r--agg-plot/plot.h 23
1 files changed, 16 insertions, 7 deletions
diff --git a/agg-plot/plot.h b/agg-plot/plot.h
index fbbf8f68..f3b0fe17 100644
--- a/agg-plot/plot.h
+++ b/agg-plot/plot.h
@@ -86,6 +86,10 @@ struct plot_layout {
agg::trans_affine plot_active_area;
};
+struct plot_render_info {
+ agg::trans_affine active_area;
+};
+
struct plot_item {
sg_object* vs;
agg::rgba8 color;
@@ -250,21 +254,25 @@ public:
}
template <class Canvas>
- void draw(Canvas& canvas, const agg::trans_affine& m)
+ void draw(Canvas& canvas, const agg::trans_affine& m, plot_render_info* inf)
{
canvas_adapter<Canvas> vc(&canvas);
agg::rect_i clip = rect_of_slot_matrix<int>(m);
plot_layout layout = compute_plot_layout(m);
draw_virtual_canvas(vc, layout, m, &clip);
+ if (inf)
+ inf->active_area = layout.plot_active_area;
}
template <class Canvas>
- void draw(Canvas& canvas, const agg::rect_i& r)
+ void draw(Canvas& canvas, const agg::rect_i& r, plot_render_info* inf)
{
canvas_adapter<Canvas> vc(&canvas);
agg::trans_affine mtx = affine_matrix(r);
plot_layout layout = compute_plot_layout(mtx);
draw_virtual_canvas(vc, layout, mtx, &r);
+ if (inf)
+ inf->active_area = layout.plot_active_area;
}
virtual bool push_layer();
@@ -283,7 +291,7 @@ public:
void commit_pending_draw();
template <class Canvas>
- void draw_queue(Canvas& canvas, const agg::trans_affine& m, opt_rect<double>& bbox);
+ void draw_queue(Canvas& canvas, const agg::trans_affine& m, const plot_render_info& inf, opt_rect<double>& bbox);
void sync_mode(bool req_mode) { m_sync_mode = req_mode; };
bool sync_mode() const { return m_sync_mode; };
@@ -504,7 +512,7 @@ void plot<RM>::draw_elements(canvas_type& canvas, const plot_layout& layout)
{
const agg::trans_affine m = get_model_matrix(layout);
- this->clip_plot_area(canvas, layout.plot_area);
+ this->clip_plot_area(canvas, layout.plot_active_area);
for (unsigned k = 0; k < m_layers.size(); k++)
{
@@ -519,14 +527,15 @@ void plot<RM>::draw_elements(canvas_type& canvas, const plot_layout& layout)
}
template <class RM>
-template <class Canvas> void plot<RM>::draw_queue(Canvas& _canvas, const agg::trans_affine& canvas_mtx, opt_rect<double>& bb)
+template <class Canvas> void plot<RM>::draw_queue(Canvas& _canvas, const agg::trans_affine& canvas_mtx, const plot_render_info& inf, opt_rect<double>& bb)
{
canvas_adapter<Canvas> canvas(&_canvas);
before_draw();
- this->clip_plot_area(canvas, canvas_mtx);
-
plot_layout layout = compute_plot_layout(canvas_mtx);
+ layout.plot_active_area = inf.active_area;
+
+ this->clip_plot_area(canvas, layout.plot_active_area);
typedef typename plot<RM>::iterator iter_type;
iter_type *c0 = m_drawing_queue;
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月13日 06:20:47 +0000

AltStyle によって変換されたページ (->オリジナル) /