Skip to content

Commit 22eed21

Browse files
authored
Merge pull request #543 from vizzuhq/fix-bubblechart
Change Bubblechart behaviour on failure + fix negative base markers
2 parents b5c7171 + 268a179 commit 22eed21

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44

55
### Fixed
66

7+
8+
- Change bubblechart behavior on failure.
9+
- Fix reference markers on bubblechart with negative values.
710
- From now lightness channel goes from light (low value) to dark (high value) colors.
811

12+
913
## [0.11.2] - 2024-06-18
1014

1115
### Fixed

src/base/io/log.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
#ifndef IO_LOG
22
#define IO_LOG
33

4-
#include <functional>
5-
#include <memory>
64
#include <string>
7-
#include <type_traits>
85

96
#include "base/conv/tostring.h"
107

@@ -29,7 +26,7 @@ class Log
2926

3027
bool enabled = true;
3128
bool timestamp = true;
32-
Log::LogFunc logFunc = [](std::string const &s)
29+
LogFunc logFunc = [](const std::string &s)
3330
{
3431
puts(s.c_str());
3532
};

src/chart/speclayout/bubblechart.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ void BubbleChart::generate()
3838
auto firstMarkerSize = baseMarker->size();
3939
baseMarker->emplaceCircle(Geom::Point{0, 0}, firstMarkerSize);
4040

41-
auto currMarker = baseMarker + 1;
42-
while (currMarker != markers.end() && currMarker->negative)
43-
currMarker++->emplaceCircle(Geom::Point{0, 0}, 0);
44-
if (currMarker == markers.end()) return;
41+
auto nextBaseMarker = baseMarker + 1;
42+
while (
43+
nextBaseMarker != markers.end() && nextBaseMarker->negative)
44+
nextBaseMarker++->emplaceCircle(Geom::Point{0, 0}, 0);
45+
if (nextBaseMarker == markers.end()) return;
4546

47+
auto currMarker = nextBaseMarker;
4648
auto markerSize = currMarker->size();
4749
currMarker->emplaceCircle(
4850
Geom::Point{firstMarkerSize + markerSize, 0},
@@ -59,22 +61,25 @@ void BubbleChart::generate()
5961
if (markerSize == 0.0) break;
6062

6163
if (auto &&candidate1 = getTouchingCircle(markerSize,
62-
baseMarker[1],
64+
*nextBaseMarker,
6365
*preMarker);
6466
candidate1
6567
&& !candidate1->overlaps(baseMarker->circle(), 0.00001)) {
6668
currMarker->emplaceCircle(*candidate1);
67-
++baseMarker;
69+
baseMarker = nextBaseMarker++;
70+
while (nextBaseMarker->negative) ++nextBaseMarker;
6871
}
6972
else if (auto &&candidate0 = getTouchingCircle(markerSize,
7073
*baseMarker,
7174
*preMarker);
7275
candidate0
73-
&& !candidate0->overlaps(baseMarker[1].circle(),
76+
&& !candidate0->overlaps(nextBaseMarker->circle(),
7477
0.00001))
7578
currMarker->emplaceCircle(*candidate0);
76-
else
77-
throw std::logic_error("Cannot generate bubble chart");
79+
else {
80+
// TODO bubblechart generation failed. It need a fix.
81+
break;
82+
}
7883
preMarker = currMarker;
7984
}
8085

0 commit comments

Comments
 (0)