152 lines
4.6 KiB
JavaScript
152 lines
4.6 KiB
JavaScript
// 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 A thin wrapper around the DOM element returned from
|
|
* the different draw methods of the graphics implementation, and
|
|
* all interfaces that the various element types support.
|
|
* @author arv@google.com (Erik Arvidsson)
|
|
* @author yoah@google.com (Yoah Bar-David)
|
|
*/
|
|
|
|
|
|
goog.provide('goog.graphics.Element');
|
|
|
|
goog.require('goog.events');
|
|
goog.require('goog.events.EventTarget');
|
|
goog.require('goog.events.Listenable');
|
|
goog.require('goog.graphics.AffineTransform');
|
|
goog.require('goog.math');
|
|
|
|
|
|
|
|
/**
|
|
* Base class for a thin wrapper around the DOM element returned from
|
|
* the different draw methods of the graphics.
|
|
* You should not construct objects from this constructor. The graphics
|
|
* will return the object for you.
|
|
* @param {Element} element The DOM element to wrap.
|
|
* @param {goog.graphics.AbstractGraphics} graphics The graphics creating
|
|
* this element.
|
|
* @constructor
|
|
* @extends {goog.events.EventTarget}
|
|
* @deprecated goog.graphics is deprecated. It existed to abstract over browser
|
|
* differences before the canvas tag was widely supported. See
|
|
* http://en.wikipedia.org/wiki/Canvas_element for details.
|
|
*/
|
|
goog.graphics.Element = function(element, graphics) {
|
|
goog.events.EventTarget.call(this);
|
|
this.element_ = element;
|
|
this.graphics_ = graphics;
|
|
// Overloading EventTarget field to state that this is not a custom event.
|
|
// TODO(user) Should be handled in EventTarget.js (see bug 846824).
|
|
this[goog.events.Listenable.IMPLEMENTED_BY_PROP] = false;
|
|
};
|
|
goog.inherits(goog.graphics.Element, goog.events.EventTarget);
|
|
|
|
|
|
/**
|
|
* The graphics object that contains this element.
|
|
* @type {goog.graphics.AbstractGraphics?}
|
|
* @private
|
|
*/
|
|
goog.graphics.Element.prototype.graphics_ = null;
|
|
|
|
|
|
/**
|
|
* The native browser element this class wraps.
|
|
* @type {Element}
|
|
* @private
|
|
*/
|
|
goog.graphics.Element.prototype.element_ = null;
|
|
|
|
|
|
/**
|
|
* The transformation applied to this element.
|
|
* @type {goog.graphics.AffineTransform?}
|
|
* @private
|
|
*/
|
|
goog.graphics.Element.prototype.transform_ = null;
|
|
|
|
|
|
/**
|
|
* Returns the underlying object.
|
|
* @return {Element} The underlying element.
|
|
*/
|
|
goog.graphics.Element.prototype.getElement = function() {
|
|
return this.element_;
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the graphics.
|
|
* @return {goog.graphics.AbstractGraphics} The graphics that created the
|
|
* element.
|
|
*/
|
|
goog.graphics.Element.prototype.getGraphics = function() {
|
|
return this.graphics_;
|
|
};
|
|
|
|
|
|
/**
|
|
* Set the transformation of the element.
|
|
* @param {number} x The x coordinate of the translation transform.
|
|
* @param {number} y The y coordinate of the translation transform.
|
|
* @param {number} rotate The angle of the rotation transform.
|
|
* @param {number} centerX The horizontal center of the rotation transform.
|
|
* @param {number} centerY The vertical center of the rotation transform.
|
|
*/
|
|
goog.graphics.Element.prototype.setTransformation = function(x, y, rotate,
|
|
centerX, centerY) {
|
|
// TODO(robbyw): Add skew and scale.
|
|
|
|
this.transform_ = goog.graphics.AffineTransform.getRotateInstance(
|
|
goog.math.toRadians(rotate), centerX, centerY).translate(x, y);
|
|
this.getGraphics().setElementTransform(this, x, y, rotate, centerX, centerY);
|
|
};
|
|
|
|
|
|
/**
|
|
* @return {goog.graphics.AffineTransform} The transformation applied to
|
|
* this element.
|
|
*/
|
|
goog.graphics.Element.prototype.getTransform = function() {
|
|
return this.transform_ ? this.transform_.clone() :
|
|
new goog.graphics.AffineTransform();
|
|
};
|
|
|
|
|
|
/** @override */
|
|
goog.graphics.Element.prototype.addEventListener = function(
|
|
type, handler, opt_capture, opt_handlerScope) {
|
|
goog.events.listen(this.element_, type, handler, opt_capture,
|
|
opt_handlerScope);
|
|
};
|
|
|
|
|
|
/** @override */
|
|
goog.graphics.Element.prototype.removeEventListener = function(
|
|
type, handler, opt_capture, opt_handlerScope) {
|
|
goog.events.unlisten(this.element_, type, handler, opt_capture,
|
|
opt_handlerScope);
|
|
};
|
|
|
|
|
|
/** @override */
|
|
goog.graphics.Element.prototype.disposeInternal = function() {
|
|
goog.graphics.Element.superClass_.disposeInternal.call(this);
|
|
goog.events.removeAll(this.element_);
|
|
};
|