| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| 'use strict'; |
| |
| /** |
| * @fileoverview RectView is used to visualize a rect. |
| */ |
| |
| base.exportTo('ui', function() { |
| // Area above the RectView used draw decorations. |
| var DECORATION_HEIGHT = 36; |
| |
| /** |
| * @constructor |
| */ |
| var RectView = ui.define('rect-view'); |
| |
| RectView.prototype = { |
| __proto__: HTMLUnknownElement.prototype, |
| |
| decorate: function() { |
| this.viewport_ = undefined; |
| this.rect_ = undefined; |
| }, |
| |
| set viewport(viewport) { |
| this.viewport_ = viewport; |
| this.updateContents_(); |
| }, |
| |
| set rect(rect) { |
| this.rect_ = rect; |
| this.updateContents_(); |
| }, |
| |
| updateContents_: function() { |
| if (this.viewport_ === undefined || this.rect_ === undefined) |
| return; |
| |
| var devicePixelsPerLayoutPixel = 1 / this.viewport_.devicePixelRatio; |
| |
| var topLeft = vec2.fromValues(this.rect_.x, this.rect_.y); |
| var botRight = vec2.fromValues( |
| topLeft[0] + this.rect_.width, |
| topLeft[1] + this.rect_.height); |
| vec2.transformMat2d(topLeft, topLeft, |
| this.viewport_.getWorldToDevicePixelsTransform()); |
| vec2.scale(topLeft, topLeft, devicePixelsPerLayoutPixel); |
| vec2.transformMat2d(botRight, botRight, |
| this.viewport_.getWorldToDevicePixelsTransform()); |
| vec2.scale(botRight, botRight, devicePixelsPerLayoutPixel); |
| this.style.width = botRight[0] - topLeft[0] + 'px'; |
| this.style.height = DECORATION_HEIGHT + botRight[1] - topLeft[1] + 'px'; |
| this.style.left = topLeft[0] + 'px'; |
| this.style.top = DECORATION_HEIGHT + topLeft[1] + 'px'; |
| this.style.backgroundSize = 'auto ' + DECORATION_HEIGHT + 'px'; |
| } |
| |
| }; |
| |
| return { |
| RectView: RectView |
| }; |
| }); |