perf: Draw grid as a single path
Drawing the grid as a single path is much more efficient than each marker having their own path that's begun, filled, and closed, especially when there are plenty of them.
This commit is contained in:
parent
52baf35757
commit
1920112500
20
index.html
20
index.html
@ -1110,16 +1110,24 @@ function Renderer (client) {
|
|||||||
this.drawGrid = function () {
|
this.drawGrid = function () {
|
||||||
if (!this.showExtras) { return }
|
if (!this.showExtras) { return }
|
||||||
const markers = { w: parseInt(client.tool.settings.size.width / 15), h: parseInt(client.tool.settings.size.height / 15) }
|
const markers = { w: parseInt(client.tool.settings.size.width / 15), h: parseInt(client.tool.settings.size.height / 15) }
|
||||||
|
this.context.beginPath()
|
||||||
|
this.context.lineWidth = 2
|
||||||
|
this.context.fillStyle = client.theme.active.b_med
|
||||||
for (let x = markers.w - 1; x >= 0; x--) {
|
for (let x = markers.w - 1; x >= 0; x--) {
|
||||||
for (let y = markers.h - 1; y >= 0; y--) {
|
for (let y = markers.h - 1; y >= 0; y--) {
|
||||||
const isStep = x % 4 === 0 && y % 4 === 0
|
const isStep = x % 4 === 0 && y % 4 === 0
|
||||||
if (x === 0 || y === 0) { continue }
|
if (x === 0 || y === 0) { continue }
|
||||||
this.drawMarker({
|
const pos = {
|
||||||
x: parseInt(x * 15),
|
x: parseInt(x * 15),
|
||||||
y: parseInt(y * 15)
|
y: parseInt(y * 15)
|
||||||
}, isStep ? 2.5 : 1.5, client.theme.active.b_med)
|
}
|
||||||
|
const radius = isStep ? 2.5 : 1.5
|
||||||
|
this.context.moveTo(pos.x * this.scale, pos.y * this.scale)
|
||||||
|
this.context.arc(pos.x * this.scale, pos.y * this.scale, radius, 0, 2 * Math.PI, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.context.fill()
|
||||||
|
this.context.closePath()
|
||||||
}
|
}
|
||||||
this.drawRulers = function () {
|
this.drawRulers = function () {
|
||||||
if (!client.cursor.translation) { return }
|
if (!client.cursor.translation) { return }
|
||||||
@ -1143,14 +1151,6 @@ function Renderer (client) {
|
|||||||
}
|
}
|
||||||
this.drawPath(path, style)
|
this.drawPath(path, style)
|
||||||
}
|
}
|
||||||
this.drawMarker = function (pos, radius = 1, color) {
|
|
||||||
this.context.beginPath()
|
|
||||||
this.context.lineWidth = 2
|
|
||||||
this.context.arc(pos.x * this.scale, pos.y * this.scale, radius, 0, 2 * Math.PI, false)
|
|
||||||
this.context.fillStyle = color
|
|
||||||
this.context.fill()
|
|
||||||
this.context.closePath()
|
|
||||||
}
|
|
||||||
this.drawVertex = function (pos, radius = 5) {
|
this.drawVertex = function (pos, radius = 5) {
|
||||||
this.context.beginPath()
|
this.context.beginPath()
|
||||||
this.context.lineWidth = 2
|
this.context.lineWidth = 2
|
||||||
|
@ -107,17 +107,25 @@ function Renderer (client) {
|
|||||||
|
|
||||||
const markers = { w: parseInt(client.tool.settings.size.width / 15), h: parseInt(client.tool.settings.size.height / 15) }
|
const markers = { w: parseInt(client.tool.settings.size.width / 15), h: parseInt(client.tool.settings.size.height / 15) }
|
||||||
|
|
||||||
|
this.context.beginPath()
|
||||||
|
this.context.lineWidth = 2
|
||||||
|
this.context.fillStyle = client.theme.active.b_med
|
||||||
for (let x = markers.w - 1; x >= 0; x--) {
|
for (let x = markers.w - 1; x >= 0; x--) {
|
||||||
for (let y = markers.h - 1; y >= 0; y--) {
|
for (let y = markers.h - 1; y >= 0; y--) {
|
||||||
const isStep = x % 4 === 0 && y % 4 === 0
|
const isStep = x % 4 === 0 && y % 4 === 0
|
||||||
// Don't draw margins
|
// Don't draw margins
|
||||||
if (x === 0 || y === 0) { continue }
|
if (x === 0 || y === 0) { continue }
|
||||||
this.drawMarker({
|
const pos = {
|
||||||
x: parseInt(x * 15),
|
x: parseInt(x * 15),
|
||||||
y: parseInt(y * 15)
|
y: parseInt(y * 15)
|
||||||
}, isStep ? 2.5 : 1.5, client.theme.active.b_med)
|
}
|
||||||
|
const radius = isStep ? 2.5 : 1.5
|
||||||
|
this.context.moveTo(pos.x * this.scale, pos.y * this.scale)
|
||||||
|
this.context.arc(pos.x * this.scale, pos.y * this.scale, radius, 0, 2 * Math.PI, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.context.fill()
|
||||||
|
this.context.closePath()
|
||||||
}
|
}
|
||||||
|
|
||||||
this.drawRulers = function () {
|
this.drawRulers = function () {
|
||||||
@ -150,15 +158,6 @@ function Renderer (client) {
|
|||||||
|
|
||||||
// Elements
|
// Elements
|
||||||
|
|
||||||
this.drawMarker = function (pos, radius = 1, color) {
|
|
||||||
this.context.beginPath()
|
|
||||||
this.context.lineWidth = 2
|
|
||||||
this.context.arc(pos.x * this.scale, pos.y * this.scale, radius, 0, 2 * Math.PI, false)
|
|
||||||
this.context.fillStyle = color
|
|
||||||
this.context.fill()
|
|
||||||
this.context.closePath()
|
|
||||||
}
|
|
||||||
|
|
||||||
this.drawVertex = function (pos, radius = 5) {
|
this.drawVertex = function (pos, radius = 5) {
|
||||||
this.context.beginPath()
|
this.context.beginPath()
|
||||||
this.context.lineWidth = 2
|
this.context.lineWidth = 2
|
||||||
|
Loading…
Reference in New Issue
Block a user