Current File : /home/tradevaly/www/node_modules/apexcharts/src/modules/Crosshairs.js |
import Graphics from './Graphics'
import Filters from './Filters'
import Utils from '../utils/Utils'
class Crosshairs {
constructor(ctx) {
this.ctx = ctx
this.w = ctx.w
}
drawXCrosshairs() {
const w = this.w
let graphics = new Graphics(this.ctx)
let filters = new Filters(this.ctx)
let crosshairGradient = w.config.xaxis.crosshairs.fill.gradient
let crosshairShadow = w.config.xaxis.crosshairs.dropShadow
let fillType = w.config.xaxis.crosshairs.fill.type
let gradientFrom = crosshairGradient.colorFrom
let gradientTo = crosshairGradient.colorTo
let opacityFrom = crosshairGradient.opacityFrom
let opacityTo = crosshairGradient.opacityTo
let stops = crosshairGradient.stops
let shadow = 'none'
let dropShadow = crosshairShadow.enabled
let shadowLeft = crosshairShadow.left
let shadowTop = crosshairShadow.top
let shadowBlur = crosshairShadow.blur
let shadowColor = crosshairShadow.color
let shadowOpacity = crosshairShadow.opacity
let xcrosshairsFill = w.config.xaxis.crosshairs.fill.color
if (w.config.xaxis.crosshairs.show) {
if (fillType === 'gradient') {
xcrosshairsFill = graphics.drawGradient(
'vertical',
gradientFrom,
gradientTo,
opacityFrom,
opacityTo,
null,
stops,
null
)
}
let xcrosshairs = graphics.drawRect()
if (w.config.xaxis.crosshairs.width === 1) {
// to prevent drawing 2 lines, convert rect to line
xcrosshairs = graphics.drawLine()
}
let gridHeight = w.globals.gridHeight
if (!Utils.isNumber(gridHeight) || gridHeight < 0) {
gridHeight = 0
}
let crosshairsWidth = w.config.xaxis.crosshairs.width
if (!Utils.isNumber(crosshairsWidth) || crosshairsWidth < 0) {
crosshairsWidth = 0
}
xcrosshairs.attr({
class: 'apexcharts-xcrosshairs',
x: 0,
y: 0,
y2: gridHeight,
width: crosshairsWidth,
height: gridHeight,
fill: xcrosshairsFill,
filter: shadow,
'fill-opacity': w.config.xaxis.crosshairs.opacity,
stroke: w.config.xaxis.crosshairs.stroke.color,
'stroke-width': w.config.xaxis.crosshairs.stroke.width,
'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray
})
if (dropShadow) {
xcrosshairs = filters.dropShadow(xcrosshairs, {
left: shadowLeft,
top: shadowTop,
blur: shadowBlur,
color: shadowColor,
opacity: shadowOpacity
})
}
w.globals.dom.elGraphical.add(xcrosshairs)
}
}
drawYCrosshairs() {
const w = this.w
let graphics = new Graphics(this.ctx)
let crosshair = w.config.yaxis[0].crosshairs
const offX = w.globals.barPadForNumericAxis
if (w.config.yaxis[0].crosshairs.show) {
let ycrosshairs = graphics.drawLine(
-offX,
0,
w.globals.gridWidth + offX,
0,
crosshair.stroke.color,
crosshair.stroke.dashArray,
crosshair.stroke.width
)
ycrosshairs.attr({
class: 'apexcharts-ycrosshairs'
})
w.globals.dom.elGraphical.add(ycrosshairs)
}
// draw an invisible crosshair to help in positioning the yaxis tooltip
let ycrosshairsHidden = graphics.drawLine(
-offX,
0,
w.globals.gridWidth + offX,
0,
crosshair.stroke.color,
0,
0
)
ycrosshairsHidden.attr({
class: 'apexcharts-ycrosshairs-hidden'
})
w.globals.dom.elGraphical.add(ycrosshairsHidden)
}
}
export default Crosshairs