Fix canvas size when grid display is active

- Dynamic resizing of canvas when display_grid is activated/deactivated
 - Adding a main-wrapper to get a perfect alignement at the top and
bottom the application screen
 - fix DPI update on page load (independent of grid option).
 - fix available width for DPI calculation (using margin-box, was using
only content before)
This commit is contained in:
Vince 2013-06-19 19:01:12 +02:00
parent 6cb145ae34
commit 4618cb643a
3 changed files with 126 additions and 93 deletions

View File

@ -12,39 +12,48 @@ body {
* Application layout * Application layout
*/ */
.main-wrapper {
position: absolute;
top: 5px;
right: 0;
bottom: 5px;
left: 0;
}
.column-wrapper { .column-wrapper {
text-align: center; text-align: center;
font-size: 0; font-size: 0;
position: absolute; position: absolute;
left: 100px; /* Reserve room for tools on the left edge of the screen. */ left: 100px; /* Reserve room for tools on the left edge of the screen. */
top: 10px; top: 0;
right: 50px; /* Reserve room for actions on the right edge of the screen. */ right: 50px; /* Reserve room for actions on the right edge of the screen. */
bottom: 10px; bottom: 0;
}
.column {
display: inline-block;
} }
.left-column { .left-column {
display: inline-block;
vertical-align: top; vertical-align: top;
height: 100%; height: 100%;
margin-right: 7px; margin-right: 7px;
} }
.main-column { .main-column {
display: inline-block;
height: 100%; height: 100%;
position: relative; position: relative;
} }
.drawing-canvas-container {
font-size: 0;
}
.right-column { .right-column {
display: inline-block;
vertical-align: top; vertical-align: top;
margin-left: 10px; margin-left: 10px;
} }
.drawing-canvas-container {
font-size: 0;
}
.sticky-section { .sticky-section {
display: table; display: table;
height: 100%; height: 100%;

View File

@ -16,95 +16,97 @@
<link rel="stylesheet" type="text/css" href="css/preview-film-section.css"> <link rel="stylesheet" type="text/css" href="css/preview-film-section.css">
</head> </head>
<body> <body>
<div class="sticky-section left-sticky-section" id="tool-section"> <div id="main-wrapper" class="main-wrapper">
<div class="wrap"> <div class="sticky-section left-sticky-section" id="tool-section">
<ul id="tools-container" class="tools-wrapper"></ul> <div class="wrap">
<div class="palette-wrapper"> <ul id="tools-container" class="tools-wrapper"></ul>
<div class="tool-icon tool-color-picker"> <div class="palette-wrapper">
<input id="color-picker" class="color {hash:true}" type="text" value="" /> <div class="tool-icon tool-color-picker">
<input id="secondary-color-picker" class="secondary-color-picker color {hash:true}" type="text" value="" /> <input id="color-picker" class="color {hash:true}" type="text" value="" />
</div> <input id="secondary-color-picker" class="secondary-color-picker color {hash:true}" type="text" value="" />
<div class="tool-icon tool-palette">
<div id="palette" class="palette">
<span class="tool-icon palette-color transparent-color" data-color="TRANSPARENT" title="Transparent"></span>
</div> </div>
</div> <div class="tool-icon tool-palette">
</div> <div id="palette" class="palette">
</div> <span class="tool-icon palette-color transparent-color" data-color="TRANSPARENT" title="Transparent"></span>
</div>
<div id="application-action-section" class="sticky-section right-sticky-section">
<div class="wrap">
<div id="settings" class="tool-icon gear-icon" title="Preferences" rel="tooltip" data-placement="left"></div>
<a class="tool-icon gallery-icon" title="Visit gallery" href="http://juliandescottes.github.io/piskel-website/" rel="tooltip" data-placement="left" target="_blank"></a>
<div class="tool-icon save-icon" title="Save to gallery" onclick="piskel.storeSheet()" rel="tooltip" data-placement="left" ></div>
<div class="tool-icon upload-cloud-icon" title="Upload as an animated GIF" onclick="piskel.uploadAsAnimatedGIF()" rel="tooltip" data-placement="left">
<span class="label">GIF</span>
</div>
<div class="tool-icon upload-cloud-icon" title="Upload as a spritesheet PNG" onclick="piskel.uploadAsSpritesheetPNG()" rel="tooltip" data-placement="left">
<span class="label">PNG</span>
</div>
</div>
<div class="drawer">
<div class="drawer-content">
<div class="settings-section">
<div class="settings-title">
Canvas settings:
</div>
<div class="settings-item">
<label>Background:</label>
<div id="background-picker-wrapper" class="background-picker-wrapper">
<div class="background-picker light-picker-background" data-background-class="light-canvas-background"
rel="tooltip" data-placement="bottom" title="light / high contrast">
</div>
<div class="background-picker medium-picker-background" data-background-class="medium-canvas-background"
rel="tooltip" data-placement="bottom" title="medium / high contrast">
</div>
<div class="background-picker lowcont-medium-picker-background" data-background-class="lowcont-medium-canvas-background"
rel="tooltip" data-placement="bottom" title="medium / low contrast">
</div>
<div class="background-picker lowcont-dark-picker-background" data-background-class="lowcont-dark-canvas-background"
rel="tooltip" data-placement="bottom" title="dark / low contrast">
</div>
</div> </div>
</div> </div>
<div class="settings-item"> </div>
<label for="show-grid">Show grid:</label> <input id="show-grid" type="checkbox"/> </div>
</div>
<div id="application-action-section" class="sticky-section right-sticky-section">
<div class="wrap">
<div id="settings" class="tool-icon gear-icon" title="Preferences" rel="tooltip" data-placement="left"></div>
<a class="tool-icon gallery-icon" title="Visit gallery" href="http://juliandescottes.github.io/piskel-website/" rel="tooltip" data-placement="left" target="_blank"></a>
<div class="tool-icon save-icon" title="Save to gallery" onclick="piskel.storeSheet()" rel="tooltip" data-placement="left" ></div>
<div class="tool-icon upload-cloud-icon" title="Upload as an animated GIF" onclick="piskel.uploadAsAnimatedGIF()" rel="tooltip" data-placement="left">
<span class="label">GIF</span>
</div>
<div class="tool-icon upload-cloud-icon" title="Upload as a spritesheet PNG" onclick="piskel.uploadAsSpritesheetPNG()" rel="tooltip" data-placement="left">
<span class="label">PNG</span>
</div>
</div>
<div class="drawer">
<div class="drawer-content">
<div class="settings-section">
<div class="settings-title">
Canvas settings:
</div>
<div class="settings-item">
<label>Background:</label>
<div id="background-picker-wrapper" class="background-picker-wrapper">
<div class="background-picker light-picker-background" data-background-class="light-canvas-background"
rel="tooltip" data-placement="bottom" title="light / high contrast">
</div>
<div class="background-picker medium-picker-background" data-background-class="medium-canvas-background"
rel="tooltip" data-placement="bottom" title="medium / high contrast">
</div>
<div class="background-picker lowcont-medium-picker-background" data-background-class="lowcont-medium-canvas-background"
rel="tooltip" data-placement="bottom" title="medium / low contrast">
</div>
<div class="background-picker lowcont-dark-picker-background" data-background-class="lowcont-dark-canvas-background"
rel="tooltip" data-placement="bottom" title="dark / low contrast">
</div>
</div>
</div>
<div class="settings-item">
<label for="show-grid">Show grid:</label> <input id="show-grid" type="checkbox"/>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="column-wrapper"> <div id="column-wrapper" class="column-wrapper">
<div class='left-column'> <div class='column left-column'>
<!-- List of frames: --> <!-- List of frames: -->
<div id="preview-list-wrapper" class="preview-list-wrapper"> <div id="preview-list-wrapper" class="preview-list-wrapper">
<div id="preview-list-scroller" class="preview-list-scroller"> <div id="preview-list-scroller" class="preview-list-scroller">
<ul class="preview-list" id="preview-list"></ul> <ul class="preview-list" id="preview-list"></ul>
</div>
<div class="top-overflow"></div>
<div class="bottom-overflow"></div>
</div> </div>
<div class="top-overflow"></div>
<div class="bottom-overflow"></div>
</div> </div>
</div>
<div class='main-column'> <div class='column main-column'>
<!-- Drawing area: --> <!-- Drawing area: -->
<div id="drawing-canvas-container" class="drawing-canvas-container canvas-container"> <div id="drawing-canvas-container" class="drawing-canvas-container canvas-container">
<div class="canvas-background"></div>
</div>
</div>
<div class="right-column">
<!-- Animation preview: -->
<div class='preview-container'>
<div id='preview-canvas-container' class="canvas-container">
<div class="canvas-background"></div> <div class="canvas-background"></div>
</div> </div>
<div> </div>
<span id="display-fps" class="display-fps">12 FPS</span>
<input id="preview-fps" class="range-fps" type="range" min="1" max="24" value="12"/> <div class="column right-column">
<!-- Animation preview: -->
<div class='preview-container'>
<div id='preview-canvas-container' class="canvas-container">
<div class="canvas-background"></div>
</div>
<div>
<span id="display-fps" class="display-fps">12 FPS</span>
<input id="preview-fps" class="range-fps" type="range" min="1" max="24" value="12"/>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -60,8 +60,10 @@
$(window).resize($.proxy(this.startDPIUpdateTimer_, this)); $(window).resize($.proxy(this.startDPIUpdateTimer_, this));
$.subscribe(Events.FRAME_SIZE_CHANGED, $.proxy(this.updateDPI_, this));
$.subscribe(Events.USER_SETTINGS_CHANGED, $.proxy(this.onUserSettingsChange_, this)); $.subscribe(Events.USER_SETTINGS_CHANGED, $.proxy(this.onUserSettingsChange_, this));
$.subscribe(Events.FRAME_SIZE_CHANGED, $.proxy(this.updateDPI_, this));
this.updateDPI_();
}; };
ns.DrawingController.prototype.initMouseBehavior = function() { ns.DrawingController.prototype.initMouseBehavior = function() {
@ -88,7 +90,7 @@
*/ */
ns.DrawingController.prototype.onUserSettingsChange_ = function (evt, settingsName, settingsValue) { ns.DrawingController.prototype.onUserSettingsChange_ = function (evt, settingsName, settingsValue) {
if(settingsName == pskl.UserSettings.SHOW_GRID) { if(settingsName == pskl.UserSettings.SHOW_GRID) {
this.forceRendering_(); this.updateDPI_();
} }
}, },
@ -268,13 +270,20 @@
* @private * @private
*/ */
ns.DrawingController.prototype.calculateDPI_ = function() { ns.DrawingController.prototype.calculateDPI_ = function() {
var availableViewportHeight = $('.main-column').height(), var availableViewportHeight = $('#main-wrapper').height(),
leftSectionWidth = $('.left-column').width(), leftSectionWidth = $('.left-column').outerWidth(true),
rightSectionWidth = $('.right-column').width(), rightSectionWidth = $('.right-column').outerWidth(true),
availableViewportWidth = $('body').width() - leftSectionWidth - rightSectionWidth, availableViewportWidth = $('#main-wrapper').width() - leftSectionWidth - rightSectionWidth,
framePixelHeight = this.framesheet.getCurrentFrame().getHeight(), framePixelHeight = this.framesheet.getCurrentFrame().getHeight(),
framePixelWidth = this.framesheet.getCurrentFrame().getWidth(); framePixelWidth = this.framesheet.getCurrentFrame().getWidth();
var dpi = pskl.PixelUtils.calculateDPI(availableViewportHeight, availableViewportWidth, framePixelHeight, framePixelWidth);
if (pskl.UserSettings.get(pskl.UserSettings.SHOW_GRID)) {
availableViewportWidth = availableViewportWidth - (framePixelWidth * Constants.GRID_STROKE_WIDTH);
availableViewportHeight = availableViewportHeight - (framePixelHeight * Constants.GRID_STROKE_WIDTH);
}
var dpi = pskl.PixelUtils.calculateDPI(
availableViewportHeight, availableViewportWidth, framePixelHeight, framePixelWidth);
return dpi; return dpi;
}; };
@ -286,6 +295,19 @@
var dpi = this.calculateDPI_(); var dpi = this.calculateDPI_();
this.renderer.updateDPI(dpi); this.renderer.updateDPI(dpi);
this.overlayRenderer.updateDPI(dpi); this.overlayRenderer.updateDPI(dpi);
var currentFrameHeight = this.framesheet.getCurrentFrame().getHeight();
var canvasHeight = currentFrameHeight * dpi;
if (pskl.UserSettings.get(pskl.UserSettings.SHOW_GRID)) {
canvasHeight += Constants.GRID_STROKE_WIDTH * currentFrameHeight;
}
var verticalGapInPixel = Math.floor(($('#main-wrapper').height() - canvasHeight) / 2);
$('#column-wrapper').css({
'top': verticalGapInPixel + 'px',
'height': canvasHeight + 'px'
});
this.forceRendering_(); this.forceRendering_();
}; };
})(); })();