Skip to content

Commit e49826f

Browse files
committed
Clipping for plot area + style parameter plot.overflow.
1 parent 00f78c3 commit e49826f

File tree

18 files changed

+280
-211
lines changed

18 files changed

+280
-211
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## [Unreleased]
44

5+
- Parts of markers outside of plot area are getting clipped. This behaviour can
6+
be controlled by style.plot.overflow parameter.
7+
58
## [0.3.1] - 2021-09-24
69

710
### Fixed

src/apps/qutils/canvas.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ void BaseCanvas::setClipRect(const Geom::Rect &rect)
186186
painter.setClipRect(toQRect(rect));
187187
}
188188

189+
void BaseCanvas::setClipCircle(const Geom::Circle &circle)
190+
{
191+
QPainterPath path;
192+
path.addEllipse(toQRect(circle.boundary()));
193+
painter.setClipPath(path);
194+
}
195+
189196
void BaseCanvas::setClipPolygon() {
190197
painter.setClipping(true);
191198
painter.setClipPath(polygon);

src/apps/qutils/canvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class BaseCanvas :
2828

2929
Geom::Rect getClipRect() const override;
3030
void setClipRect(const Geom::Rect &rect) override;
31+
void setClipCircle(const Geom::Circle &circle) override;
3132
void setClipPolygon() override;
3233
void setBrushColor(const Gfx::Color &color) override;
3334
void setLineColor(const Gfx::Color &color) override;

src/apps/weblib/interface.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,15 @@ mergeInto(LibraryManager.library, {
2020
dc.rect(x, y, sizex, sizey);
2121
dc.clip();
2222
},
23+
canvas_setClipCircle: function(x, y, radius) {
24+
var dc = Module.render.dc();
25+
dc.beginPath();
26+
dc.arc(x, y, radius, 0, 6.28318530718);
27+
dc.clip();
28+
},
2329
canvas_setClipPolygon: function() {
2430
var dc = Module.render.dc();
31+
dc.closePath();
2532
dc.clip();
2633
Module.render.endPolygonNotification();
2734
},
@@ -98,7 +105,7 @@ mergeInto(LibraryManager.library, {
98105
canvas_circle: function(x, y, radius) {
99106
var dc = Module.render.dc();
100107
dc.beginPath();
101-
dc.arc(x, y, radius, 0, 6.283);
108+
dc.arc(x, y, radius, 0, 6.28318530718);
102109
dc.fill();
103110
if (Module.render.noneZeroLineWidth())
104111
dc.stroke();

src/apps/weblib/js-api/vizzu.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,9 @@ interface Plot extends Padding, Box {
443443
xAxis?: Axis|null;
444444
/** Style settings for the y-axis - or the radius when using polar coordinates. */
445445
yAxis?: Axis|null;
446+
/** Controls drawing outside of the plot area. If hidden, clipping will be
447+
set for the boundary of the coordinate system. */
448+
overflow?: 'hidden'|'visible';
446449
}
447450

448451
interface LegendMarker {

src/apps/weblib/jscriptcanvas.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ struct CanvasRuntime : public ElapsedTime<CanvasRuntime> {
1818
extern "C" {
1919
extern void canvas_textBoundary(const char*, double*, double*);
2020
extern void canvas_setClipRect(double, double, double, double);
21+
extern void canvas_setClipCircle(double, double, double);
2122
extern void canvas_setClipPolygon();
2223
extern void canvas_setBrushColor(double, double, double, double);
2324
extern void canvas_setLineColor(double, double, double, double);
@@ -82,6 +83,13 @@ void JScriptOutputCanvas::setClipRect(const Geom::Rect &rect)
8283
}
8384
}
8485

86+
void JScriptOutputCanvas::setClipCircle(const Geom::Circle &circle)
87+
{
88+
_measure_runtime(CanvasRuntime);
89+
clipRect = circle.boundary();
90+
::canvas_setClipCircle(circle.center.x, circle.center.y, circle.radius);
91+
}
92+
8593
void JScriptOutputCanvas::setClipPolygon() {
8694
_measure_runtime(CanvasRuntime);
8795
::canvas_setClipPolygon();

src/apps/weblib/jscriptcanvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class JScriptOutputCanvas : public Gfx::ICanvas
2424

2525
Geom::Rect getClipRect() const override;
2626
void setClipRect(const Geom::Rect &rect) override;
27+
void setClipCircle(const Geom::Circle &circle) override;
2728
void setClipPolygon() override;
2829
void setBrushColor(const Gfx::Color &color) override;
2930
void setLineColor(const Gfx::Color &color) override;

src/base/gfx/canvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ struct ICanvas
3535
virtual Geom::Size textBoundary(const std::string &string) = 0;
3636
virtual Geom::Rect getClipRect() const = 0;
3737
virtual void setClipRect(const Geom::Rect &rect) = 0;
38+
virtual void setClipCircle(const Geom::Circle &circle) = 0;
3839
virtual void setClipPolygon() = 0;
3940
virtual void setBrushColor(const Gfx::Color &color) = 0;
4041
virtual void setLineColor(const Gfx::Color &color) = 0;

src/base/gfx/nullcanvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct NullCanvas : public ICanvas
1616

1717
Geom::Rect getClipRect() const override { return Geom::Rect(); }
1818
void setClipRect(const Geom::Rect &) override {}
19+
void setClipCircle(const Geom::Circle &) override {}
1920
void setClipPolygon() override {}
2021
void setBrushColor(const Color &) override {}
2122
void setLineColor(const Color &) override {}

src/chart/main/style.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,9 @@ Chart Chart::def()
277277
.interlacing = {
278278
.color = Gfx::Color::Gray(0.97)
279279
}
280-
}
280+
},
281+
.overflow = ::Anim::Interpolated<Overflow>
282+
(Overflow::hidden)
281283
},
282284
.legend = {
283285
{

0 commit comments

Comments
 (0)