Skip to content

Commit 7a07b49

Browse files
committed
Parameter added for every draw event.
1 parent 0f69cd7 commit 7a07b49

File tree

8 files changed

+59
-25
lines changed

8 files changed

+59
-25
lines changed

src/chart/main/events.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#define EVENTS_H
33

44
#include "base/io/log.h"
5+
#include "base/geom/line.h"
6+
#include "base/geom/rect.h"
57
#include "base/util/eventdispatcher.h"
68

79
namespace Vizzu
@@ -11,6 +13,24 @@ class Events {
1113
public:
1214
Events(class Chart &chart);
1315

16+
struct OnRectDrawParam : public Util::EventDispatcher::Params
17+
{
18+
Geom::Rect rect;
19+
OnRectDrawParam(Geom::Rect rect) : rect(rect) {}
20+
std::string dataToJson() const override {
21+
return "{\"rect\":" + std::string(rect) + "}";
22+
}
23+
};
24+
25+
struct OnLineDrawParam : public Util::EventDispatcher::Params
26+
{
27+
Geom::Line line;
28+
OnLineDrawParam(Geom::Line line) : line(line) {}
29+
std::string dataToJson() const override {
30+
return "{\"line\":" + std::string(line) + "}";
31+
}
32+
};
33+
1434
Util::EventDispatcher::event_ptr update;
1535
struct Draw {
1636
Util::EventDispatcher::event_ptr background;

src/chart/rendering/drawaxes.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,11 @@ void drawAxes::drawAxis(Diag::Scale::Type axisIndex,
7676
canvas.setLineColor(lineColor);
7777
canvas.setLineWidth(1.0);
7878

79-
if (events.plot.axis.base->invoke())
79+
if (events.plot.axis.base
80+
->invoke(Events::OnLineDrawParam(line)))
81+
{
8082
painter.drawLine(line);
83+
}
8184
}
8285
}
8386

src/chart/rendering/drawbackground.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "drawbackground.h"
22

3+
#include "chart/main/events.h"
4+
35
using namespace Vizzu;
46
using namespace Vizzu::Draw;
57

@@ -14,7 +16,7 @@ drawBackground::drawBackground(const Geom::Rect &rect,
1416
canvas.setBrushColor(*style.backgroundColor);
1517
canvas.setLineColor(*style.borderColor);
1618
canvas.setLineWidth(*style.borderWidth);
17-
if (!onDraw || onDraw->invoke(OnDrawParam(rect)))
19+
if (!onDraw || onDraw->invoke(Events::OnRectDrawParam(rect)))
1820
{
1921
canvas.rectangle(rect);
2022
}

src/chart/rendering/drawbackground.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,6 @@ namespace Draw
1414
class drawBackground
1515
{
1616
public:
17-
struct OnDrawParam : public Util::EventDispatcher::Params
18-
{
19-
Geom::Rect rect;
20-
OnDrawParam(Geom::Rect rect) : rect(rect) {}
21-
std::string dataToJson() const override {
22-
return "{\"rect\":" + std::string(rect) + "}";
23-
}
24-
};
25-
2617
drawBackground(const Geom::Rect &rect,
2718
Gfx::ICanvas &canvas,
2819
const Styles::Box &style,

src/chart/rendering/drawguides.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ void drawGuides::drawGuide(bool horizontal,
6464
auto relMax = ident * val;
6565

6666
canvas.setLineColor(color);
67-
if (events.plot.axis.guide->invoke())
68-
painter.drawLine(Geom::Line(relMax, relMax + normal));
67+
Geom::Line line(relMax, relMax + normal);
68+
if (events.plot.axis.guide->invoke(Events::OnLineDrawParam(line)))
69+
painter.drawLine(line);
6970
}
7071

src/chart/rendering/drawinterlacing.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,12 @@ void drawInterlacing::draw(bool horizontal,
136136
{
137137
painter.setPolygonToCircleFactor(0);
138138
painter.setPolygonStraightFactor(0);
139-
if(events.plot.axis.interlacing->invoke())
139+
auto rect = Geom::Rect::Boundary(points);
140+
if(events.plot.axis.interlacing
141+
->invoke(Events::OnRectDrawParam(rect)))
142+
{
140143
painter.drawPolygon(points);
144+
}
141145
}
142146
}
143147
}
@@ -224,7 +228,10 @@ void drawInterlacing::drawSticks(double stickIntensity,
224228
}
225229
});
226230

227-
if(events.plot.axis.tick->invoke())
231+
if(events.plot.axis.tick
232+
->invoke(Events::OnLineDrawParam(tickLine)))
233+
{
228234
canvas.line(tickLine);
235+
}
229236
if (*tickStyle.lineWidth > 1) canvas.setLineWidth(0);
230237
}

