mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-18 15:02:09 +00:00
129 lines
4.7 KiB
JavaScript
129 lines
4.7 KiB
JavaScript
/*
|
|
* Copyright 2003-2006, 2009, 2017, United States Government, as represented by the Administrator of the
|
|
* National Aeronautics and Space Administration. All rights reserved.
|
|
*
|
|
* The NASAWorldWind/WebWorldWind platform is 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.
|
|
*/
|
|
/**
|
|
* @exports ScreenCreditController
|
|
*/
|
|
import ArgumentError from '../error/ArgumentError';
|
|
import Color from '../util/Color';
|
|
import Font from '../util/Font';
|
|
import Layer from '../layer/Layer';
|
|
import Logger from '../util/Logger';
|
|
import Offset from '../util/Offset';
|
|
import ScreenText from '../shapes/ScreenText';
|
|
|
|
|
|
/**
|
|
* Constructs a screen credit controller.
|
|
* @alias ScreenCreditController
|
|
* @constructor
|
|
* @augments Layer
|
|
* @classdesc Collects and displays screen credits.
|
|
*/
|
|
function ScreenCreditController() {
|
|
Layer.call(this, "ScreenCreditController");
|
|
|
|
/**
|
|
* An {@link Offset} indicating where to place the attributions on the screen.
|
|
* @type {Offset}
|
|
* @default The lower left corner of the window with an 11px left margin and a 2px bottom margin.
|
|
*/
|
|
this.creditPlacement = new Offset(WorldWind.OFFSET_PIXELS, 11, WorldWind.OFFSET_PIXELS, 2);
|
|
|
|
/**
|
|
* The amount of horizontal spacing between adjacent attributions.
|
|
* @type {number}
|
|
* @default An 11px margin between attributions.
|
|
*/
|
|
this.creditMargin = 11;
|
|
|
|
// Apply 50% opacity to all shapes rendered by this layer.
|
|
this.opacity = 0.5;
|
|
|
|
// Internal. Intentionally not documented.
|
|
this.credits = [];
|
|
}
|
|
|
|
ScreenCreditController.prototype = Object.create(Layer.prototype);
|
|
|
|
/**
|
|
* Clears all credits from this controller.
|
|
*/
|
|
ScreenCreditController.prototype.clear = function () {
|
|
this.credits = [];
|
|
};
|
|
|
|
/**
|
|
* Adds a credit to this controller.
|
|
* @param {String} creditString The text to display in the credits area.
|
|
* @param {Color} color The color with which to draw the string.
|
|
* @param {String} hyperlinkUrl Optional argument if screen credit is intended to work as a hyperlink.
|
|
* @throws {ArgumentError} If either the specified string or color is null or undefined.
|
|
*/
|
|
ScreenCreditController.prototype.addCredit = function (creditString, color, hyperlinkUrl) {
|
|
if (!creditString) {
|
|
throw new ArgumentError(
|
|
Logger.logMessage(Logger.LEVEL_SEVERE, "ScreenCreditController", "addCredit", "missingText"));
|
|
}
|
|
|
|
if (!color) {
|
|
throw new ArgumentError(
|
|
Logger.logMessage(Logger.LEVEL_SEVERE, "ScreenCreditController", "addCredit", "missingColor"));
|
|
}
|
|
|
|
// Verify if text credit is not already in controller, if it is, don't add it.
|
|
for (var i = 0, len = this.credits.length; i < len; i++) {
|
|
if (this.credits[i].text === creditString) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
var credit = new ScreenText(new Offset(WorldWind.OFFSET_PIXELS, 0, WorldWind.OFFSET_PIXELS, 0), creditString);
|
|
credit.attributes.font = new Font(10);
|
|
credit.attributes.color = color;
|
|
credit.attributes.enableOutline = false;
|
|
credit.attributes.offset = new Offset(WorldWind.OFFSET_FRACTION, 0, WorldWind.OFFSET_FRACTION, 0);
|
|
|
|
// Append new user property to store URL for hyperlinking.
|
|
// (See BasicWorldWindowController.handleClickOrTap).
|
|
if (hyperlinkUrl) {
|
|
credit.userProperties.url = hyperlinkUrl;
|
|
}
|
|
|
|
this.credits.push(credit);
|
|
};
|
|
|
|
// Internal use only. Intentionally not documented.
|
|
ScreenCreditController.prototype.doRender = function (dc) {
|
|
var point = this.creditPlacement.offsetForSize(dc.viewport.width, dc.viewport.height);
|
|
|
|
for (var i = 0, len = this.credits.length; i < len; i++) {
|
|
// Place the credit text on screen and render it.
|
|
this.credits[i].screenOffset.x = point[0];
|
|
this.credits[i].screenOffset.y = point[1];
|
|
this.credits[i].render(dc);
|
|
|
|
// Advance the screen position for the next credit.
|
|
dc.textRenderer.typeFace = this.credits[i].attributes.font;
|
|
dc.textRenderer.outlineWidth = this.credits[i].attributes.outlineWidth;
|
|
dc.textRenderer.enableOutline = this.credits[i].attributes.enableOutline;
|
|
point[0] += dc.textRenderer.textSize(this.credits[i].text)[0];
|
|
point[0] += this.creditMargin;
|
|
}
|
|
};
|
|
|
|
export default ScreenCreditController;
|