mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Dynamic DPIs !
This commit is contained in:
parent
bca16a3964
commit
ba5500b4b0
@ -73,10 +73,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.drawing-canvas {
|
.drawing-canvas {
|
||||||
position: absolute;
|
float: left;
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.canvas-overlay {
|
.canvas-overlay {
|
||||||
|
@ -16,15 +16,17 @@
|
|||||||
this.container = container;
|
this.container = container;
|
||||||
this.renderer = new pskl.rendering.FrameRenderer(this.container, renderingOptions, "drawing-canvas");
|
this.renderer = new pskl.rendering.FrameRenderer(this.container, renderingOptions, "drawing-canvas");
|
||||||
this.overlayRenderer = new pskl.rendering.FrameRenderer(this.container, renderingOptions, "canvas-overlay");
|
this.overlayRenderer = new pskl.rendering.FrameRenderer(this.container, renderingOptions, "canvas-overlay");
|
||||||
//this.mainCanvas = this.createMainCanvas();
|
|
||||||
//this.overlayCanvas = this.createOverlayCanvas();
|
|
||||||
this.renderer.init(this.frame);
|
this.renderer.init(this.frame);
|
||||||
this.overlayRenderer.init(this.frame);
|
this.overlayRenderer.init(this.frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.DrawingController.prototype.updateDPI = function (newDPI) {
|
ns.DrawingController.prototype.updateDPI = function (newDPI) {
|
||||||
//this.renderer.updateDPI(newDPI);
|
this.renderer.updateDPI(newDPI);
|
||||||
//this.overlayRenderer.updateDPI(newDPI);
|
this.overlayRenderer.updateDPI(newDPI);
|
||||||
|
|
||||||
|
this.renderer.render(this.frame);
|
||||||
|
this.overlayRenderer.render(this.frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.DrawingController.prototype.renderFrame = function () {
|
ns.DrawingController.prototype.renderFrame = function () {
|
||||||
|
47
js/piskel.js
47
js/piskel.js
@ -11,23 +11,18 @@ $.namespace("pskl");
|
|||||||
*/
|
*/
|
||||||
var frameSheet,
|
var frameSheet,
|
||||||
|
|
||||||
// Temporary zoom implementation to easily get bigger canvases to
|
|
||||||
// see how good perform critical algorithms on big canvas.
|
|
||||||
zoom = 1,
|
|
||||||
|
|
||||||
// Configuration:
|
// Configuration:
|
||||||
// Canvas size in pixel size (not dpi related)
|
// Canvas size in pixel size (not dpi related)
|
||||||
framePixelWidth = 32 * zoom,
|
framePixelWidth = 32,
|
||||||
framePixelHeight = 32 * zoom,
|
framePixelHeight = 32,
|
||||||
|
|
||||||
|
|
||||||
// Scaling factors for a given frameSheet rendering:
|
// Scaling factors for a given frameSheet rendering:
|
||||||
// Main drawing area:
|
// Main drawing area:
|
||||||
drawingCanvasDpi = Math.ceil(20/ zoom),
|
drawingCanvasDpi = 20,
|
||||||
// Canvas previous in the slideshow:
|
// Canvas preview film canvases:
|
||||||
previewTileCanvasDpi = Math.ceil(4 / zoom),
|
previewTileCanvasDpi = 4,
|
||||||
// Ainmated canvas preview:
|
// Animated canvas preview:
|
||||||
previewAnimationCanvasDpi = Math.ceil(8 / zoom),
|
previewAnimationCanvasDpi = 8,
|
||||||
|
|
||||||
// DOM references:
|
// DOM references:
|
||||||
drawingAreaContainer,
|
drawingAreaContainer,
|
||||||
@ -53,6 +48,9 @@ $.namespace("pskl");
|
|||||||
var piskel = {
|
var piskel = {
|
||||||
|
|
||||||
init : function () {
|
init : function () {
|
||||||
|
|
||||||
|
piskel.initDPIs_();
|
||||||
|
|
||||||
frameSheet = new pskl.model.FrameSheet(framePixelWidth, framePixelHeight);
|
frameSheet = new pskl.model.FrameSheet(framePixelWidth, framePixelHeight);
|
||||||
frameSheet.addEmptyFrame();
|
frameSheet.addEmptyFrame();
|
||||||
|
|
||||||
@ -95,6 +93,29 @@ $.namespace("pskl");
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override default DPIs.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
initDPIs_ : function() {
|
||||||
|
|
||||||
|
drawingCanvasDpi = piskel.calculateDPIsForDrawingCanvas_();
|
||||||
|
// TODO(vincz): Add throttling on window.resize event.
|
||||||
|
$(window).resize($.proxy(function() {
|
||||||
|
drawingCanvasDpi = piskel.calculateDPIsForDrawingCanvas_();
|
||||||
|
this.drawingController.updateDPI(drawingCanvasDpi);
|
||||||
|
}, this));
|
||||||
|
// TODO(vincz): Check for user settings eventually from localstorage.
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
calculateDPIsForDrawingCanvas_ : function() {
|
||||||
|
var availableViewportHeight = $('.main-panel').height();
|
||||||
|
return Math.floor(availableViewportHeight / framePixelHeight);
|
||||||
|
},
|
||||||
|
|
||||||
finishInit : function () {
|
finishInit : function () {
|
||||||
|
|
||||||
$.subscribe(Events.TOOL_SELECTED, function(evt, toolBehavior) {
|
$.subscribe(Events.TOOL_SELECTED, function(evt, toolBehavior) {
|
||||||
@ -186,8 +207,6 @@ $.namespace("pskl");
|
|||||||
document.body.addEventListener('mouseup', this.onMouseup.bind(this));
|
document.body.addEventListener('mouseup', this.onMouseup.bind(this));
|
||||||
drawingAreaContainer.addEventListener('mousedown', this.onMousedown.bind(this));
|
drawingAreaContainer.addEventListener('mousedown', this.onMousedown.bind(this));
|
||||||
drawingAreaContainer.addEventListener('mousemove', this.onMousemove.bind(this));
|
drawingAreaContainer.addEventListener('mousemove', this.onMousemove.bind(this));
|
||||||
drawingAreaContainer.style.width = framePixelWidth * drawingCanvasDpi + "px";
|
|
||||||
drawingAreaContainer.style.height = framePixelHeight * drawingCanvasDpi + "px";
|
|
||||||
document.body.addEventListener('contextmenu', this.onCanvasContextMenu);
|
document.body.addEventListener('contextmenu', this.onCanvasContextMenu);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -17,24 +17,30 @@
|
|||||||
this.displayGrid = !!renderingOptions.displayGrid;
|
this.displayGrid = !!renderingOptions.displayGrid;
|
||||||
this.dpi = renderingOptions.dpi;
|
this.dpi = renderingOptions.dpi;
|
||||||
this.className = className;
|
this.className = className;
|
||||||
|
|
||||||
|
// Flag to know if the config was altered
|
||||||
|
this.canvasConfigDirty = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.FrameRenderer.prototype.init = function (frame) {
|
ns.FrameRenderer.prototype.init = function (frame) {
|
||||||
|
|
||||||
this.createCanvas_(frame);
|
|
||||||
this.render(frame);
|
this.render(frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ns.FrameRenderer.prototype.updateDPI = function (newDPI) {
|
||||||
|
this.dpi = newDPI;
|
||||||
|
this.canvasConfigDirty = true;
|
||||||
|
};
|
||||||
|
|
||||||
ns.FrameRenderer.prototype.render = function (frame) {
|
ns.FrameRenderer.prototype.render = function (frame) {
|
||||||
for(var col = 0, width = frame.getWidth(); col < width; col++) {
|
for(var col = 0, width = frame.getWidth(); col < width; col++) {
|
||||||
for(var row = 0, height = frame.getHeight(); row < height; row++) {
|
for(var row = 0, height = frame.getHeight(); row < height; row++) {
|
||||||
this.drawPixel(col, row, frame, this.canvas, this.dpi);
|
this.drawPixel(col, row, frame, this.getCanvas_(frame), this.dpi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.FrameRenderer.prototype.drawPixel = function (col, row, frame) {
|
ns.FrameRenderer.prototype.drawPixel = function (col, row, frame) {
|
||||||
var context = this.canvas.getContext('2d');
|
var context = this.getCanvas_(frame).getContext('2d');
|
||||||
var color = frame.getPixel(col, row);
|
var color = frame.getPixel(col, row);
|
||||||
if(color == Constants.TRANSPARENT_COLOR) {
|
if(color == Constants.TRANSPARENT_COLOR) {
|
||||||
context.clearRect(col * this.dpi, row * this.dpi, this.dpi, this.dpi);
|
context.clearRect(col * this.dpi, row * this.dpi, this.dpi, this.dpi);
|
||||||
@ -50,14 +56,16 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
ns.FrameRenderer.prototype.clear = function (col, row, frame) {
|
ns.FrameRenderer.prototype.clear = function (col, row, frame) {
|
||||||
this.canvas.getContext("2d").clearRect(0, 0, this.canvas.width, this.canvas.height);
|
var canvas = this.getCanvas_(frame)
|
||||||
|
canvas.getContext("2d").clearRect(0, 0, canvas.width, canvas.height);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ns.FrameRenderer.prototype.createCanvas_ = function (frame) {
|
ns.FrameRenderer.prototype.getCanvas_ = function (frame) {
|
||||||
if(this.canvas == undefined) {
|
if(this.canvasConfigDirty) {
|
||||||
|
$(this.canvas).remove();
|
||||||
var width = frame.getWidth(),
|
var width = frame.getWidth(),
|
||||||
height = frame.getHeight();
|
height = frame.getHeight();
|
||||||
|
|
||||||
@ -72,7 +80,10 @@
|
|||||||
canvas.setAttribute("class", canvasClassname);
|
canvas.setAttribute("class", canvasClassname);
|
||||||
|
|
||||||
this.canvas = canvas;
|
this.canvas = canvas;
|
||||||
}
|
|
||||||
this.container.appendChild(this.canvas);
|
this.container.appendChild(this.canvas);
|
||||||
|
|
||||||
|
this.canvasConfigDirty = false;
|
||||||
|
}
|
||||||
|
return this.canvas;
|
||||||
};
|
};
|
||||||
})();
|
})();
|
Loading…
x
Reference in New Issue
Block a user