@@ -9,6 +9,7 @@ using test::assert;
99using test::check;
1010using test::skip;
1111using test::operator " " _is_true;
12+ using test::operator " " _is_false;
1213
1314Geom::Size Gfx::ICanvas::textBoundary (const Font &font,
1415 const std::string &text)
@@ -17,7 +18,7 @@ Geom::Size Gfx::ICanvas::textBoundary(const Font &font,
1718 font.size };
1819}
1920
20- struct MyCanvas : Gfx::ICanvas, Vizzu::Draw::Painter
21+ struct MyCanvas final : Gfx::ICanvas, Vizzu::Draw::Painter
2122{
2223 MyCanvas () noexcept = default ;
2324 ~MyCanvas () final = default ;
@@ -61,6 +62,17 @@ struct chart_setup
6162{
6263 std::vector<std::pair<Vizzu::Gen::ChannelId, const char *>>
6364 series;
65+ bool is_emscripten{[]
66+ {
67+ bool is_emscripten{
68+ #ifdef __EMSCRIPTEN__
69+ true
70+ #endif
71+ };
72+
73+ skip->*is_emscripten == " Emscripten build" _is_false;
74+ return is_emscripten;
75+ }()};
6476 Vizzu::Chart chart{};
6577
6678 explicit (false ) operator Vizzu::Chart &()
@@ -92,17 +104,14 @@ struct event_as
92104{
93105 std::string json;
94106 const Util::EventTarget *target;
95- std::variant<std::monostate,
96- Vizzu::Draw::Rect,
97- Vizzu::Draw::Line,
98- Vizzu::Events::OnTextDrawDetail>
107+ std::variant<std::monostate, Vizzu::Draw::Rect, Vizzu::Draw::Line>
99108 drawn;
100109};
101110
102- std::multimap<std::string, event_as, std::less<>>
103- get_events ( Vizzu::Chart &chart, const double &position = 1.0 )
111+ std::multimap<std::string, event_as, std::less<>> get_events (
112+ Vizzu::Chart &chart)
104113{
105- chart.getAnimOptions ().control .position = position ;
114+ chart.getAnimOptions ().control .position = 1.0 ;
106115
107116 bool ends{};
108117 chart.setKeyframe ();
@@ -113,43 +122,36 @@ get_events(Vizzu::Chart &chart, const double &position = 1.0)
113122 });
114123
115124 std::multimap<std::string, event_as, std::less<>> events;
125+
126+ auto line =
127+ chart.getOptions ().geometry == Vizzu::Gen::ShapeType::line;
116128 chart.getEventDispatcher ().registerOnEachEvent (0 ,
117- [&events](Util::EventDispatcher::Params ¶ms)
129+ [&events, &line ](Util::EventDispatcher::Params ¶ms)
118130 {
119- if (typeid (params)
120- == typeid (Util::EventDispatcher::Params)
121- || dynamic_cast <Vizzu::Events::OnUpdateDetail *>(
122- ¶ms)) {
123- events.emplace (std::piecewise_construct,
124- std::tuple{params.eventName },
125- std::tuple{params.toJSON (), params.target });
126- }
127- else if (auto *p = dynamic_cast <
128- Vizzu::Events::OnTextDrawDetail *>(
129- ¶ms)) {
130- events.emplace (std::piecewise_construct,
131- std::tuple{params.eventName },
132- std::tuple{params.toJSON (), params.target , *p});
133- }
134- else if (auto *p = dynamic_cast <
135- Vizzu::Events::OnRectDrawEvent *>(¶ms)) {
131+ auto marker = params.eventName == " plot-marker-draw" ;
132+ if ((marker && line)
133+ || params.eventName == " plot-axis-draw" ) {
136134 events.emplace (std::piecewise_construct,
137135 std::tuple{params.eventName },
138136 std::tuple{params.toJSON (),
139137 params.target ,
140- p->rect });
138+ static_cast <Vizzu::Events::OnLineDrawEvent &>(
139+ params)
140+ .line });
141141 }
142- else if (auto *p = dynamic_cast <
143- Vizzu::Events::OnLineDrawEvent *>(¶ms)) {
142+ else if (marker) {
144143 events.emplace (std::piecewise_construct,
145144 std::tuple{params.eventName },
146145 std::tuple{params.toJSON (),
147146 params.target ,
148- p->line });
147+ static_cast <Vizzu::Events::OnRectDrawEvent &>(
148+ params)
149+ .rect });
149150 }
150151 else
151- skip->*false
152- == " Not all draw events type handled" _is_true;
152+ events.emplace (std::piecewise_construct,
153+ std::tuple{params.eventName },
154+ std::tuple{params.toJSON (), params.target });
153155 });
154156
155157 using clock_t = std::chrono::steady_clock;
@@ -204,7 +206,7 @@ const static auto tests =
204206 using Axis = Vizzu::Events::Targets::Axis;
205207 for (auto &&[beg, end] = events.equal_range (" plot-axis-draw" );
206208 const auto &[j, t, l] : values (subrange (beg, end)))
207- if (!dynamic_cast <Axis const &>(*t).horizontal )
209+ if (!static_cast <Axis const &>(*t).horizontal )
208210 xCenter = std::get<Vizzu::Draw::Line>(l).line .begin .x ;
209211
210212 std::set<double > zero_count{};
0 commit comments