in share/src/sprite-editor/buttons.ts [53:134]
protected buildDom() {
// Our css minifier mangles animation names so they need to be injected manually
this.root.style().content(`
.toggle-left {
transform: translateX(0px);
animation: mvleft 0.2s 0s ease;
}
.toggle-right {
transform: translateX(100px);
animation: mvright 0.2s 0s ease;
}
@keyframes mvright {
0% {
transform: translateX(0px);
}
100% {
transform: translateX(100px);
}
}
@keyframes mvleft {
0% {
transform: translateX(100px);
}
100% {
transform: translateX(0px);
}
}
`);
// The outer border has an inner-stroke so we need to clip out the outer part
// because SVG's don't support "inner borders"
const clip = this.root.def().create("clipPath", "sprite-editor-toggle-border")
.clipPathUnits(true);
clip.draw("rect")
.at(0, 0)
.corners(TOGGLE_CORNER_RADIUS / TOGGLE_WIDTH, TOGGLE_CORNER_RADIUS / TOGGLE_HEIGHT)
.size(1, 1);
// Draw the outer border
this.root.draw("rect")
.size(TOGGLE_WIDTH, TOGGLE_HEIGHT)
.fill(this.props.baseColor)
.stroke(this.props.borderColor, TOGGLE_BORDER_WIDTH * 2)
.corners(TOGGLE_CORNER_RADIUS, TOGGLE_CORNER_RADIUS)
.clipPath("url(#sprite-editor-toggle-border)");
// Draw the background
this.root.draw("rect")
.at(TOGGLE_BORDER_WIDTH, TOGGLE_BORDER_WIDTH)
.size(TOGGLE_WIDTH - TOGGLE_BORDER_WIDTH * 2, TOGGLE_HEIGHT - TOGGLE_BORDER_WIDTH * 2)
.fill(this.props.backgroundColor)
.corners(TOGGLE_CORNER_RADIUS, TOGGLE_CORNER_RADIUS);
// Draw the switch
this.switch = this.root.draw("rect")
.at(TOGGLE_BORDER_WIDTH, TOGGLE_BORDER_WIDTH)
.size((TOGGLE_WIDTH - TOGGLE_BORDER_WIDTH * 2) / 2, TOGGLE_HEIGHT - TOGGLE_BORDER_WIDTH * 2)
.fill(this.props.switchColor)
.corners(TOGGLE_CORNER_RADIUS, TOGGLE_CORNER_RADIUS);
// Draw the left option
this.leftElement = this.root.group();
this.leftText = mkText(this.props.leftText)
.appendClass("sprite-editor-text")
.fill(this.props.selectedTextColor);
this.leftElement.appendChild(this.leftText);
// Draw the right option
this.rightElement = this.root.group();
this.rightText = mkText(this.props.rightText)
.appendClass("sprite-editor-text")
.fill(this.props.unselectedTextColor);
this.rightElement.appendChild(this.rightText);
this.root.onClick(() => this.toggle());
}