// Copyright 2007 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /** * @fileoverview Graphics surface type. * @author robbyw@google.com (Robby Walker) */ goog.provide('goog.graphics.ext.Graphics'); goog.require('goog.events.EventType'); goog.require('goog.graphics.ext.Group'); /** * Wrapper for a graphics surface. * @param {string|number} width The width in pixels. Strings * expressing percentages of parent with (e.g. '80%') are also accepted. * @param {string|number} height The height in pixels. Strings * expressing percentages of parent with (e.g. '80%') are also accepted. * @param {?number=} opt_coordWidth The coordinate width - if * omitted or null, defaults to same as width. * @param {?number=} opt_coordHeight The coordinate height. - if * omitted or null, defaults to same as height. * @param {goog.dom.DomHelper=} opt_domHelper The DOM helper object for the * document we want to render in. * @param {boolean=} opt_isSimple Flag used to indicate the graphics object will * be drawn to in a single pass, and the fastest implementation for this * scenario should be favored. NOTE: Setting to true may result in * degradation of text support. * @constructor * @extends {goog.graphics.ext.Group} */ goog.graphics.ext.Graphics = function(width, height, opt_coordWidth, opt_coordHeight, opt_domHelper, opt_isSimple) { var surface = opt_isSimple ? goog.graphics.createSimpleGraphics(width, height, opt_coordWidth, opt_coordHeight, opt_domHelper) : goog.graphics.createGraphics(width, height, opt_coordWidth, opt_coordHeight, opt_domHelper); this.implementation_ = surface; goog.graphics.ext.Group.call(this, null, surface.getCanvasElement()); goog.events.listen(surface, goog.events.EventType.RESIZE, this.updateChildren, false, this); }; goog.inherits(goog.graphics.ext.Graphics, goog.graphics.ext.Group); /** * The root level graphics implementation. * @type {goog.graphics.AbstractGraphics} * @private */ goog.graphics.ext.Graphics.prototype.implementation_; /** * @return {goog.graphics.AbstractGraphics} The graphics implementation layer. */ goog.graphics.ext.Graphics.prototype.getImplementation = function() { return this.implementation_; }; /** * Changes the coordinate size. * @param {number} coordWidth The coordinate width. * @param {number} coordHeight The coordinate height. */ goog.graphics.ext.Graphics.prototype.setCoordSize = function(coordWidth, coordHeight) { this.implementation_.setCoordSize(coordWidth, coordHeight); goog.graphics.ext.Graphics.superClass_.setSize.call(this, coordWidth, coordHeight); }; /** * @return {goog.math.Size} The coordinate size. */ goog.graphics.ext.Graphics.prototype.getCoordSize = function() { return this.implementation_.getCoordSize(); }; /** * Changes the coordinate system position. * @param {number} left The coordinate system left bound. * @param {number} top The coordinate system top bound. */ goog.graphics.ext.Graphics.prototype.setCoordOrigin = function(left, top) { this.implementation_.setCoordOrigin(left, top); }; /** * @return {goog.math.Coordinate} The coordinate system position. */ goog.graphics.ext.Graphics.prototype.getCoordOrigin = function() { return this.implementation_.getCoordOrigin(); }; /** * Change the size of the canvas. * @param {number} pixelWidth The width in pixels. * @param {number} pixelHeight The height in pixels. */ goog.graphics.ext.Graphics.prototype.setPixelSize = function(pixelWidth, pixelHeight) { this.implementation_.setSize(pixelWidth, pixelHeight); var coordSize = this.getCoordSize(); goog.graphics.ext.Graphics.superClass_.setSize.call(this, coordSize.width, coordSize.height); }; /** * @return {goog.math.Size?} Returns the number of pixels spanned by the * surface, or null if the size could not be computed due to the size being * specified in percentage points and the component not being in the * document. */ goog.graphics.ext.Graphics.prototype.getPixelSize = function() { return this.implementation_.getPixelSize(); }; /** * @return {number} The coordinate width of the canvas. * @override */ goog.graphics.ext.Graphics.prototype.getWidth = function() { return this.implementation_.getCoordSize().width; }; /** * @return {number} The coordinate width of the canvas. * @override */ goog.graphics.ext.Graphics.prototype.getHeight = function() { return this.implementation_.getCoordSize().height; }; /** * @return {number} Returns the number of pixels per unit in the x direction. * @override */ goog.graphics.ext.Graphics.prototype.getPixelScaleX = function() { return this.implementation_.getPixelScaleX(); }; /** * @return {number} Returns the number of pixels per unit in the y direction. * @override */ goog.graphics.ext.Graphics.prototype.getPixelScaleY = function() { return this.implementation_.getPixelScaleY(); }; /** * @return {Element} The root element of the graphics surface. */ goog.graphics.ext.Graphics.prototype.getElement = function() { return this.implementation_.getElement(); }; /** * Renders the underlying graphics. * * @param {Element} parentElement Parent element to render the component into. */ goog.graphics.ext.Graphics.prototype.render = function(parentElement) { this.implementation_.render(parentElement); }; /** * Never transform a surface. * @override */ goog.graphics.ext.Graphics.prototype.transform = goog.nullFunction; /** * Called from the parent class, this method resets any pre-computed positions * and sizes. * @protected * @override */ goog.graphics.ext.Graphics.prototype.redraw = function() { this.transformChildren(); };