src_js/iconolab-bundle/src/components/editor/ZoomThumbnail.vue
author Alexandre Segura <mex.zktk@gmail.com>
Tue, 14 Mar 2017 14:10:16 +0100
changeset 428 722d8e9e2f6e
parent 355 004fdb42f063
child 502 89dc19ad8073
permissions -rw-r--r--
Limit zoom handler to bounds.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
335
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
<template>
355
004fdb42f063 Change design of controls.
Alexandre Segura <mex.zktk@gmail.com>
parents: 335
diff changeset
     2
    <div>
335
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
        <svg ref="svg" v-bind:width="thumbnailWidth" v-bind:height="thumbnailHeight">
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
            <image xmlns:xlink="http://www.w3.org/1999/xlink"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
                x="0" y="0"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
                v-bind:width="thumbnailWidth" v-bind:height="thumbnailHeight"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
                v-bind:xlink:href="image"></image>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
            <rect ref="handler"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
                class="move-handler"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
                v-bind:x="x" v-bind:y="y"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
                v-bind:width="width" v-bind:height="height"
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
                style="fill: black; opacity: 0.4"></rect>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
        </svg>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
    </div>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    15
</template>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
<script>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
    import Snap from 'snapsvg'
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
428
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    21
    // See http://svg.dabbles.info/snaptut-drag-limit
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    22
    Snap.plugin( function( Snap, Element, Paper, global ) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    23
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    24
        Element.prototype.limitDrag = function( params ) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    25
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    26
            var onMove = function(dx, dy) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    27
                limitMoveDrag.apply(this, arguments);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    28
                params.onMove.apply(this, arguments);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    29
            }
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    30
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    31
            this.data('minx', params.minx); this.data('miny', params.miny);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    32
            this.data('maxx', params.maxx); this.data('maxy', params.maxy);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    33
            this.data('x', params.x); this.data('y', params.y);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    34
            this.data('ibb', this.getBBox());
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    35
            this.data('ot', this.transform().local);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    36
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    37
            this.drag(onMove, limitStartDrag);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    38
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    39
            return this;
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    40
        };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    41
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    42
        function limitMoveDrag( dx, dy ) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    43
            var tdx, tdy;
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    44
            var sInvMatrix = this.transform().globalMatrix.invert();
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    45
            sInvMatrix.e = sInvMatrix.f = 0;
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    46
            tdx = sInvMatrix.x( dx,dy ); tdy = sInvMatrix.y( dx,dy );
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    47
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    48
            this.data('x', +this.data('ox') + tdx);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    49
            this.data('y', +this.data('oy') + tdy);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    50
            if (this.data('x') > this.data('maxx') - this.data('ibb').width) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    51
                this.data('x', this.data('maxx') - this.data('ibb').width)
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    52
            };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    53
            if (this.data('y') > this.data('maxy') - this.data('ibb').height) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    54
                this.data('y', this.data('maxy') - this.data('ibb').height)
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    55
            };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    56
            if (this.data('x') < this.data('minx')) { this.data('x', this.data('minx')) };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    57
            if (this.data('y') < this.data('miny')) { this.data('y', this.data('miny')) };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    58
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    59
            this.transform( this.data('ot') + "t" + [ this.data('x'), this.data('y') ]);
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    60
        };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    61
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    62
        function limitStartDrag( x, y, ev ) {
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    63
            this.data('ox', this.data('x')); this.data('oy', this.data('y'));
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    64
        };
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    65
    });
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
    66
335
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    67
    export default {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    68
        props: [
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    69
            'image',
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    70
            'viewport',
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    71
            'viewBox',
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    72
            'imageWidth',
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    73
            'imageHeight',
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    74
        ],
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    75
        data() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    76
            return {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    77
                thumbnailWidth: 0,
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    78
                thumbnailHeight: 0,
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    79
                loaded: false
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    80
            }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    81
        },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    82
        computed: {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    83
            x: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    84
                return this.viewBox[0] * this.getRatioX();
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    85
            },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    86
            y: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    87
                return this.viewBox[1] * this.getRatioY();
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    88
            },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    89
            width: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    90
                return this.viewBox[2] * this.getRatioX();
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    91
            },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    92
            height: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    93
                return this.viewBox[3] * this.getRatioY();
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    94
            }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    95
        },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    96
        methods: {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    97
            reset: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    98
                var handler = new Snap(this.$refs.handler);
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    99
                handler.node.removeAttribute('transform');
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   100
            },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   101
            getRatioX: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   102
                if (this.imageWidth === 0) { return 0; }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   103
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   104
                return this.thumbnailWidth / this.imageWidth;
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   105
            },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   106
            getRatioY: function() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   107
                if (this.imageHeight === 0) { return 0; }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   108
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   109
                return this.thumbnailHeight / this.imageHeight;
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   110
            }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   111
        },
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   112
        mounted() {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   113
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   114
            var svg = new Snap(this.$refs.svg);
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   115
            var handler = new Snap(this.$refs.handler);
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   116
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   117
            var img = new Image();
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   118
            img.onload = (e) => {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   119
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   120
                svg.attr({
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   121
                    viewBox: [0, 0, img.width, img.height]
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   122
                });
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   123
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   124
                Object.assign(this, {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   125
                    thumbnailWidth: img.width,
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   126
                    thumbnailHeight: img.height,
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   127
                    loaded: true
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   128
                });
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   129
428
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   130
                var self = this;
335
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   131
428
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   132
                handler.limitDrag({
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   133
                    x: 0, y: 0,
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   134
                    minx: -(img.width / 2), miny: -(img.height / 2),
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   135
                    maxx: (img.width / 2), maxy: (img.height / 2),
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   136
                    onMove: function() {
335
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   137
                        self.$emit('change', {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   138
                            x: this.getBBox().x * (self.imageWidth / self.thumbnailWidth),
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   139
                            y: this.getBBox().y * (self.imageHeight / self.thumbnailHeight),
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   140
                        });
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   141
                    }
428
722d8e9e2f6e Limit zoom handler to bounds.
Alexandre Segura <mex.zktk@gmail.com>
parents: 355
diff changeset
   142
                });
335
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   143
            }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   144
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   145
            img.src = this.image;
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   146
        }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   147
    }
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   148
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   149
</script>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   150
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   151
<style scoped>
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   152
.move-handler {
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   153
    cursor: -moz-grab;
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   154
    cursor: -webkit-grab;
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   155
    cursor: grab;
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   156
}
86dbf2cdeeeb Introduce ZoomThumbnail, improve zoom behavior.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
   157
</style>