| author | Alexandre Segura <mex.zktk@gmail.com> |
| Wed, 22 Feb 2017 18:40:49 +0100 | |
| changeset 352 | 4f0ede751fcf |
| parent 350 | 7c0b98b10e00 |
| child 355 | 004fdb42f063 |
| permissions | -rw-r--r-- |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
1 |
<template> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
2 |
<div class="zoom"> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
3 |
<div> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
4 |
<svg ref="svg" |
|
350
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
5 |
class="cut-canvas" |
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
6 |
v-bind:class="canvasClass" |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
7 |
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> |
|
345
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
8 |
<image xmlns:xlink="http://www.w3.org/1999/xlink" |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
9 |
ref="image" |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
10 |
v-if="loaded" |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
11 |
v-bind:xlink:href="image" |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
12 |
x="0" y="0" |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
13 |
v-bind:width="imageWidth" |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
14 |
v-bind:height="imageHeight" /> |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
15 |
<shape-rect ref="rect" v-show="loaded && mode == 'rect'" |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
16 |
v-bind:paper="paper" |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
17 |
v-bind:original-annotation="annotation" |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
18 |
v-bind:readonly="readonly"></shape-rect> |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
19 |
<shape-free ref="free" v-show="loaded && mode == 'free'" |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
20 |
v-bind:paper="paper" |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
21 |
v-bind:original-annotation="annotation" |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
22 |
v-bind:readonly="readonly"></shape-free> |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
23 |
</svg> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
24 |
</div> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
25 |
<div class="zoomer"> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
26 |
<div class="btn-group-vertical" role="group" aria-label="..."> |
|
352
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
27 |
<button @click="zoomIn" type="button" class="btn btn-default" |
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
28 |
v-bind:class="{ disabled: scale >= 1.9 }">
|
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
29 |
<i class="fa fa-plus" aria-hidden="true"></i> |
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
30 |
</button> |
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
31 |
<button @click="zoomOut" type="button" class="btn btn-default" |
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
32 |
v-bind:class="{ disabled: scale === 1 }">
|
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
33 |
<i class="fa fa-minus" aria-hidden="true"></i> |
|
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
34 |
</button> |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
35 |
</div> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
36 |
</div> |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
37 |
<div class="zoom-thumbnail"> |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
38 |
<zoom-thumbnail |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
39 |
ref="thumbnail" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
40 |
@change="changeViewBox($event)" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
41 |
@dragstart="hideTooltip" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
42 |
@dragend="showTooltip" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
43 |
v-bind:image="thumbnail" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
44 |
v-bind:viewport="viewport" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
45 |
v-bind:viewBox="viewBox" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
46 |
v-bind:imageWidth="imageWidth" |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
47 |
v-bind:imageHeight="imageHeight"></zoom-thumbnail> |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
48 |
</div> |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
49 |
<div class="mode-controls"> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
50 |
<div class="btn-group" role="group" aria-label="..."> |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
51 |
<button @click="setMode('rect')" type="button" class="btn"
|
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
52 |
v-bind:class="{ 'btn-default': true, 'btn-primary': mode === 'rect', 'disabled': readonly }">
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
53 |
<svg width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"><g><rect x="352" y="432" width="64" height="48"/><polygon points="416,352 416,96 176,96 176,160 352,160 352,352 160,352 160,32 96,32 96,96 32,96 32,160 96,160 96,416 480,416 480,352"/></g><text x="0" y="527" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">Created by Bluetip Design</text><text x="0" y="532" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">from the Noun Project</text></svg> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
54 |
</button> |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
55 |
<button @click="setMode('free')" type="button" class="btn"
|
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
56 |
v-bind:class="{ 'btn-default': true, 'btn-primary': mode === 'free', 'disabled': readonly }">
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
57 |
<svg width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve"><g transform="translate(-450 -380)"><g xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M453,395c0,2.209,1.79,4,4,4c1.307,0,2.455-0.635,3.186-1.604l7.121,4.069C467.11,401.938,467,402.456,467,403 c0,2.209,1.79,4,4,4c2.209,0,4-1.791,4-4s-1.791-4-4-4c-1.307,0-2.455,0.635-3.186,1.604l-7.121-4.069 c0.196-0.473,0.307-0.99,0.307-1.534s-0.11-1.062-0.307-1.534l7.121-4.069c0.73,0.969,1.879,1.604,3.186,1.604 c2.209,0,4-1.791,4-4s-1.791-4-4-4c-2.21,0-4,1.791-4,4c0,0.544,0.11,1.062,0.307,1.534l-7.121,4.069 c-0.73-0.969-1.879-1.604-3.186-1.604C454.79,391,453,392.791,453,395z M471,400c1.654,0,3,1.346,3,3s-1.346,3-3,3s-3-1.346-3-3 S469.346,400,471,400z M471,384c1.654,0,3,1.346,3,3s-1.346,3-3,3s-3-1.346-3-3S469.346,384,471,384z M460,395 c0,1.654-1.346,3-3,3s-3-1.346-3-3s1.346-3,3-3S460,393.346,460,395z"/></g></g><text x="0" y="45" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">Created by Hea Poh Lin</text><text x="0" y="50" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">from the Noun Project</text></svg> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
58 |
</button> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
59 |
</path> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
60 |
</div> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
61 |
</div> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
62 |
</template> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
63 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
64 |
<script> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
65 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
66 |
import Snap from 'snapsvg' |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
67 |
import ShapeRect from './ShapeRect.vue' |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
68 |
import ShapeFree from './ShapeFree.vue' |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
69 |
import ZoomThumbnail from './ZoomThumbnail.vue' |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
70 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
71 |
export default {
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
72 |
props: {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
73 |
image: String, |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
74 |
thumbnail: String, |
|
325
8f158a4c7759
Use props to update annotation in components.
Alexandre Segura <mex.zktk@gmail.com>
parents:
323
diff
changeset
|
75 |
annotation: {
|
|
8f158a4c7759
Use props to update annotation in components.
Alexandre Segura <mex.zktk@gmail.com>
parents:
323
diff
changeset
|
76 |
type: Object, |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
77 |
default: null |
|
325
8f158a4c7759
Use props to update annotation in components.
Alexandre Segura <mex.zktk@gmail.com>
parents:
323
diff
changeset
|
78 |
}, |
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
79 |
tooltip: {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
80 |
type: Boolean, |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
81 |
default: false |
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
82 |
}, |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
83 |
}, |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
84 |
components: {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
85 |
shapeRect: ShapeRect, |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
86 |
shapeFree: ShapeFree, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
87 |
zoomThumbnail: ZoomThumbnail, |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
88 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
89 |
data() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
90 |
return {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
91 |
paper: null, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
92 |
loaded: false, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
93 |
mode: 'rect', |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
94 |
viewport: { width: 0, height: 0 },
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
95 |
viewBox: [0 , 0, 0, 0], |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
96 |
zoomFactor: 0.1, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
97 |
scale: 1, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
98 |
imgMinSize: 0, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
99 |
imageWidth: 0, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
100 |
imageHeight: 0, |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
101 |
readonly: false |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
102 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
103 |
}, |
|
350
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
104 |
computed: {
|
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
105 |
canvasClass: function() {
|
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
106 |
return {
|
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
107 |
'canvas--rect': !this.readonly && this.mode === 'rect', |
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
108 |
'canvas--free': !this.readonly && this.mode === 'free' |
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
109 |
} |
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
110 |
} |
|
7c0b98b10e00
Do not show custom cursors when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
345
diff
changeset
|
111 |
}, |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
112 |
watch: {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
113 |
mode: function(mode) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
114 |
this.reset(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
115 |
if (mode === 'free') {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
116 |
this.handleDrawFree(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
117 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
118 |
if (mode === 'rect') {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
119 |
this.handleDrawRect(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
120 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
121 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
122 |
loaded: function(loaded) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
123 |
if (!loaded) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
124 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
125 |
if (this.annotation) {
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
126 |
this.loadAnnotation(); |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
127 |
} else {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
128 |
if (this.mode === 'free') {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
129 |
this.handleDrawFree(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
130 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
131 |
if (this.mode === 'rect') {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
132 |
this.handleDrawRect(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
133 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
134 |
} |
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
135 |
}, |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
136 |
annotation: function(annotation) {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
137 |
this.reset(); |
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
138 |
this.readonly = !!annotation; |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
139 |
if (this.annotation) {
|
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
140 |
this.loadAnnotation(); |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
141 |
} |
|
334
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
142 |
}, |
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
143 |
scale: function(scale) {
|
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
144 |
var factor = 0; |
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
145 |
if (scale > 1) {
|
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
146 |
factor = scale - 1; |
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
147 |
} |
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
148 |
|
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
149 |
if (scale === 1) {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
150 |
this.resetViewBox(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
151 |
} else {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
152 |
var center = this.getCenter(); |
|
334
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
153 |
|
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
154 |
var viewBoxW = this.imgMinSize - (this.imgMinSize * factor); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
155 |
var viewBoxH = viewBoxW; |
|
334
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
156 |
|
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
157 |
var viewBox = [ |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
158 |
center.x - viewBoxW / 2, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
159 |
center.y - viewBoxH / 2, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
160 |
viewBoxW, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
161 |
viewBoxH |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
162 |
]; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
163 |
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
164 |
this.hideTooltip(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
165 |
this.animateViewBox(viewBox, () => this.showTooltip()); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
166 |
} |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
167 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
168 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
169 |
mounted() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
170 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
171 |
var img = new Image(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
172 |
img.onload = (e) => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
173 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
174 |
this.paper = new Snap(this.$refs.svg); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
175 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
176 |
this.imgMinSize = Math.min(img.width, img.height); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
177 |
|
|
345
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
178 |
console.log('Image: %s x %s', img.width, img.height);
|
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
179 |
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
180 |
// FIXME |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
181 |
// Image is actually NOT loaded at this step |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
182 |
setTimeout(() => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
183 |
|
|
345
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
184 |
var bcr = this.paper.node.getBoundingClientRect(); |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
185 |
|
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
186 |
console.log('Viewport: %s x %s', bcr.width, bcr.height);
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
187 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
188 |
var viewBox = [0 , 0, img.width, img.height]; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
189 |
var viewport = {
|
|
345
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
190 |
width: bcr.width, |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
191 |
height: bcr.height |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
192 |
}; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
193 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
194 |
Object.assign(this, {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
195 |
imageWidth: img.width, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
196 |
imageHeight: img.height, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
197 |
viewBox: viewBox, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
198 |
viewport: viewport, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
199 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
200 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
201 |
var handlerSize = 15 * Math.min(viewBox[2], viewBox[3]) / viewport.width; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
202 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
203 |
this.$refs.rect.handlerSize = handlerSize; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
204 |
this.$refs.free.handlerRadius = handlerSize / 2; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
205 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
206 |
this.paper.attr({"viewBox": this.viewBox});
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
207 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
208 |
this.loaded = true; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
209 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
210 |
}, 100); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
211 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
212 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
213 |
img.src = this.image; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
214 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
215 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
216 |
methods: {
|
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
217 |
hideTooltip: function() {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
218 |
if (this.mode === 'free') {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
219 |
this.$refs.free.hideTooltip(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
220 |
} |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
221 |
if (this.mode === 'rect') {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
222 |
this.$refs.rect.hideTooltip(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
223 |
} |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
224 |
}, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
225 |
showTooltip: function() {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
226 |
if (this.mode === 'free') {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
227 |
this.$refs.free.showTooltip(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
228 |
} |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
229 |
if (this.mode === 'rect') {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
230 |
this.$refs.rect.showTooltip(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
231 |
} |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
232 |
}, |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
233 |
reset: function() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
234 |
// Clear shapes |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
235 |
this.$refs.rect.clear(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
236 |
this.$refs.free.clear(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
237 |
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
238 |
this.removeEventHandlers(); |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
239 |
this.resetZoom(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
240 |
this.resetViewBox(); |
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
241 |
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
242 |
if (this.mode === 'free') {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
243 |
this.handleDrawFree(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
244 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
245 |
if (this.mode === 'rect') {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
246 |
this.handleDrawRect(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
247 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
248 |
}, |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
249 |
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
250 |
removeEventHandlers: function() {
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
251 |
this.paper.unmousedown(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
252 |
this.paper.unmousemove(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
253 |
this.paper.unmouseup(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
254 |
this.paper.unclick(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
255 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
256 |
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
257 |
loadAnnotation: function() {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
258 |
if (this.annotation.fragment.length > 0) {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
259 |
var pieces = this.annotation.fragment.split(';');
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
260 |
var path = pieces[0]; |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
261 |
var mode = pieces[1].toLowerCase(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
262 |
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
263 |
this.mode = mode; |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
264 |
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
265 |
this.$nextTick(() => {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
266 |
path = this.denormalizePath(path); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
267 |
if (mode === 'free') {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
268 |
this.$refs.free.fromSVGPath(path, this.tooltip); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
269 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
270 |
if (mode === 'rect') {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
271 |
this.$refs.rect.fromSVGPath(path, this.tooltip); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
272 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
273 |
}); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
274 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
275 |
}, |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
276 |
|
|
342
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
277 |
setMode: function(mode) {
|
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
278 |
if (this.readonly) { return; }
|
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
279 |
|
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
280 |
this.mode = mode; |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
281 |
}, |
|
ebec1d59dc74
Disable resize & change drawing mode when readonly.
Alexandre Segura <mex.zktk@gmail.com>
parents:
335
diff
changeset
|
282 |
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
283 |
getCenter: function() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
284 |
return {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
285 |
x: this.viewBox[0] + (this.viewBox[2] / 2), |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
286 |
y: this.viewBox[1] + (this.viewBox[3] / 2) |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
287 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
288 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
289 |
|
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
290 |
changeViewBox: function(e) {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
291 |
const viewBox = this.viewBox.slice(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
292 |
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
293 |
viewBox[0] = e.x; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
294 |
viewBox[1] = e.y; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
295 |
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
296 |
this.paper.attr({ "viewBox": viewBox });
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
297 |
}, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
298 |
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
299 |
resetZoom: function() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
300 |
this.scale = 1; |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
301 |
this.$refs.thumbnail.reset(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
302 |
}, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
303 |
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
304 |
animateViewBox: function(viewBox, cb) {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
305 |
const viewBoxPrev = this.viewBox.slice(); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
306 |
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
307 |
Snap.animate( |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
308 |
viewBoxPrev, viewBox, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
309 |
(viewBox) => this.paper.attr({ "viewBox": viewBox }),
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
310 |
350, mina.easeinout, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
311 |
() => {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
312 |
this.viewBox = viewBox; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
313 |
if (cb) { cb(); }
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
314 |
} |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
315 |
); |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
316 |
}, |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
317 |
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
318 |
resetViewBox: function() {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
319 |
this.animateViewBox([0, 0, this.imageWidth, this.imageHeight]); |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
320 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
321 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
322 |
zoomIn: function() {
|
|
352
4f0ede751fcf
Handle max zoom level.
Alexandre Segura <mex.zktk@gmail.com>
parents:
350
diff
changeset
|
323 |
if (this.scale >= 1.9) { return; }
|
|
334
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
324 |
this.scale = this.scale + (1 * this.zoomFactor); |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
325 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
326 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
327 |
zoomOut: function() {
|
|
334
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
328 |
if (this.scale === 1) { return; }
|
|
a0caf91c8374
Improve zoom, simplify code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
331
diff
changeset
|
329 |
this.scale = this.scale - (1 * this.zoomFactor); |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
330 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
331 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
332 |
zoomOffset: function() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
333 |
return {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
334 |
x: this.viewport.width / this.viewBox[2], |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
335 |
y: this.viewport.height / this.viewBox[3] |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
336 |
}; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
337 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
338 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
339 |
computeOffset: function(e) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
340 |
var rect = this.$refs.image.getBoundingClientRect(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
341 |
var zoomOffset = this.zoomOffset(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
342 |
var offsetX = (e.clientX - rect.left) / Math.min(zoomOffset.x, zoomOffset.y); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
343 |
var offsetY = (e.clientY - rect.top) / Math.min(zoomOffset.x, zoomOffset.y); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
344 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
345 |
return { x: offsetX, y: offsetY };
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
346 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
347 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
348 |
computeHandlerSize: function(e) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
349 |
return 60 * Math.min(this.viewBox[2], this.viewBox[3]) / this.imageWidth; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
350 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
351 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
352 |
normalizePath: function(path) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
353 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
354 |
var xRatio = 100 / this.imageWidth; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
355 |
var yRatio = 100 / this.imageHeight; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
356 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
357 |
if (isNaN(xRatio) || isNaN(yRatio)) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
358 |
throw new Error('Ratio should be a number.');
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
359 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
360 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
361 |
var normalizeMatrix = Snap.matrix(xRatio, 0, 0, yRatio, 0, 0); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
362 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
363 |
path = Snap.path.map(path, normalizeMatrix).toString(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
364 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
365 |
if (path.search(/[z|Z]/gi) === -1) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
366 |
path += " Z"; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
367 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
368 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
369 |
return path; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
370 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
371 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
372 |
denormalizePath: function(path) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
373 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
374 |
var xRatio = this.imageWidth / 100; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
375 |
var yRatio = this.imageHeight / 100; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
376 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
377 |
if (isNaN(xRatio) || isNaN(yRatio)) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
378 |
throw new Error('Ratio should be a number.');
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
379 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
380 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
381 |
var transformMatrix = Snap.matrix(xRatio, 0, 0, yRatio, 0, 0); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
382 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
383 |
path = Snap.path.map(path, transformMatrix).toString(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
384 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
385 |
if (path.search(/[z|Z]/gi) === -1) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
386 |
path += " Z"; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
387 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
388 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
389 |
return path; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
390 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
391 |
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
392 |
toSVGPath: function() {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
393 |
if (this.mode === 'free') {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
394 |
this.$refs.free.toSVGPath(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
395 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
396 |
if (this.mode === 'rect') {
|
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
397 |
this.$refs.rect.toSVGPath(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
398 |
} |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
399 |
}, |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
400 |
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
401 |
handleDrawFree: function() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
402 |
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
403 |
this.removeEventHandlers(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
404 |
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
405 |
var clickTimeout; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
406 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
407 |
var clickHandler = function (offsetX, offsetY) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
408 |
clickTimeout = null; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
409 |
this.$refs.free.addPoint(offsetX, offsetY); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
410 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
411 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
412 |
this.paper.click((e) => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
413 |
if (clickTimeout) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
414 |
if (!$(e.target).is('image')) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
415 |
if (this.$refs.free.closed) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
416 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
417 |
var offset = this.computeOffset(e); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
418 |
var offsetX = offset.x; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
419 |
var offsetY = offset.y; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
420 |
clickTimeout = setTimeout(clickHandler.bind(this, offsetX, offsetY), 190); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
421 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
422 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
423 |
}, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
424 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
425 |
handleDrawRect: function() {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
426 |
|
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
427 |
this.removeEventHandlers(); |
|
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
428 |
|
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
429 |
var startPosition = { x: 0, y: 0 };
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
430 |
var currentPosition = { x: 0, y: 0 };
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
431 |
var canDraw = false; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
432 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
433 |
this.paper.mousedown((e) => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
434 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
435 |
if (this.$refs.rect.width > 0 && this.$refs.rect.height > 0) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
436 |
|
|
331
74cdfdfa9f22
Remove duplicate code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
330
diff
changeset
|
437 |
startPosition = this.computeOffset(e); |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
438 |
canDraw = true; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
439 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
440 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
441 |
this.paper.mousemove((e) => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
442 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
443 |
if (!canDraw) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
444 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
445 |
var x, y; |
|
331
74cdfdfa9f22
Remove duplicate code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
330
diff
changeset
|
446 |
currentPosition = this.computeOffset(e); |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
447 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
448 |
/* bas -> droite */ |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
449 |
var width = Math.abs(currentPosition.x - startPosition.x); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
450 |
var height = Math.abs(startPosition.y - currentPosition.y); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
451 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
452 |
if (currentPosition.y > startPosition.y && currentPosition.x > startPosition.x) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
453 |
x = startPosition.x; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
454 |
y = startPosition.y; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
455 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
456 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
457 |
/* haut -> droite */ |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
458 |
if (currentPosition.y < startPosition.y && currentPosition.x > startPosition.x) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
459 |
x = currentPosition.x - width; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
460 |
y = currentPosition.y; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
461 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
462 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
463 |
/* haut -> gauche */ |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
464 |
if (currentPosition.y < startPosition.y && currentPosition.x < startPosition.x) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
465 |
x = currentPosition.x; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
466 |
y = currentPosition.y; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
467 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
468 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
469 |
/* bas -> gauche */ |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
470 |
if (currentPosition.y > startPosition.y && currentPosition.x < startPosition.x) {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
471 |
x = currentPosition.x |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
472 |
y = currentPosition.y - height; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
473 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
474 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
475 |
if(!x || !y) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
476 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
477 |
Object.assign(this.$refs.rect, {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
478 |
x: x, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
479 |
y: y, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
480 |
width: width, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
481 |
height: height, |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
482 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
483 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
484 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
485 |
this.paper.mouseup((e) => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
486 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
487 |
if (!canDraw) { return; }
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
488 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
489 |
canDraw = false; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
490 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
491 |
if (this.$refs.rect.width === 0 && this.$refs.rect.height === 0) {
|
|
331
74cdfdfa9f22
Remove duplicate code.
Alexandre Segura <mex.zktk@gmail.com>
parents:
330
diff
changeset
|
492 |
var currentPosition = this.computeOffset(e); |
|
345
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
493 |
var size = this.imgMinSize / 4; |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
494 |
Object.assign(this.$refs.rect, {
|
|
345
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
495 |
x: currentPosition.x - (size / 2), |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
496 |
y: currentPosition.y - (size / 2), |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
497 |
width: size, |
|
4bf0f6ff748d
Use getBoundingClientRect to calculate viewport (works cross browser).
Alexandre Segura <mex.zktk@gmail.com>
parents:
342
diff
changeset
|
498 |
height: size, |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
499 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
500 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
501 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
502 |
this.$nextTick(() => {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
503 |
this.$refs.rect.addResizeHandlers(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
504 |
this.$refs.rect.addTooltip(); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
505 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
506 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
507 |
}); |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
508 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
509 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
510 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
511 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
512 |
</script> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
513 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
514 |
<style scoped> |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
515 |
.zoom {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
516 |
position: relative; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
517 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
518 |
.zoomer {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
519 |
position: absolute; |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
520 |
bottom: 15px; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
521 |
right: 15px; |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
522 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
523 |
.cut-canvas {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
524 |
width: 100%; |
|
323
55c024fc7c60
Roughly implement annotation navigator.
Alexandre Segura <mex.zktk@gmail.com>
parents:
320
diff
changeset
|
525 |
height: 600px; |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
526 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
527 |
.canvas--rect:hover {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
528 |
cursor: crosshair; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
529 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
530 |
.canvas--free:hover {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
531 |
cursor: pointer; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
532 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
533 |
.mode-controls {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
534 |
position: absolute; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
535 |
top: 15px; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
536 |
left: 15px; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
537 |
} |
|
335
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
538 |
.zoom-thumbnail {
|
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
539 |
position: absolute; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
540 |
left: 15px; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
541 |
bottom: 15px; |
|
86dbf2cdeeeb
Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
334
diff
changeset
|
542 |
} |
|
320
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
543 |
.mode-controls .btn > svg {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
544 |
margin-top: 4px; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
545 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
546 |
.mode-controls .btn-primary > svg {
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
547 |
fill: #fff; |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
548 |
} |
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
549 |
|
|
81945eedc63f
Introduce refactored components using Vue.js.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff
changeset
|
550 |
</style> |