mirror of
https://github.com/chartjs/Chart.js.git
synced 2024-10-07 20:59:08 +02:00
93 lines
2.3 KiB
JavaScript
93 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
module.exports = function(Chart) {
|
|
|
|
var globalOpts = Chart.defaults.global;
|
|
|
|
globalOpts.elements.rectangle = {
|
|
backgroundColor: globalOpts.defaultColor,
|
|
borderWidth: 0,
|
|
borderColor: globalOpts.defaultColor,
|
|
borderSkipped: 'bottom'
|
|
};
|
|
|
|
Chart.elements.Rectangle = Chart.Element.extend({
|
|
draw: function() {
|
|
var ctx = this._chart.ctx;
|
|
var vm = this._view;
|
|
|
|
var halfWidth = vm.width / 2,
|
|
leftX = vm.x - halfWidth,
|
|
rightX = vm.x + halfWidth,
|
|
top = vm.base - (vm.base - vm.y),
|
|
halfStroke = vm.borderWidth / 2;
|
|
|
|
// Canvas doesn't allow us to stroke inside the width so we can
|
|
// adjust the sizes to fit if we're setting a stroke on the line
|
|
if (vm.borderWidth) {
|
|
leftX += halfStroke;
|
|
rightX -= halfStroke;
|
|
top += halfStroke;
|
|
}
|
|
|
|
ctx.beginPath();
|
|
ctx.fillStyle = vm.backgroundColor;
|
|
ctx.strokeStyle = vm.borderColor;
|
|
ctx.lineWidth = vm.borderWidth;
|
|
|
|
// Corner points, from bottom-left to bottom-right clockwise
|
|
// | 1 2 |
|
|
// | 0 3 |
|
|
var corners = [
|
|
[leftX, vm.base],
|
|
[leftX, top],
|
|
[rightX, top],
|
|
[rightX, vm.base]
|
|
];
|
|
|
|
// Find first (starting) corner with fallback to 'bottom'
|
|
var borders = ['bottom', 'left', 'top', 'right'];
|
|
var startCorner = borders.indexOf(vm.borderSkipped, 0);
|
|
if (startCorner === -1)
|
|
startCorner = 0;
|
|
|
|
function cornerAt(index) {
|
|
return corners[(startCorner + index) % 4];
|
|
}
|
|
|
|
// Draw rectangle from 'startCorner'
|
|
ctx.moveTo.apply(ctx, cornerAt(0));
|
|
for (var i = 1; i < 4; i++)
|
|
ctx.lineTo.apply(ctx, cornerAt(i));
|
|
|
|
ctx.fill();
|
|
if (vm.borderWidth) {
|
|
ctx.stroke();
|
|
}
|
|
},
|
|
height: function() {
|
|
var vm = this._view;
|
|
return vm.base - vm.y;
|
|
},
|
|
inRange: function(mouseX, mouseY) {
|
|
var vm = this._view;
|
|
return vm ?
|
|
(vm.y < vm.base ?
|
|
(mouseX >= vm.x - vm.width / 2 && mouseX <= vm.x + vm.width / 2) && (mouseY >= vm.y && mouseY <= vm.base) :
|
|
(mouseX >= vm.x - vm.width / 2 && mouseX <= vm.x + vm.width / 2) && (mouseY >= vm.base && mouseY <= vm.y)) :
|
|
false;
|
|
},
|
|
inLabelRange: function(mouseX) {
|
|
var vm = this._view;
|
|
return vm ? (mouseX >= vm.x - vm.width / 2 && mouseX <= vm.x + vm.width / 2) : false;
|
|
},
|
|
tooltipPosition: function() {
|
|
var vm = this._view;
|
|
return {
|
|
x: vm.x,
|
|
y: vm.y
|
|
};
|
|
}
|
|
});
|
|
|
|
}; |