src/chart/rendering/drawitem.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ void drawItem::drawLines(const Guides &guides,
4747
auto lineColor = baseColor * (double)guides.y.guidelines;
4848
canvas.setLineColor(lineColor);
4949
auto axisPoint = blended.center.xComp() + origo.yComp();
50-
if (events.plot.marker.guide->invoke())
51-
painter.drawLine(Geom::Line(axisPoint, blended.center));
50+
Geom::Line line(axisPoint, blended.center);
51+
if (events.plot.marker.guide
52+
->invoke(Events::OnLineDrawParam(line)))
53+
{
54+
painter.drawLine(line);
55+
}
5256
}
5357
if ((double)guides.x.guidelines > 0)
5458
{
@@ -58,8 +62,12 @@ void drawItem::drawLines(const Guides &guides,
5862
auto lineColor = baseColor * (double)guides.x.guidelines;
5963
canvas.setLineColor(lineColor);
6064
auto axisPoint = blended.center.yComp() + origo.xComp();
61-
if (events.plot.marker.guide->invoke())
62-
painter.drawLine(Geom::Line(blended.center, axisPoint));
65+
Geom::Line line(blended.center, axisPoint);
66+
if (events.plot.marker.guide
67+
->invoke(Events::OnLineDrawParam(line)))
68+
{
69+
painter.drawLine(line);
70+
}
6371
}
6472
}
6573
}
@@ -152,7 +160,8 @@ void drawItem::draw(
152160

153161
if (line)
154162
{
155-
if (events.plot.marker.base->invoke())
163+
if (events.plot.marker.base
164+
->invoke(Events::OnRectDrawParam(drawItem.getBoundary())))
156165
{
157166
painter.drawStraightLine(
158167
drawItem.getLine(), drawItem.lineWidth,
@@ -165,7 +174,8 @@ void drawItem::draw(
165174
canvas.setLineWidth(
166175
*style.plot.marker.borderWidth);
167176
canvas.setBrushColor(colors.second);
168-
if (events.plot.marker.base->invoke())
177+
if (events.plot.marker.base
178+
->invoke(Events::OnRectDrawParam(drawItem.getBoundary())))
169179
{
170180
painter.drawPolygon(drawItem.points);
171181
}

src/chart/rendering/drawlegend.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ void drawLegend::drawMarker(Gfx::Color color, const Geom::Rect &rect)
9999
->factor(Styles::Legend::Marker::Type::circle)
100100
* rect.size.minSize() / 2.0;
101101

102-
if (events.marker->invoke())
102+
if (events.marker->invoke(Events::OnRectDrawParam(rect)))
103103
Gfx::Draw::RoundedRect(canvas, rect, radius);
104104
}
105105

@@ -139,7 +139,7 @@ void drawLegend::colorBar(const Geom::Rect &rect)
139139
*diagram.getStyle().data.colorGradient * (weight * enabled));
140140
canvas.setLineColor(Gfx::Color::Transparent());
141141
canvas.setLineWidth(0);
142-
if (events.bar->invoke())
142+
if (events.bar->invoke(Events::OnRectDrawParam(rect)))
143143
canvas.rectangle(rect);
144144
}
145145

@@ -160,14 +160,14 @@ void drawLegend::lightnessBar(const Geom::Rect &rect)
160160
canvas.setBrushGradient(rect.leftSide(), gradient * (weight * enabled));
161161
canvas.setLineColor(Gfx::Color::Transparent());
162162
canvas.setLineWidth(0);
163-
if (events.bar->invoke())
163+
if (events.bar->invoke(Events::OnRectDrawParam(rect)))
164164
canvas.rectangle(rect);
165165
}
166166

167167
void drawLegend::sizeBar(const Geom::Rect &rect)
168168
{
169169
canvas.setBrushColor(Gfx::Color::Gray(0.8) * (weight * enabled));
170-
if (events.bar->invoke())
170+
if (events.bar->invoke(Events::OnRectDrawParam(rect)))
171171
{
172172
canvas.beginPolygon();
173173
canvas.addPoint(rect.bottomLeft());

0 commit comments

Comments
 (0)