size=widthxheight
+ var parts = sizeParam.split("x");
+ if (parts && parts.length == 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {
+ var width = parseInt(parts[0], 10),
+ height = parseInt(parts[1], 10);
+
+ size = {
+ height : Math.min(height, Constants.MAX_HEIGHT),
+ width : Math.min(width, Constants.MAX_WIDTH)
+ };
+ } else {
+ size = {
+ height : Constants.DEFAULT.HEIGHT,
+ width : Constants.DEFAULT.WIDTH
+ };
+ }
+ return size;
+ },
+
+ readFramesheetIdFromURL_ : function () {
+ return this.readUrlParameter_("frameId");
+ },
+
+ readUrlParameter_ : function (paramName) {
+ var searchString = window.location.search.substring(1);
+ var params = searchString.split("&");
+ for (var i = 0; i < params.length; i++) {
+ var param = params[i].split("=");
+ if (param[0] == paramName) {
+ return window.unescape(param[1]);
+ }
+ }
+ return "";
+ },
+
+ loadFramesheetFromService : function (frameId) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', Constants.STATIC.URL.GET + '?l=' + frameId, true);
+ xhr.responseType = 'text';
+ xhr.onload = function (e) {
+ var res = JSON.parse(this.responseText);
+ pskl.utils.serialization.Deserializer.deserialize(res.framesheet, function (piskel) {
+ pskl.app.piskelController.setPiskel(piskel);
+ pskl.app.animationController.setFPS(res.fps);
+
+ $.publish(Events.HIDE_NOTIFICATION);
+ });
+ };
+
+ xhr.onerror = function () {
+ $.publish(Events.HIDE_NOTIFICATION);
+ };
+
+ xhr.send();
+ },
+
+ store : function (callbacks) {
+ this.storageService.store(callbacks);
+ },
+
+ getFirstFrameAsPng : function () {
+ var firstFrame = this.piskelController.getFrameAt(0);
+ var canvasRenderer = new pskl.rendering.CanvasRenderer(firstFrame, 1);
+ canvasRenderer.drawTransparentAs('rgba(0,0,0,0)');
+ var firstFrameCanvas = canvasRenderer.render();
+ return firstFrameCanvas.toDataURL("image/png");
+ },
+
+ getFramesheetAsPng : function () {
+ var renderer = new pskl.rendering.PiskelRenderer(this.piskelController);
+ var framesheetCanvas = renderer.renderAsCanvas();
+ return framesheetCanvas.toDataURL("image/png");
+ },
+
+ uploadAsSpritesheetPNG : function () {
+ var imageData = this.getFramesheetAsPng();
+ this.imageUploadService.upload(imageData, this.openWindow.bind(this));
+ },
+
+ openWindow : function (url) {
+ var options = [
+ "dialog=yes", "scrollbars=no", "status=no",
+ "width=" + this.piskelController.getWidth() * this.piskelController.getFrameCount(),
+ "height=" + this.piskelController.getHeight()
+ ].join(",");
+
+ window.open(url, "piskel-export", options);
+ }
+ };
+})();
diff --git a/build/piskel-style-packaged.css b/build/piskel-style-packaged.css
new file mode 100644
index 00000000..86c2cc44
--- /dev/null
+++ b/build/piskel-style-packaged.css
@@ -0,0 +1,2401 @@
+html, body {
+ height : 100%; width: 100%;
+ margin : 0;
+ overflow: hidden;
+ cursor : default;
+ font-family: arial;
+ font-size: 11px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+ul, li {
+ margin : 0;
+ padding : 0;
+ list-style-type: none;
+}
+
+
+/* Force apparition of scrollbars on leopard */
+::-webkit-scrollbar {
+ -webkit-appearance: none;
+ width: 6px;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 2px;
+ background-color: #666;
+}
+
+::-webkit-scrollbar-track {
+ background-color: rgba(50, 50, 50, 0.4);
+}
+body {
+ background: radial-gradient(circle, #000, #373737);
+ /* 16/06/2013 : -webkit still needed for
+ safari, safari mobile and android browser and chrome for android
+ cf http://caniuse.com/css-gradients */
+ background: -webkit-radial-gradient(circle, #000, #373737);
+}
+
+/* Browser fixes */
+::-ms-clear {
+ display: none;
+}
+
+.allow-user-select {
+ -webkit-touch-callout: initial;
+ -webkit-user-select: initial;
+ -khtml-user-select: initial;
+ -moz-user-select: initial;
+ -ms-user-select: initial;
+ user-select: initial;
+}
+
+/**
+ * Application layout
+ */
+
+.main-wrapper {
+ position: absolute;
+ top: 5px;
+ right: 0;
+ bottom: 5px;
+ left: 0;
+}
+
+.column-wrapper {
+ text-align: center;
+ font-size: 0;
+ position: absolute;
+ left: 100px; /* Reserve room for tools on the left edge of the screen. */
+ top: 0;
+ right: 50px; /* Reserve room for actions on the right edge of the screen. */
+ bottom: 0;
+}
+
+.column {
+ display: inline-block;
+}
+
+.left-column {
+ vertical-align: top;
+ height: 100%;
+ margin-right: 7px;
+}
+
+.main-column {
+ height: 100%;
+ position: relative;
+}
+
+.right-column {
+ vertical-align: top;
+ margin-left: 10px;
+ height: 100%;
+ position: relative;
+}
+
+.drawing-canvas-container {
+ font-size: 0;
+}
+
+.sticky-section {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ z-index: 1000;
+}
+
+.sticky-section .sticky-section-wrap {
+ display: table;
+ height: 100%;
+}
+
+.sticky-section .vertical-centerer {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.left-sticky-section.sticky-section {
+ left: 0;
+ max-width: 100px;
+}
+
+.left-sticky-section .tool-icon {
+ float: left;
+}
+
+/**
+ * Canvases layout
+ */
+
+.canvas {
+ position: relative;
+ z-index: 1;
+}
+
+.canvas-container {
+ position: relative;
+ display: block;
+}
+
+.canvas-container .canvas-background {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.light-picker-background,
+.light-canvas-background .canvas-background {
+ background: url(../img/canvas_background/light_canvas_background.png) repeat;
+}
+
+.medium-picker-background,
+.medium-canvas-background .canvas-background {
+ background: url(../img/canvas_background/medium_canvas_background.png) repeat;
+}
+
+.lowcont-medium-picker-background,
+.lowcont-medium-canvas-background .canvas-background {
+ background: url(../img/canvas_background/lowcont_medium_canvas_background.png) repeat;
+}
+
+.lowcont-dark-picker-background,
+.lowcont-dark-canvas-background .canvas-background {
+ background: url(../img/canvas_background/lowcont_dark_canvas_background.png) repeat;
+}
+
+.layers-canvas {
+ opacity: 0.2;
+}
+
+.canvas.canvas-overlay,
+.canvas.layers-canvas {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+/**
+ * Z-indexes should match the drawing area canvas superposition order :
+ * - 1 : draw layers below current layer
+ * - 2 : draw current layer
+ * - 3 : draw layers above current layer
+ * - 4 : draw the tools overlay
+ */
+.canvas.layers-below-canvas {z-index: 7;}
+.canvas.drawing-canvas {z-index: 8;}
+.canvas.layers-above-canvas {z-index: 9;}
+.canvas.canvas-overlay {z-index: 10;}
+
+/**
+ * Animated preview styles.
+ */
+
+.preview-container {
+ border : 0px Solid black;
+ border-radius:5px 0px 0px 5px;
+ box-shadow : 0px 0px 2px rgba(0,0,0,0.2);
+ font-size: 0;
+}
+
+.preview-container .canvas-container {
+ overflow : hidden;
+}
+
+.preview-container canvas {
+ border : 0px Solid transparent;
+}
+
+.display-fps {
+ float: left;
+ color: #aaa;
+ font-size: 12px;
+ min-width: 55px;
+ vertical-align: bottom;
+ line-height: 24px;
+}
+
+.range-fps {
+ overflow: hidden;
+ width: 120px;
+}
+
+/**
+ * User messages
+ */
+.user-message {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ background-color: #F9EDBE;
+ padding: 10px 47px;
+ border-top-left-radius: 7px;
+ color: #222;
+ border: #F0C36D 1px solid;
+ border-right: 0;
+ border-bottom: 0;
+ font-weight: bold;
+ font-size: 13px;
+ z-index: 30000;
+ max-width: 300px;
+}
+
+.user-message .close {
+ position: absolute;
+ top: 6px;
+ right: 17px;
+ color: gray;
+ font-weight: bold;
+ cursor: pointer;
+ font-size: 18px;
+}
+
+.user-message .close:hover {
+ color: black;
+}
+
+.image-link {
+ color : gold;
+}
+
+.pull-top,
+.pull-right,
+.pull-bottom,
+.pull-left {
+ position:absolute;
+}
+
+.pull-top {
+ top:0;
+}
+
+.pull-right {
+ right:0;
+}
+
+.pull-bottom {
+ bottom:0;
+}
+
+.pull-left {
+ left:0;
+}
+
+.cursor-coordinates {
+ color:#888;
+ font-size:12px;
+ font-weight:bold;
+ font-family:Courier;
+}
+.row {
+ display: block;
+}
+
+.textfield {
+ background : black;
+ border : 1px solid #888;
+ border-radius : 2px;
+ padding : 3px 10px;
+ color : white;
+
+ box-sizing:border-box;
+ -moz-box-sizing:border-box;
+}
+
+.textfield[disabled=disabled] {
+ background : #3a3a3a;
+}
+
+.textfield-small {
+ width : 50px;
+}
+
+.button {
+ height: 24px;
+ box-sizing: border-box;
+
+ background-color: #3f3f3f;
+ border: 1px solid #333;
+ border-top-color: #666;
+ border-bottom-color: #222;
+
+ cursor: pointer;
+ text-decoration: none;
+
+ color: white;
+ text-shadow: 0px -1px 0 black;
+ font-weight: bold;
+ font-size: 1rem;
+ text-align: center;
+
+ transition: background-color 0.2s linear;
+}
+
+.button:hover {
+ text-decoration: none;
+ background-color: #484848;
+ color: gold;
+}
+
+.button-primary {
+ background-color: rgb(255,215,0); /* gold */
+
+ border-color: rgb(179, 164, 0);
+ border-top-color: white;
+ border-bottom-color: rgb(151, 133, 0);
+
+ color: black;
+ text-shadow: 0px 1px 0 #fff;
+}
+
+.button-primary:hover {
+ background-color: rgb(255,235,20);
+ color: #333;
+}
+
+.button[disabled],
+.button[disabled]:hover {
+ cursor:default;
+ background-color: #aaa;
+ color: #777;
+ text-shadow: 0px 1px 0 #bbb;
+ border-color: #666;
+ border-top-color: #999;
+ border-bottom-color: #555;
+}
+
+/** Righty sticky drawer expanded state. */
+
+.right-sticky-section.sticky-section {
+ right: 0;
+ width: 47px;
+
+ -webkit-transition: all 200ms ease-out;
+ -moz-transition: all 200ms ease-out;
+ -ms-transition: all 200ms ease-out;
+ -o-transition: all 200ms ease-out;
+ transition: all 200ms ease-out;
+}
+
+.right-sticky-section.expanded {
+ right: 280px;
+}
+
+.right-sticky-section .tool-icon {
+ float: right;
+ margin-right: 0;
+}
+
+/********************************************************** *j* j** j*j j j j** *****************/
+/* Settings icons I I I I I\I \ */
+/********************************************************** *** *** *** * * '** *****************/
+
+.tool-icon.gallery-icon {
+ background-image: url(../img/gallery.png);
+ background-position: 3px 3px;
+ background-size: 39px 39px;
+}
+
+.tool-icon.resize-icon {
+ background-image: url(../img/resize-icon.png);
+ background-position: 10px 10px;
+ background-size: 26px 26px;
+}
+
+.tool-icon.save-icon {
+ background-image: url(../img/save.png);
+ background-position: 6px 6px;
+ background-size: 36px 36px;
+}
+
+.tool-icon.gear-icon {
+ background-image: url(../img/gear.png);
+ background-position: 6px 7px;
+ background-size: 32px 32px;
+}
+
+.tool-icon.upload-cloud-icon {
+ background-image: url(../img/cloud_export.png);
+ background-position: 4px 0px;
+ background-size: 36px 36px;
+ position: relative;
+}
+
+.tool-icon.local-storage-icon {
+ background-image: url(../img/local-storage-icon.png);
+ background-position: 10px 12px;
+ background-size: 30px;
+ position: relative;
+}
+
+.tool-icon.import-icon {
+ background-image: url(../img/import-icon.png);
+ background-position: 10px 5px;
+ background-size: 26px;
+ position: relative;
+}
+
+.upload-cloud-icon .label {
+ position: absolute;
+ left: 0;
+ bottom: 4px;
+ right: 0;
+ font-size: 11px;
+ text-transform: uppercase;
+ color: #fff;
+ text-align: center;
+}
+
+.drawer-content {
+ overflow: hidden;
+ background-color: #444;
+ height: 550px;
+ max-height: 100%;
+ width: 280px;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ box-shadow: 0 0 5px 0 black;
+}
+
+.right-sticky-section.expanded .tool-icon {
+ padding-right: 1px;
+}
+
+.right-sticky-section .tool-icon.has-expanded-drawer {
+ position: relative;
+ background-color: #444;
+ margin-right: 0;
+ padding-right: 2px;
+ border-left : 3px solid gold;
+}
+
+/************************************************************************************************/
+/* Common settings classes */
+/************************************************************************************************/
+
+.settings-section {
+ margin: 10px 20px;
+ font-size: 12px;
+ font-weight: bold;
+ color: #ccc;
+ text-shadow: 1px 1px #000;
+}
+
+.settings-section .button {
+ margin: 0;
+}
+
+.settings-title {
+ margin-top: 20px;
+ margin-bottom: 10px;
+ text-transform: uppercase;
+ border-bottom: 1px #aaa solid;
+ padding-bottom: 5px;
+}
+
+.settings-description {
+ margin : 0 0 10px 0;
+ display : inline-block;
+}
+
+.settings-form-section {
+ margin-bottom: 10px;
+}
+
+/************************************************************************************************/
+/* Application settings */
+/************************************************************************************************/
+
+.background-picker-wrapper {
+ overflow: hidden;
+ padding: 10px 5px 20px 5px;
+}
+
+.background-picker {
+ cursor: pointer;
+ float: left;
+ height: 35px;
+ width: 35px;
+ background-color: transparent;
+ margin-right: 15px;
+ padding: 1px;
+ position: relative;
+}
+
+.background-picker:after {
+ content: " ";
+ position: absolute;
+ top: -2px;
+ right: -2px;
+ bottom: -2px;
+ left: -2px;
+}
+
+.background-picker:hover:after {
+ border: #eee 1px solid;
+}
+
+.background-picker.selected:after {
+ border: gold 1px solid;
+}
+
+/************************************************************************************************/
+/* Gif/Png Export panel */
+/************************************************************************************************/
+
+.gif-upload-button,
+.gif-render-button {
+ margin-top : 10px;
+ margin-right : 10px;
+}
+
+.gif-export-radio-group {
+ margin:10px 0;
+}
+
+.gif-export-progress-status {
+ margin-left: 5px;
+}
+
+.gif-export-progress-bar {
+ margin-top:5px;
+ height:3px;
+ width: 0;
+ background:gold;
+}
+
+.gif-export-preview,
+.png-export-preview {
+ margin-top:20px;
+ max-width:240px;
+ position:relative;
+}
+
+.png-export-preview {
+ margin:10px 0;
+ overflow: hidden;
+}
+
+.png-export-preview img {
+ float: left;
+}
+
+.png-upload-status {
+ margin : 10px 0;
+}
+
+.preview-upload-ongoing:before{
+ content: "Upload ongoing ...";
+ position: absolute;
+ display: block;
+ height: 100%;
+ width: 100%;
+ text-align: center;
+ padding-top: 45%;
+ box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ background: rgba(0,0,0,0.5);
+ color: white;
+}
+
+/************************************************************************************************/
+/* Import panel */
+/************************************************************************************************/
+
+.import-section,
+.resize-section {
+ margin: 15px 0;
+}
+
+.import-section-title {
+ display : inline-block;
+}
+
+.import-section-title-small {
+ width: 35px;
+}
+
+.import-section-disabled {
+ color : #888;
+}
+
+.import-section-preview {
+ display : inline-block;
+ height : 60px;
+ width: 60px;
+ border : 1px dashed #999;
+ border-radius: 3px;
+}
+
+.import-size-field,
+.resize-size-field {
+ width: 50px;
+ margin-right: 8px;
+ text-align: right;
+}
+
+.import-size-field:nth-of-type(2),
+.resize-size-field:nth-of-type(2) {
+ margin-left: 5px;
+}
+
+.file-input-button {
+ margin-right: 8px;
+ border-radius: 2px;
+}
+
+.file-input-status {
+ display: inline-block;
+ width: 130px;
+ overflow: hidden;
+
+ height: 1.5rem;
+ word-break : break-all;
+ vertical-align: middle;
+ font-style: italic;
+ font-weight: normal;
+ text-shadow: none;
+}
+
+.save-field {
+ width: 100%;
+}
+
+#save-status {
+ margin-top: 10px;
+}
+.status {
+ height: 1.5rem;
+ vertical-align: middle;
+ font-weight: normal;
+ text-shadow: none;
+}
+
+[name=smooth-resize-checkbox] {
+ margin : 0 8px;
+}
+
+[name*=checkbox] {
+ vertical-align: middle;
+}
+
+
+/************************************************************************************************/
+/* Browse local piskels panel */
+/************************************************************************************************/
+
+.local-piskels-list {
+ width: 100%;
+}
+
+.local-piskel-item {
+ height: 3em;
+}
+
+.local-piskel-name {
+ width: 40%;
+}
+
+.local-piskel-save-date {
+ font-weight : normal;
+}
+
+.local-piskels-list a {
+ text-decoration: none;
+}
+.local-piskels-list a:hover {
+ text-decoration: underline;
+}
+.local-piskel-load-link {
+ color : gold;
+}
+.local-piskel-delete-link {
+ color : red;
+}
+
+.tools-wrapper,
+.options-wrapper,
+.palette-wrapper {
+ float: left;
+}
+
+.tool-icon {
+ cursor : pointer;
+ width: 46px;
+ height: 46px;
+ margin: 1px;
+ background-color: #3a3a3a;
+ background-repeat: no-repeat;
+ background-position: 12px 12px;
+ background-size: 24px 24px;
+}
+
+.tool-icon.selected {
+ cursor: default;
+ background-color: #444;
+ border: 3px solid gold;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ background-position: 9px 9px;
+}
+
+.tool-icon:hover {
+ background-color: #444;
+}
+
+/*
+ * Tool icons:
+ */
+.tool-icon.tool-pen {
+ background-image: url(../img/tools/pen.png);
+}
+
+.tool-icon.tool-vertical-mirror-pen {
+ background-image: url(../img/tools/mirror.png);
+ background-position: 0px 10px;
+ background-size: 38px 27px;
+}
+
+.tool-icon.tool-vertical-mirror-pen.selected {
+ background-position: -3px 7px;
+}
+
+.tool-icon.tool-paint-bucket {
+ background-image: url(../img/tools/paintbucket.png);
+}
+
+.tool-icon.tool-eraser {
+ background-image: url(../img/tools/eraser.png);
+}
+
+.tool-icon.tool-stroke {
+ background-image: url(../img/tools/stroke.png);
+}
+
+.tool-icon.tool-rectangle {
+ background-image: url(../img/tools/rectangle.png);
+ background-position: 12px 14px;
+ background-size: 24px 20px;
+}
+
+.tool-icon.tool-circle {
+ background-image: url(../img/tools/circle.png);
+}
+
+.tool-icon.tool-move {
+ background-image: url(../img/tools/hand.png);
+ background-size: 24px 24px;
+}
+
+.tool-icon.tool-rectangle-select {
+ background-image: url(../img/tools/rectangle_selection.png);
+ background-position: 12px 14px;
+ background-size: 24px 20px;
+}
+
+.tool-icon.tool-rectangle.selected,
+.tool-icon.tool-rectangle-select.selected {
+ background-position: 9px 11px;
+}
+
+.tool-icon.tool-shape-select {
+ background-image: url(../img/tools/magicwand.png);
+}
+
+.tool-icon.tool-colorpicker {
+ background-image: url(../img/tools/eyedropper.png);
+ background-size: 23px 23px;
+}
+
+/*
+ * Tool cursors:
+ */
+
+.tool-paint-bucket .drawing-canvas-container:hover {
+ cursor: url(../img/icons/paint-bucket.png) 12 12, pointer;
+}
+
+.tool-vertical-mirror-pen .drawing-canvas-container:hover {
+ cursor: url(../img/icons/vertical-mirror-pen.png) 5 15, pointer;
+}
+
+.tool-pen .drawing-canvas-container:hover {
+ cursor: url(../img/icons/pen.png) 0 15, pointer;
+}
+
+.tool-eraser .drawing-canvas-container:hover {
+ cursor: url(../img/icons/eraser.png) 0 15, pointer;
+}
+
+.tool-stroke .drawing-canvas-container:hover {
+ cursor: url(../img/icons/pen.png) 0 15, pointer;
+}
+
+.tool-rectangle .drawing-canvas-container:hover {
+ cursor: url(../img/icons/rectangle.png) 0 15, pointer;
+}
+
+.tool-circle .drawing-canvas-container:hover {
+ cursor: url(../img/icons/circle.png) 2 15, pointer;
+}
+
+.tool-move .drawing-canvas-container:hover {
+ cursor: url(../img/icons/hand.png) 15 15, pointer;
+}
+
+.tool-rectangle-select .drawing-canvas-container:hover {
+ cursor: url(../img/icons/select.png) 15 15, pointer;
+}
+
+.tool-shape-select .drawing-canvas-container:hover {
+ cursor: url(../img/icons/wand.png) 15 15, pointer;
+}
+
+.tool-colorpicker .drawing-canvas-container:hover {
+ cursor: url(../img/icons/dropper.png) 0 15, pointer;
+}
+
+.swap-colors-icon {
+ background-image: url(../img/tools/swap-arrow-square-small-grey.png);
+ position: relative;
+ top: 50px;
+ left: 6px;
+ height: 18px;
+ width: 18px;
+ background-size: 18px;
+ opacity : 0.3;
+ cursor : pointer;
+}
+
+.swap-colors-icon:hover {
+ opacity : 1;
+}
+
+.tool-color-picker {
+ position:relative;
+}
+
+.tool-color-picker:nth-child(1) {
+ z-index : 100;
+}
+
+.tool-color-picker:nth-child(2) {
+ z-index : 90;
+ margin-top: 25px;
+ margin-left:-20px;
+}
+
+.tool-color-picker input {
+ width: 16px;
+ height: 16px;
+ text-indent: -10000px;
+ border: 1px solid black;
+ background: white;
+ cursor: pointer;
+ position : relative;
+ top: 10px;
+ margin-left: 2px;
+}
+
+.tool-color-picker .secondary-color-picker {
+ top : 18px;
+ margin-left: 0;
+}
+
+.palette-wrapper {
+ margin-top: 10px;
+ margin-left: 10px;
+}
+
+.palette-color[data-color=TRANSPARENT] {
+ position: relative;
+ top: 10px;
+ left: 10px;
+ background-color: white;
+ height : 16px;
+ width : 16px;
+ border: 2px solid #000;
+ background-size: 16px 16px;
+ background-position: 0 0;
+ background-image: -webkit-gradient(
+ linear,
+ left top,
+ right bottom,
+ color-stop(0, #fff),
+ color-stop(0.45, #fff),
+ color-stop(0.5, #ff0000),
+ color-stop(0.55, #fff),
+ color-stop(1, #fff)
+ );
+ background-image: -moz-linear-gradient(
+ left top,
+ #fff 0%,
+ #fff 45%,
+ #f00 50%,
+ #fff 55%,
+ #fff 100%
+ );
+}
+
+
+
+.action-icon {
+ cursor: pointer;
+ height: 100%;
+ background-repeat: no-repeat;
+ background-position: 50%;
+}
+
+.action-icon.edit-icon {
+ background-image: url('../img/tools/pen.png');
+}
+.cheatsheet-link {
+ position: fixed;
+ bottom: 10px;
+ left: 10px;
+
+ padding: 1px 0 0 45px;
+ color : gold;
+ font-weight: bold;
+ font-size : 1.25em;
+ line-height: 20px;
+
+ cursor : pointer;
+
+ background-image:url('../img/keyboard.png');
+ background-size:35px 20px;
+ background-repeat:no-repeat;
+ opacity: 0.5;
+ z-index: 11000;
+ transition : opacity 0.3s;
+}
+
+.cheatsheet-link:hover {
+ opacity: 1;
+}
+
+#cheatsheet-wrapper {
+ position: absolute;
+ z-index: 10000;
+
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+
+ padding: 50px;
+
+ box-sizing: border-box;
+ -moz-box-sizing : border-box;
+
+ color: white;
+}
+
+.cheatsheet-container {
+ width: 100%;
+ height: 100%;
+
+ box-sizing: border-box;
+ -moz-box-sizing : border-box;
+
+ padding: 20px 3%;
+ border-radius: 3px;
+ background: rgba(0,0,0,0.9);
+ overflow: auto;
+}
+
+.cheatsheet-container h3 {
+ font-size:24px;
+ margin-top: 0;
+}
+
+.cheatsheet-section {
+ float: left;
+ width : 33%;
+}
+
+.cheatsheet-shortcut {
+ overflow: hidden;
+ margin: 10px 0;
+}
+
+.cheatsheet-icon.tool-icon {
+ float: left;
+ display: inline-block;
+
+ height: 30px;
+ width: 30px;
+ margin: 0 20px 0 0;
+
+ background-size: 20px 20px;
+ background-position: 5px 5px;
+}
+
+.cheatsheet-description {
+ font-family:Courier;
+ color: white;
+ font-size : 13px;
+ margin-left: 20px;
+ line-height : 30px;
+}
+
+.cheatsheet-key {
+ display : inline-block;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 10px;
+
+ border : 1px solid gold;
+ border-radius: 2px;
+
+ box-sizing: border-box;
+ -moz-box-sizing : border-box;
+
+ text-align: center;
+ font-family:Courier;
+ font-weight: bold;
+ font-size : 18px;
+ color: gold;
+}
+#dialog-container-wrapper {
+ position: absolute;
+ z-index: 20000;
+
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+
+ padding: 50px 150px;
+ overflow: hidden;
+
+ box-sizing: border-box;
+ -moz-box-sizing : border-box;
+
+ background-color: rgba(0,0,0,0.8);
+ opacity: 0;
+ pointer-events: none;
+
+ transition: opacity 0.5s;
+
+
+ color: white;
+}
+
+#dialog-container-wrapper.show {
+ opacity: 1;
+ pointer-events: auto;
+ transition: opacity 0.5s;
+}
+
+#dialog-container {
+ width: 100%;
+ height: 100%;
+
+ margin-top: -1500px;
+ transition:margin-top 0.5s;
+
+ box-sizing: border-box;
+ -moz-box-sizing : border-box;
+
+ border-radius: 3px;
+ background: rgba(0,0,0,1);
+ overflow: auto;
+}
+
+.show #dialog-container {
+ margin-top: 0;
+}
+
+
+.palette-manager-wrapper {
+ height: 100%;
+ position: relative;
+}
+
+.palette-manager-body {
+ position: absolute;
+ top: 45px;
+ bottom: 0;
+ right: 0;
+ left: 0;
+}
+
+.palette-manager-head {
+ position: absolute;
+ width: 100%;
+ background: gold;
+ margin: 0;
+ padding: 10px;
+ color: black;
+ font-size: 1.8em;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+}
+
+.palette-manager-close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ line-height: 45px;
+ margin-right: 10px;
+ font-size: 1.3em;
+ cursor: pointer;
+}
+
+.palette-manager-drawer {
+ width: 200px;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+}
+
+.palette-manager-list {
+ position: absolute;
+ top:40px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: auto;
+}
+
+.palette-manager-actions {
+ position: absolute;
+ height:40px;
+ line-height:40px;
+ width: 100%;
+ text-align: center;
+}
+
+.palette-manager-actions-button {
+ width: 80px;
+ margin: 5px;
+}
+
+.palette-manager-palette-button,
+.palette-manager-actions-button {
+ line-height: 20px;
+}
+
+.palette-manager-list li {
+ height: 48px;
+ line-height: 48px;
+ padding-left:10px;
+
+ font-size: 1.4em;
+
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+
+ border-bottom: 1px solid #666;
+ cursor:pointer;
+}
+
+.palette-manager-list li:hover {
+ background : #222;
+}
+
+.palette-manager-list li.selected {
+ color : gold;
+ font-weight: bold;
+}
+
+.palette-manager-list li:nth-child(1) {
+ border-top: 1px solid #666;
+}
+
+.palette-manager-details {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 200px;
+
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+
+ border-left:1px solid #666;
+}
+
+.palette-manager-details-head {
+ position: absolute;
+ height:40px;
+ line-height:40px;
+ width: 100%;
+
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+}
+
+.palette-manager-details-head-name {
+ padding: 0 10px 0 20px;
+ font-size: 1.5em;
+ font-weight: bold;
+}
+
+.palette-manager-details-head .edit-icon {
+ width: 24px;
+ display: inline-block;
+ background-size: 16px;
+}
+
+.palette-manager-details-head-actions {
+ float: right;
+ line-height: 40px;
+ padding-right: 10px;
+}
+
+.palette-manager-details-body {
+ position: absolute;
+ top:40px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: auto;
+
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+}
+
+
+
+.palette-manager-color-card {
+ width: 120px;
+ height: 180px;
+ display: inline-block;
+ position: relative;
+ margin: 20px 0 20px 20px;
+ box-shadow: 0 0 0px 0px gold;
+ transition: box-shadow 0.3s;
+}
+
+.palette-manager-color-card:hover {
+ box-shadow: 0 0 4px 1px gold;
+}
+
+.palette-manager-delete-card {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 20px;
+
+ text-align: center;
+ font-size: 1.6em;
+ font-weight: bold;
+ color: rgb(255,255,255);
+ text-shadow : 0 0 2px rgb(0,0,0);
+ cursor: pointer;
+
+ opacity : 0.2;
+ transition : opacity 0.3s, color 0.1s;
+}
+
+.palette-manager-color-card:hover .palette-manager-delete-card {
+ opacity : 0.6;
+}
+
+.palette-manager-color-card .palette-manager-delete-card:hover {
+ opacity : 1;
+ color: rgb(240,80,80);
+}
+
+.palette-manager-new-color .palette-manager-color-square {
+ border: 3px dotted #888;
+ border-bottom-width: 0;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ border-radius: 3px 3px 0 0;
+ cursor: pointer;
+ text-align: center;
+ font-size: 24px;
+ color: #888;
+ line-height: 120px;
+}
+
+.palette-manager-color-square {
+ width: 120px;
+ height: 120px;
+ cursor: pointer;
+ /*background-image:url(../img/tools/eyedropper.png);*/
+}
+
+.palette-manager-color-details {
+ color : #666;
+ background: #eee;
+ height: 60px;
+ padding-left: 5px;
+}
+
+.palette-manager-color-details li{
+ line-height: 20px;
+ font-weight: bold;
+}
+.toolbox-container {
+ border: 4px solid #888;
+ font-size: medium;
+ color: white;
+ text-align: left;
+ border-radius: 4px;
+ margin-top: 10px;
+}
+
+.toolbox-title {
+ padding: 8px;
+ margin: 0;
+ font-size: 15px;
+ background: #222;
+}
+
+.toolbox-button-container {
+ overflow : hidden;
+}
+
+.toolbox-button {
+ margin: 0;
+ width: 25%;
+ float : left;
+}
+
+/* @override */
+.button.toolbox-button {
+ border-left-width: 0;
+}
+
+.toolbox-button:last-child {
+ border-right-width: 0;
+}
+
+/**
+ * Layers container
+ */
+.layers-list-container {
+}
+
+.layers-title {
+ background-image: url('../img/layers.svg');
+ background-size: 22px;
+ background-repeat: no-repeat;
+ background-position: 97%;
+}
+
+.layers-list {
+ font-size : 12px;
+}
+
+.layer-item {
+ height:24px;
+ line-height: 24px;
+ padding : 0 0 0 10px;
+ border-top: 1px solid #444;
+ cursor : pointer;
+}
+
+.layer-item .edit-icon {
+ float: right;
+ width: 30px;
+ background-size: 12px;
+ opacity: 0;
+ transition : opacity 0.2s;
+}
+
+.layer-item:hover .edit-icon {
+ opacity : 0.6;
+}
+
+.layer-item:hover .edit-icon:hover {
+ opacity : 1;
+}
+
+.layer-item:hover {
+ background : #222;
+}
+
+.current-layer-item,
+.current-layer-item:hover {
+ background : #333;
+ color: gold;
+}
+
+.layers-button-arrow {
+ font-family : 'Lucida Grande', Calibri;
+ padding : 2px 6px 0 6px;
+}
+.palettes-list-container {
+}
+
+.palettes-list-select {
+ float:right;
+ max-width:90px;
+ margin-top: 3px;
+}
+
+.palettes-title {
+ background-size: 22px;
+ background-repeat: no-repeat;
+ background-position: 97%;
+}
+
+.palettes-list-colors {
+ overflow:hidden;
+}
+
+.palettes-list-color {
+ cursor : pointer;
+ float: left;
+ margin : 0 0 5px 5px;
+ width : 32px;
+ height : 32px;
+ position: relative;
+}
+
+.palettes-list-color:nth-child(-n+5) {
+ margin-top: 5px;
+}
+
+.palettes-list-color div{
+ width : 32px;
+ height : 32px;
+}
+
+.palettes-list-color.primary:before,
+.palettes-list-color.secondary:before {
+ content: "";
+ position: absolute;
+ bottom: 1px;
+ display: inline-block;
+ border: 7px solid gold;
+ border-top-color: transparent;
+
+ width: 0px;
+ height: 0px;
+}
+
+.palettes-list-color.primary:before {
+ left: 1px;
+ border-right-color: transparent;
+}
+
+
+.palettes-list-color.secondary:before {
+ right: 1px;
+ border-left-color: transparent;
+}
+/***
+Spectrum Colorpicker v1.1.2
+https://github.com/bgrins/spectrum
+Author: Brian Grinstead
+License: MIT
+***/
+
+.sp-container {
+ position:absolute;
+ top:0;
+ left:0;
+ display:inline-block;
+ *display: inline;
+ *zoom: 1;
+ /* https://github.com/bgrins/spectrum/issues/40 */
+ z-index: 9999994;
+ overflow: hidden;
+}
+.sp-container.sp-flat {
+ position: relative;
+}
+
+/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */
+.sp-top {
+ position:relative;
+ width: 100%;
+ display:inline-block;
+}
+.sp-top-inner {
+ position:absolute;
+ top:0;
+ left:0;
+ bottom:0;
+ right:0;
+}
+.sp-color {
+ position: absolute;
+ top:0;
+ left:0;
+ bottom:0;
+ right:20%;
+}
+.sp-hue {
+ position: absolute;
+ top:0;
+ right:0;
+ bottom:0;
+ left:84%;
+ height: 100%;
+}
+.sp-fill {
+ padding-top: 80%;
+}
+.sp-sat, .sp-val {
+ position: absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+}
+
+.sp-alpha-enabled .sp-top {
+ margin-bottom: 18px;
+}
+.sp-alpha-enabled .sp-alpha {
+ display: block;
+}
+.sp-alpha-handle {
+ position:absolute;
+ top:-4px;
+ bottom: -4px;
+ width: 6px;
+ left: 50%;
+ cursor: pointer;
+ border: 1px solid black;
+ background: white;
+ opacity: .8;
+}
+.sp-alpha {
+ display: none;
+ position: absolute;
+ bottom: -14px;
+ right: 0;
+ left: 0;
+ height: 8px;
+}
+.sp-alpha-inner {
+ border: solid 1px #333;
+}
+
+/* Don't allow text selection */
+.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button {
+ -webkit-user-select:none;
+ -moz-user-select: -moz-none;
+ -o-user-select:none;
+ user-select: none;
+}
+
+.sp-container.sp-input-disabled .sp-input-container {
+ display: none;
+}
+.sp-container.sp-buttons-disabled .sp-button-container {
+ display: none;
+}
+.sp-palette-only .sp-picker-container {
+ display: none;
+}
+.sp-palette-disabled .sp-palette-container {
+ display: none;
+}
+
+.sp-initial-disabled .sp-initial {
+ display: none;
+}
+
+
+/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */
+.sp-sat {
+ background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));
+ background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));
+ background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
+ background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
+ background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
+ background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";
+ filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');
+}
+.sp-val {
+ background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));
+ background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));
+ background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
+ background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
+ background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
+ background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";
+ filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');
+}
+
+.sp-hue {
+ background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
+ background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
+ background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
+ background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));
+ background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
+}
+
+/* IE filters do not support multiple color stops.
+ Generate 6 divs, line them up, and do two color gradients for each.
+ Yes, really.
+ */
+.sp-1 {
+ height:17%;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');
+}
+.sp-2 {
+ height:16%;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');
+}
+.sp-3 {
+ height:17%;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');
+}
+.sp-4 {
+ height:17%;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');
+}
+.sp-5 {
+ height:16%;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');
+}
+.sp-6 {
+ height:17%;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');
+}
+
+.sp-hidden {
+ display: none !important;
+}
+
+/* Clearfix hack */
+.sp-cf:before, .sp-cf:after { content: ""; display: table; }
+.sp-cf:after { clear: both; }
+.sp-cf { *zoom: 1; }
+
+/* Mobile devices, make hue slider bigger so it is easier to slide */
+@media (max-device-width: 480px) {
+ .sp-color { right: 40%; }
+ .sp-hue { left: 63%; }
+ .sp-fill { padding-top: 60%; }
+}
+.sp-dragger {
+ border-radius: 5px;
+ height: 5px;
+ width: 5px;
+ border: 1px solid #fff;
+ background: #000;
+ cursor: pointer;
+ position:absolute;
+ top:0;
+ left: 0;
+}
+.sp-slider {
+ position: absolute;
+ top:0;
+ cursor:pointer;
+ height: 3px;
+ left: -1px;
+ right: -1px;
+ border: 1px solid #000;
+ background: white;
+ opacity: .8;
+}
+
+/*
+Theme authors:
+Here are the basic themeable display options (colors, fonts, global widths).
+See http://bgrins.github.io/spectrum/themes/ for instructions.
+*/
+
+.sp-container {
+ border-radius: 0;
+ background-color: #ECECEC;
+ border: solid 1px #f0c49B;
+ padding: 0;
+}
+.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue
+{
+ font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.sp-top
+{
+ margin-bottom: 3px;
+}
+.sp-color, .sp-hue
+{
+ border: solid 1px #666;
+}
+
+/* Input */
+.sp-input-container {
+ float:right;
+ width: 100px;
+ margin-bottom: 4px;
+}
+.sp-initial-disabled .sp-input-container {
+ width: 100%;
+}
+.sp-input {
+ font-size: 12px !important;
+ border: 1px inset;
+ padding: 4px 5px;
+ margin: 0;
+ width: 100%;
+ background:transparent;
+ border-radius: 3px;
+ color: #222;
+}
+.sp-input:focus {
+ border: 1px solid orange;
+}
+.sp-input.sp-validation-error
+{
+ border: 1px solid red;
+ background: #fdd;
+}
+.sp-picker-container , .sp-palette-container
+{
+ float:left;
+ position: relative;
+ padding: 10px;
+ padding-bottom: 300px;
+ margin-bottom: -290px;
+}
+.sp-picker-container
+{
+ width: 172px;
+ border-left: solid 1px #fff;
+}
+
+/* Palettes */
+.sp-palette-container
+{
+ border-right: solid 1px #ccc;
+}
+
+.sp-palette .sp-thumb-el {
+ display: block;
+ position:relative;
+ float:left;
+ width: 24px;
+ height: 15px;
+ margin: 3px;
+ cursor: pointer;
+ border:solid 2px transparent;
+}
+.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active {
+ border-color: orange;
+}
+.sp-thumb-el
+{
+ position:relative;
+}
+
+/* Initial */
+.sp-initial
+{
+ float: left;
+ border: solid 1px #333;
+}
+.sp-initial span {
+ width: 30px;
+ height: 25px;
+ border:none;
+ display:block;
+ float:left;
+ margin:0;
+}
+
+/* Buttons */
+.sp-button-container {
+ float: right;
+}
+
+/* Replacer (the little preview div that shows up instead of the ) */
+.sp-replacer {
+ margin:0;
+ overflow:hidden;
+ cursor:pointer;
+ padding: 4px;
+ display:inline-block;
+ *zoom: 1;
+ *display: inline;
+ border: solid 1px #91765d;
+ background: #eee;
+ color: #333;
+ vertical-align: middle;
+}
+.sp-replacer:hover, .sp-replacer.sp-active {
+ border-color: #F0C49B;
+ color: #111;
+}
+.sp-replacer.sp-disabled {
+ cursor:default;
+ border-color: silver;
+ color: silver;
+}
+.sp-dd {
+ padding: 2px 0;
+ height: 16px;
+ line-height: 16px;
+ float:left;
+ font-size:10px;
+}
+.sp-preview
+{
+ position:relative;
+ width:25px;
+ height: 20px;
+ border: solid 1px #222;
+ margin-right: 5px;
+ float:left;
+ z-index: 0;
+}
+
+.sp-palette
+{
+ *width: 220px;
+ max-width: 220px;
+}
+.sp-palette .sp-thumb-el
+{
+ width:16px;
+ height: 16px;
+ margin:2px 1px;
+ border: solid 1px #d0d0d0;
+}
+
+.sp-container
+{
+ padding-bottom:0;
+}
+
+
+/* Buttons: http://hellohappy.org/css3-buttons/ */
+.sp-container button {
+ background-color: #eeeeee;
+ background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);
+ background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);
+ background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);
+ background-image: -o-linear-gradient(top, #eeeeee, #cccccc);
+ background-image: linear-gradient(to bottom, #eeeeee, #cccccc);
+ border: 1px solid #ccc;
+ border-bottom: 1px solid #bbb;
+ border-radius: 3px;
+ color: #333;
+ font-size: 14px;
+ line-height: 1;
+ padding: 5px 4px;
+ text-align: center;
+ text-shadow: 0 1px 0 #eee;
+ vertical-align: middle;
+}
+.sp-container button:hover {
+ background-color: #dddddd;
+ background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);
+ background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);
+ background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);
+ background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);
+ background-image: linear-gradient(to bottom, #dddddd, #bbbbbb);
+ border: 1px solid #bbb;
+ border-bottom: 1px solid #999;
+ cursor: pointer;
+ text-shadow: 0 1px 0 #ddd;
+}
+.sp-container button:active {
+ border: 1px solid #aaa;
+ border-bottom: 1px solid #888;
+ -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
+ -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
+ -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
+ -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
+ box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
+}
+.sp-cancel
+{
+ font-size: 11px;
+ color: #d93f3f !important;
+ margin:0;
+ padding:2px;
+ margin-right: 5px;
+ vertical-align: middle;
+ text-decoration:none;
+
+}
+.sp-cancel:hover
+{
+ color: #d93f3f !important;
+ text-decoration: underline;
+}
+
+
+.sp-palette span:hover, .sp-palette span.sp-thumb-active
+{
+ border-color: #000;
+}
+
+.sp-preview, .sp-alpha, .sp-thumb-el
+{
+ position:relative;
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+}
+.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner
+{
+ display:block;
+ position:absolute;
+ top:0;left:0;bottom:0;right:0;
+}
+
+.sp-palette .sp-thumb-inner
+{
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+}
+
+.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner
+{
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);
+}
+
+.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner
+{
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);
+}
+
+/**
+ * Piskel specific CSS for spectrum widgets
+ */
+
+/* Widget's main container */
+.sp-container {
+ border-radius: 4px;
+ background-color: #2B2B2B;
+ border: solid 4px #888;
+ padding: 5px 5px 0 5px;
+ box-shadow : 0 0 5px 0 black;
+}
+
+.sp-container[data-y-position=bottom] {
+ border-top-left-radius: 0;
+}
+
+.sp-container[data-y-position=top] {
+ border-bottom-left-radius: 0;
+}
+
+/* Color square container */
+.sp-color, .sp-hue {
+ border : 1px solid #222;
+}
+
+/* Remove the padding on the input container */
+.sp-replacer {
+ padding: 4px;
+ height: 100%;
+ border-width: 0;
+ box-sizing: border-box;
+ -moz-box-sizing:border-box;
+ background-color: #444;
+}
+
+.sp-replacer:hover {
+ background-color: #888;
+}
+
+/* Hide the triangle */
+.sp-dd {
+ display: none;
+}
+
+/* */
+.sp-preview {
+ margin-right: 0;
+ height: 100%;
+ width: 39px;
+ border-width: 0;
+}
+
+.sp-palette-row-selection {
+ max-width: 62px;
+}
+
+.sp-palette .sp-thumb-el {
+ margin : 0 5px 5px 0;
+ width: 24px;
+ height: 24px;
+ border-color: #444;
+
+}
+
+.sp-picker-container, .sp-palette-container {
+ padding-top: 5px;
+ padding-right: 5px;
+ padding-left: 5px;
+ border-left-width: 0;
+ border-right-width: 0;
+}
+
+.sp-picker-container {
+ padding: 5px;
+ padding-bottom: 300px;
+ margin-bottom: -295px;
+}
+
+.sp-slider {
+ height: 5px;
+ left: -2px;
+ right: -2px;
+ border: 2px solid white;
+ background: rgba(255,255,255,0);
+ opacity: 1;
+ border-radius: 2px;
+ box-shadow: 0 0 1px 1px rgba(0,0,0,0.5), inset 0 0 1px 1px rgba(0,0,0,0.5);
+}
+
+.sp-dragger {
+ border-radius: 8px;
+ height: 12px;
+ width: 12px;
+ border: 2px solid white;
+ background: none;
+ box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ box-shadow: 0 0 1px 1px rgba(0,0,0,0.5), inset 0 0 1px 1px rgba(0,0,0,0.5);
+}
+
+.sp-palette .sp-thumb-el.sp-thumb-active {
+ border-color: gold;
+ box-shadow: 0 0 0px 1px gold;
+}
+
+.sp-input {
+ border: 1px solid #666;
+ margin: 0;
+ background: #111;
+ border-radius: 2px;
+ color: #D3D3D3;
+ font-family: Courier!important;
+}
+
+.sp-input.sp-validation-error {
+ background: #330000;
+}
+/*!
+ * Bootstrap v2.1.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.clearfix {
+ *zoom: 1;
+}
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.clearfix:after {
+ clear: both;
+}
+.hide-text {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.input-block-level {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ visibility: visible;
+ padding: 5px;
+ font-size: 11px;
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+.tooltip.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+.tooltip.top {
+ margin-top: -3px;
+}
+.tooltip.right {
+ margin-left: 3px;
+}
+.tooltip.bottom {
+ margin-top: 3px;
+}
+.tooltip.left {
+ margin-left: -3px;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #ffffff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000000;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000000;
+}
+
+.tooltip {
+ line-height: 20px;
+}
+
+.tooltip.in {
+ opacity: 0.95;
+ filter: alpha(opacity=95);
+}
+
+.tooltip {
+ line-height: 20px;
+}
+.preview-list-wrapper {
+ position: relative;
+ height: 100%;
+ overflow: hidden;
+}
+
+.preview-list-scroller {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ height: 100%;
+}
+
+.top-overflow,
+.bottom-overflow {
+ height: 20px;
+ position: absolute;
+ left: 0;
+ right: 12px;
+
+ -webkit-transition: all 500ms ease-out;
+ -moz-transition: all 500ms ease-out;
+ -ms-transition: all 500ms ease-out;
+ -o-transition: all 500ms ease-out;
+ transition: all 500ms ease-out;
+
+ background-image: linear-gradient(45deg, rgba(0,0,0, 0.8) 25%, transparent 25%, transparent 75%, rgba(0,0,0, 0.8) 75%, rgba(0,0,0, 0.8)),
+ linear-gradient(-45deg, rgba(0,0,0, 0.8) 25%, transparent 25%, transparent 75%, rgba(0,0,0, 0.8) 75%, rgba(0,0,0, 0.8));
+ background-size: 29px 45px;
+ background-repeat: repeat-x;
+ background-position-x: 3px;
+ z-index: 10;
+}
+
+.top-overflow {
+ top: -20px;
+}
+
+.bottom-overflow {
+ bottom: -20px;
+ background-position-x: 0;
+ background-position-y: -23px;
+}
+
+.top-overflow-visible .top-overflow {
+ top: 0;
+}
+
+.bottom-overflow-visible .bottom-overflow {
+ bottom: 0;
+}
+
+.preview-list {
+ list-style-type: none;
+ padding-right: 7px;
+}
+
+.add-frame-action {
+ border: #888 solid 4px;
+ font-size: 13px;
+ color: #888;
+ cursor: pointer;
+ padding: 6px 0;
+ border-radius: 4px;
+ margin-top: 8px;
+ background-image: url(../img/plus.png);
+ background-repeat: no-repeat;
+ background-position: 3px 7px;
+ background-size: 26px 26px;
+ text-indent: 18px;
+ background-color: #222;
+}
+
+.add-frame-action .label {
+ width: 80px;
+ margin: 0 auto;
+}
+
+.add-frame-action:hover {
+ border-color: gold;
+}
+
+.preview-tile {
+ position: relative;
+ border: #444 3px solid;
+ border-radius: 3px;
+ margin: 5px 0;
+}
+
+.preview-tile:first-child {
+ margin-top: 0;
+}
+
+.preview-tile:hover {
+ border: #999 3px solid;
+}
+
+.preview-tile .tile-overlay {
+ z-index: 10;
+ position: absolute;
+ background-color: rgba(100, 100, 100, 0.6);
+ opacity: 0;
+ height: 30px;
+ width: 30px;
+ border: none;
+}
+
+.preview-tile:hover .tile-overlay {
+ opacity: 1.0;
+}
+
+.preview-tile .tile-overlay.tile-count {
+ display: block;
+ opacity: 1.0;
+ border-bottom-right-radius: 3px;
+ top: 0;
+ left: 0;
+ font-size: 14px;
+ line-height: 30px;
+ color: white;
+ font-weight: bold;
+ text-align: center;
+ cursor: default;
+}
+
+.preview-tile .tile-overlay.delete-frame-action {
+ background-image: url(../img/garbage.png);
+ background-repeat: no-repeat;
+ top: 0;
+ right: 0;
+ border-bottom-left-radius: 3px;
+ height: 30px;
+ width: 30px;
+ background-position: 5px 5px;
+ background-size: 20px;
+ cursor: pointer;
+}
+
+.preview-tile .tile-overlay.duplicate-frame-action {
+ bottom: 0;
+ right: 0;
+ border-bottom-left-radius: 3px;
+ background-image: url(../img/duplicate.png);
+ background-repeat: no-repeat;
+ background-position: 5px 5px;
+ background-size: 20px;
+ cursor: pointer;
+}
+
+.preview-tile .tile-overlay.dnd-action {
+ bottom: 0;
+ left: 0;
+ border-top-right-radius: 3px;
+ background-image: url(../img/dragndrop.png);
+ background-repeat: no-repeat;
+ background-position: 5px 5px;
+ background-size: 20px;
+ cursor: move;
+}
+
+.preview-tile.selected {
+ border-color: gold;
+}
+
+.preview-tile.selected:after {
+ content: " ";
+ position: absolute;
+ top: 38px;
+ right: -15px;
+ border: transparent 4px solid;
+ border-left-color: gold;
+ border-width: 6px;
+ border-style: solid;
+}
+
+
+/**
+ * Drag n drop styles.
+ */
+
+.preview-tile-drop-proxy {
+ border: 3px dashed gold;
+ height: 90px;
+ border-radius: 9px;
+ background-color: rgba(255, 215,0, 0.2);
+}
+
+.minimap-crop-frame {
+ position:absolute;
+ border:1px solid rgba(255,255,255,0.5);
+ z-index:100;
+ box-sizing : border-box;
+ -moz-box-sizing : border-box;
+ cursor : pointer;
+}
\ No newline at end of file
diff --git a/src/css/settings.css b/src/css/settings.css
index fe592471..726d3403 100644
--- a/src/css/settings.css
+++ b/src/css/settings.css
@@ -137,13 +137,17 @@
margin-bottom: 10px;
}
+.settings-item {
+ margin : 10px 0;
+}
+
/************************************************************************************************/
/* Application settings */
/************************************************************************************************/
.background-picker-wrapper {
overflow: hidden;
- padding: 10px 5px 20px 5px;
+ padding: 5px;
}
.background-picker {
diff --git a/src/css/style.css b/src/css/style.css
index e9c5f88b..a497aa94 100644
--- a/src/css/style.css
+++ b/src/css/style.css
@@ -178,6 +178,16 @@ body {
border : 0px Solid transparent;
}
+#preview-canvas-container {
+ height :200px;
+}
+
+.tiled-frame-renderer {
+ height: 100%;
+ width: 100%;
+ position: absolute;
+}
+
.display-fps {
float: left;
color: #aaa;
@@ -190,6 +200,8 @@ body {
.range-fps {
overflow: hidden;
width: 120px;
+ height : 24px;
+ margin : 0;
}
/**
diff --git a/src/css/toolbox.css b/src/css/toolbox.css
index e8f903e1..e449eb8a 100644
--- a/src/css/toolbox.css
+++ b/src/css/toolbox.css
@@ -4,7 +4,9 @@
color: white;
text-align: left;
border-radius: 4px;
- margin-top: 10px;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ overflow: hidden;
}
.toolbox-title {
diff --git a/src/js/Constants.js b/src/js/Constants.js
index 405565f7..edf17811 100644
--- a/src/js/Constants.js
+++ b/src/js/Constants.js
@@ -60,5 +60,6 @@ var Constants = {
RIGHT_BUTTON : 2,
MOUSEMOVE_THROTTLING : 10,
- ABSTRACT_FUNCTION : function () {throw 'abstract method should be implemented';}
+ ABSTRACT_FUNCTION : function () {throw 'abstract method should be implemented';},
+ EMPTY_FUNCTION : function () {}
};
\ No newline at end of file
diff --git a/src/js/controller/AnimatedPreviewController.js b/src/js/controller/AnimatedPreviewController.js
index 8941ec1b..d847b003 100644
--- a/src/js/controller/AnimatedPreviewController.js
+++ b/src/js/controller/AnimatedPreviewController.js
@@ -14,12 +14,29 @@
var frame = this.piskelController.getCurrentFrame();
var renderingOptions = {
"zoom": zoom,
- "height" : frame.getHeight() * zoom,
- "width" : frame.getWidth() * zoom
+ "height" : 200,
+ "width" : 200
};
- this.renderer = new pskl.rendering.frame.FrameRenderer(this.container, renderingOptions);
+
+ this.tiledRenderer = new pskl.rendering.frame.TiledFrameRenderer(this.container);
+ this.frameRenderer = new pskl.rendering.frame.FrameRenderer(this.container, renderingOptions);
+ this.renderer = new pskl.rendering.CompositeRenderer();
+ this.renderer.add(this.tiledRenderer);
+ this.renderer.add(this.frameRenderer);
$.subscribe(Events.FRAME_SIZE_CHANGED, this.onFrameSizeChange_.bind(this));
+ $.subscribe(Events.USER_SETTINGS_CHANGED, $.proxy(this.onUserSettingsChange_, this));
+ this.onUserSettingsChange_();
+ };
+
+ ns.AnimatedPreviewController.prototype.onUserSettingsChange_ = function () {
+ if(pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW)) {
+ this.frameRenderer.hide();
+ this.tiledRenderer.show();
+ } else {
+ this.tiledRenderer.hide();
+ this.frameRenderer.show();
+ }
};
ns.AnimatedPreviewController.prototype.init = function () {
@@ -53,7 +70,8 @@
this.currentIndex = 0;
this.elapsedTime = 0;
}
- this.renderer.render(this.piskelController.getFrameAt(this.currentIndex));
+ var frame = this.piskelController.getFrameAt(this.currentIndex);
+ this.renderer.render(frame);
}
};
diff --git a/src/js/controller/piskel/PublicPiskelController.js b/src/js/controller/piskel/PublicPiskelController.js
index d9e5002b..a982968c 100644
--- a/src/js/controller/piskel/PublicPiskelController.js
+++ b/src/js/controller/piskel/PublicPiskelController.js
@@ -44,7 +44,7 @@
};
ns.PublicPiskelController.prototype.duplicateCurrentFrame = function () {
- this.piskelController.duplicateFrameAt(this.getCurrentFrameIndex());
+ this.duplicateFrameAt(this.getCurrentFrameIndex());
};
ns.PublicPiskelController.prototype.raiseSaveStateEvent_ = function (fn, args) {
diff --git a/src/js/controller/settings/ApplicationSettingsController.js b/src/js/controller/settings/ApplicationSettingsController.js
index 4364005f..f4bf2863 100644
--- a/src/js/controller/settings/ApplicationSettingsController.js
+++ b/src/js/controller/settings/ApplicationSettingsController.js
@@ -18,6 +18,10 @@
$('#grid-width').val(gridWidth);
$('#grid-width').change(this.onGridWidthChange.bind(this));
+ var tiledPreview = pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW);
+ $('#tiled-preview').prop('checked', tiledPreview);
+ $('#tiled-preview').change(this.onTiledPreviewChange.bind(this));
+
// Handle canvas background changes:
$('#background-picker-wrapper').click(this.onBackgroundClick.bind(this));
};
@@ -27,6 +31,11 @@
pskl.UserSettings.set(pskl.UserSettings.GRID_WIDTH, parseInt(width, 10));
};
+ ns.ApplicationSettingsController.prototype.onTiledPreviewChange = function (evt) {
+ var checked = $('#tiled-preview').prop('checked');
+ pskl.UserSettings.set(pskl.UserSettings.TILED_PREVIEW, checked);
+ };
+
ns.ApplicationSettingsController.prototype.onBackgroundClick = function (evt) {
var target = $(evt.target).closest('.background-picker');
if (target.length) {
diff --git a/src/js/rendering/AbstractRenderer.js b/src/js/rendering/AbstractRenderer.js
index af21b9f7..ad4cb130 100644
--- a/src/js/rendering/AbstractRenderer.js
+++ b/src/js/rendering/AbstractRenderer.js
@@ -4,6 +4,7 @@
ns.AbstractRenderer = function () {};
ns.AbstractRenderer.prototype.clear = Constants.ABSTRACT_FUNCTION;
+ ns.AbstractRenderer.prototype.render = Constants.ABSTRACT_FUNCTION;
ns.AbstractRenderer.prototype.getCoordinates = Constants.ABSTRACT_FUNCTION;
diff --git a/src/js/rendering/CompositeRenderer.js b/src/js/rendering/CompositeRenderer.js
index 91a7cb97..5133994e 100644
--- a/src/js/rendering/CompositeRenderer.js
+++ b/src/js/rendering/CompositeRenderer.js
@@ -12,6 +12,13 @@
return this;
};
+
+ ns.CompositeRenderer.prototype.render = function (frame) {
+ this.renderers.forEach(function (renderer) {
+ renderer.render(frame);
+ });
+ };
+
ns.CompositeRenderer.prototype.clear = function () {
this.renderers.forEach(function (renderer) {
renderer.clear();
diff --git a/src/js/rendering/frame/FrameRenderer.js b/src/js/rendering/frame/FrameRenderer.js
index 44c21da1..c2f6a9b0 100644
--- a/src/js/rendering/frame/FrameRenderer.js
+++ b/src/js/rendering/frame/FrameRenderer.js
@@ -70,6 +70,18 @@
}
};
+ ns.FrameRenderer.prototype.hide = function () {
+ if (this.displayCanvas) {
+ this.displayCanvas.style.display = 'none';
+ }
+ };
+
+ ns.FrameRenderer.prototype.show = function () {
+ if (this.displayCanvas) {
+ this.displayCanvas.style.display = 'block';
+ }
+ };
+
ns.FrameRenderer.prototype.clear = function () {
pskl.CanvasUtils.clear(this.canvas);
pskl.CanvasUtils.clear(this.displayCanvas);
diff --git a/src/js/rendering/frame/TiledFrameRenderer.js b/src/js/rendering/frame/TiledFrameRenderer.js
new file mode 100644
index 00000000..12c84798
--- /dev/null
+++ b/src/js/rendering/frame/TiledFrameRenderer.js
@@ -0,0 +1,55 @@
+(function () {
+ var ns = $.namespace('pskl.rendering.frame');
+
+ ns.TiledFrameRenderer = function (container) {
+ this.displayContainer = document.createElement('div');
+ container.get(0).appendChild(this.displayContainer);
+ this.displayContainer.style.backgroundRepeat = 'repeat';
+ this.displayContainer.classList.add('tiled-frame-renderer');
+ this.container = container;
+ this.updateBackgroundClass_(pskl.UserSettings.get(pskl.UserSettings.CANVAS_BACKGROUND));
+ $.subscribe(Events.USER_SETTINGS_CHANGED, $.proxy(this.onUserSettingsChange_, this));
+ };
+
+ ns.TiledFrameRenderer.prototype.render = function (frame) {
+ var canvas = new pskl.utils.FrameUtils.toImage(frame);
+ this.displayContainer.style.backgroundImage = 'url(' + canvas.toDataURL('image/png') + ')';
+ };
+
+
+
+ ns.TiledFrameRenderer.prototype.hide = function () {
+ if (this.displayContainer) {
+ this.displayContainer.style.display = 'none';
+ }
+ };
+
+ ns.TiledFrameRenderer.prototype.show = function () {
+ if (this.displayContainer) {
+ this.displayContainer.style.display = 'block';
+ }
+ };
+
+ ns.TiledFrameRenderer.prototype.setZoom = Constants.EMPTY_FUNCTION;
+
+ ns.TiledFrameRenderer.prototype.setOffset = Constants.EMPTY_FUNCTION;
+
+ ns.TiledFrameRenderer.prototype.setDisplaySize = Constants.EMPTY_FUNCTION;
+
+ ns.TiledFrameRenderer.prototype.onUserSettingsChange_ = function (evt, settingName, settingValue) {
+ if (settingName == pskl.UserSettings.CANVAS_BACKGROUND) {
+ this.updateBackgroundClass_(settingValue);
+ } else if (settingName == pskl.UserSettings.GRID_WIDTH) {
+ this.setGridWidth(settingValue);
+ }
+ };
+
+ ns.TiledFrameRenderer.prototype.updateBackgroundClass_ = function (newClass) {
+ var currentClass = this.container.data('current-background-class');
+ if (currentClass) {
+ this.container.removeClass(currentClass);
+ }
+ this.container.addClass(newClass);
+ this.container.data('current-background-class', newClass);
+ };
+})();
\ No newline at end of file
diff --git a/src/js/utils/UserSettings.js b/src/js/utils/UserSettings.js
index 59c6455f..44c98285 100644
--- a/src/js/utils/UserSettings.js
+++ b/src/js/utils/UserSettings.js
@@ -5,11 +5,13 @@
GRID_WIDTH : 'GRID_WIDTH',
CANVAS_BACKGROUND : 'CANVAS_BACKGROUND',
SELECTED_PALETTE : 'SELECTED_PALETTE',
+ TILED_PREVIEW : 'TILED_PREVIEW',
KEY_TO_DEFAULT_VALUE_MAP_ : {
'GRID_WIDTH' : 0,
'CANVAS_BACKGROUND' : 'lowcont-dark-canvas-background',
- 'SELECTED_PALETTE' : Constants.NO_PALETTE_ID
+ 'SELECTED_PALETTE' : Constants.NO_PALETTE_ID,
+ 'TILED_PREVIEW' : false
},
/**
diff --git a/src/piskel-script-list.js b/src/piskel-script-list.js
index 26eb3d22..5165156e 100644
--- a/src/piskel-script-list.js
+++ b/src/piskel-script-list.js
@@ -59,6 +59,7 @@
"js/rendering/CompositeRenderer.js",
"js/rendering/layer/LayersRenderer.js",
"js/rendering/frame/FrameRenderer.js",
+ "js/rendering/frame/TiledFrameRenderer.js",
"js/rendering/frame/CachedFrameRenderer.js",
"js/rendering/CanvasRenderer.js",
"js/rendering/FramesheetRenderer.js",
diff --git a/src/templates/settings/application.html b/src/templates/settings/application.html
index fa02b066..b45f39ed 100644
--- a/src/templates/settings/application.html
+++ b/src/templates/settings/application.html
@@ -29,5 +29,9 @@
+
+
+
+