mirror of
https://github.com/niklasvh/html2canvas.git
synced 2023-08-10 21:13:10 +03:00
Draw checkboxes as vector path
This commit is contained in:
parent
a1b8cbc2fb
commit
af09280c38
58
src/Input.js
58
src/Input.js
@ -7,6 +7,7 @@ import {BACKGROUND_CLIP, BACKGROUND_ORIGIN} from './parsing/background';
|
|||||||
import {BORDER_STYLE} from './parsing/border';
|
import {BORDER_STYLE} from './parsing/border';
|
||||||
|
|
||||||
import Circle from './drawing/Circle';
|
import Circle from './drawing/Circle';
|
||||||
|
import Vector from './drawing/Vector';
|
||||||
import Color from './Color';
|
import Color from './Color';
|
||||||
import Length from './Length';
|
import Length from './Length';
|
||||||
import {Bounds} from './Bounds';
|
import {Bounds} from './Bounds';
|
||||||
@ -55,21 +56,38 @@ export const inlineInputElement = (node: HTMLInputElement, container: NodeContai
|
|||||||
if (node.type === 'radio' || node.type === 'checkbox') {
|
if (node.type === 'radio' || node.type === 'checkbox') {
|
||||||
if (node.checked) {
|
if (node.checked) {
|
||||||
const size = Math.min(container.bounds.width, container.bounds.height);
|
const size = Math.min(container.bounds.width, container.bounds.height);
|
||||||
// TODO draw checkmark with Path Array<Vector>
|
|
||||||
container.style.font.fontSize = `${size - 3}px`;
|
|
||||||
container.childNodes.push(
|
container.childNodes.push(
|
||||||
node.type === 'checkbox'
|
node.type === 'checkbox'
|
||||||
? new TextContainer('\u2714', container, [
|
? [
|
||||||
new TextBounds(
|
new Vector(
|
||||||
'\u2714',
|
container.bounds.left + size * 0.39363,
|
||||||
new Bounds(
|
container.bounds.top + size * 0.79
|
||||||
container.bounds.left + size / 6,
|
),
|
||||||
container.bounds.top + size - 1,
|
new Vector(
|
||||||
0,
|
container.bounds.left + size * 0.16,
|
||||||
0
|
container.bounds.top + size * 0.5549
|
||||||
|
),
|
||||||
|
new Vector(
|
||||||
|
container.bounds.left + size * 0.27347,
|
||||||
|
container.bounds.top + size * 0.44071
|
||||||
|
),
|
||||||
|
new Vector(
|
||||||
|
container.bounds.left + size * 0.39694,
|
||||||
|
container.bounds.top + size * 0.5649
|
||||||
|
),
|
||||||
|
new Vector(
|
||||||
|
container.bounds.left + size * 0.72983,
|
||||||
|
container.bounds.top + size * 0.23
|
||||||
|
),
|
||||||
|
new Vector(
|
||||||
|
container.bounds.left + size * 0.84,
|
||||||
|
container.bounds.top + size * 0.34085
|
||||||
|
),
|
||||||
|
new Vector(
|
||||||
|
container.bounds.left + size * 0.39363,
|
||||||
|
container.bounds.top + size * 0.79
|
||||||
)
|
)
|
||||||
)
|
]
|
||||||
])
|
|
||||||
: new Circle(
|
: new Circle(
|
||||||
container.bounds.left + size / 4,
|
container.bounds.left + size / 4,
|
||||||
container.bounds.top + size / 4,
|
container.bounds.top + size / 4,
|
||||||
@ -78,7 +96,7 @@ export const inlineInputElement = (node: HTMLInputElement, container: NodeContai
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
inlineFormElement(getInputValue(node), node, container);
|
inlineFormElement(getInputValue(node), node, container, false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -86,12 +104,12 @@ export const inlineTextAreaElement = (
|
|||||||
node: HTMLTextAreaElement,
|
node: HTMLTextAreaElement,
|
||||||
container: NodeContainer
|
container: NodeContainer
|
||||||
): void => {
|
): void => {
|
||||||
inlineFormElement(node.value, node, container);
|
inlineFormElement(node.value, node, container, true);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const inlineSelectElement = (node: HTMLSelectElement, container: NodeContainer): void => {
|
export const inlineSelectElement = (node: HTMLSelectElement, container: NodeContainer): void => {
|
||||||
const option = node.options[node.selectedIndex || 0];
|
const option = node.options[node.selectedIndex || 0];
|
||||||
inlineFormElement(option ? option.text || '' : '', node, container);
|
inlineFormElement(option ? option.text || '' : '', node, container, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const reformatInputBounds = (bounds: Bounds): Bounds => {
|
export const reformatInputBounds = (bounds: Bounds): Bounds => {
|
||||||
@ -105,7 +123,12 @@ export const reformatInputBounds = (bounds: Bounds): Bounds => {
|
|||||||
return bounds;
|
return bounds;
|
||||||
};
|
};
|
||||||
|
|
||||||
const inlineFormElement = (value: string, node: HTMLElement, container: NodeContainer): void => {
|
const inlineFormElement = (
|
||||||
|
value: string,
|
||||||
|
node: HTMLElement,
|
||||||
|
container: NodeContainer,
|
||||||
|
allowLinebreak: boolean
|
||||||
|
): void => {
|
||||||
const body = node.ownerDocument.body;
|
const body = node.ownerDocument.body;
|
||||||
if (value.length > 0 && body) {
|
if (value.length > 0 && body) {
|
||||||
const wrapper = node.ownerDocument.createElement('html2canvaswrapper');
|
const wrapper = node.ownerDocument.createElement('html2canvaswrapper');
|
||||||
@ -113,6 +136,9 @@ const inlineFormElement = (value: string, node: HTMLElement, container: NodeCont
|
|||||||
wrapper.style.position = 'fixed';
|
wrapper.style.position = 'fixed';
|
||||||
wrapper.style.left = `${container.bounds.left}px`;
|
wrapper.style.left = `${container.bounds.left}px`;
|
||||||
wrapper.style.top = `${container.bounds.top}px`;
|
wrapper.style.top = `${container.bounds.top}px`;
|
||||||
|
if (!allowLinebreak) {
|
||||||
|
wrapper.style.whiteSpace = 'nowrap';
|
||||||
|
}
|
||||||
const text = node.ownerDocument.createTextNode(value);
|
const text = node.ownerDocument.createTextNode(value);
|
||||||
wrapper.appendChild(text);
|
wrapper.appendChild(text);
|
||||||
body.appendChild(wrapper);
|
body.appendChild(wrapper);
|
||||||
|
Loading…
Reference in New Issue
Block a user