merge with splitting_text
diff --git a/extension/CSXS/manifest.xml b/extension/CSXS/manifest.xml
index bfa91ff..e159a79 100644
--- a/extension/CSXS/manifest.xml
+++ b/extension/CSXS/manifest.xml
@@ -6,11 +6,8 @@
</ExtensionList>
<ExecutionEnvironment>
<HostList>
- <!-- Uncomment Host tags according to the apps you want your panel to support -->
- <!-- Photoshop -->
-
<Host Name="AEFT" Version="[13.0,13.9]" />
- <Host Name="PHSP" Version="[15.0,15.9]" />
+ <Host Name="PPRO" Version="[8.0,8.9]" />
<!-- Illustrator -->
<!-- <Host Name="ILST" Version="[18.0,18.9]" />-->
diff --git a/extension/css/compsSelection.css b/extension/css/compsSelection.css
index 15c4f33..0248d8b 100644
--- a/extension/css/compsSelection.css
+++ b/extension/css/compsSelection.css
@@ -21,10 +21,6 @@
}
-#compsSelection .buttons .settings{
- float: right;
-}
-
#compsSelection .compsTable{
width: 100%;
font-size: 10px;
@@ -131,4 +127,4 @@
border-bottom: 1px solid red;
padding: 4px;
}
-
\ No newline at end of file
+
diff --git a/extension/css/snapshot.css b/extension/css/snapshot.css
new file mode 100644
index 0000000..f9790c0
--- /dev/null
+++ b/extension/css/snapshot.css
@@ -0,0 +1,115 @@
+.references{
+ background-color: #484043;
+ background-color: rgb(72, 64, 67);
+ background-color: #6E6568;
+ background-color: rgb(110, 101, 104);
+ background-color: #EAD3A8;
+ background-color: rgb(234, 211, 168);
+ background-color: #D23641;
+ background-color: rgb(210, 54, 65);
+ background-color: #FFFFFF;
+ background-color: rgb(255, 255, 255);
+}
+
+#snapshot {
+ width: 100%;
+}
+
+#snapshot .header{
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+#snapshot .header .buttons{
+ margin-top: 10px;
+}
+
+#snapshot h1{
+ color: #D23641;
+ margin: 0;
+}
+
+
+#snapshot .animContainer{
+ width: 100%;
+ background-color: #6E6568;
+}
+
+#snapshot .controls{
+ height: 40px;
+ width: 100%;
+ background-color: #EAD3A8;
+ border-top: 1px solid #484043;
+ position: relative;
+}
+
+#snapshot .controls .snapshotButton{
+ float: left;
+ margin-top: 5px;
+ margin-left: 4px;
+}
+
+#snapshot .controls .slider{
+ width: 100%;
+ height: 2px;
+ background-color: #D23641;
+ cursor: pointer;
+}
+
+#snapshot .controls .thumb{
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ background-color: #D23641;
+ border: 1px solid #FFFFFF;
+ position: absolute;
+ left: -5px;
+ top: -5px;
+ cursor: pointer;
+ pointer-events: none;
+}
+
+#snapshot .controls .frames{
+ float: right;
+ padding: 10px;
+ color: #D23641;
+ font-size: 12px;
+ line-height: 20px;
+}
+
+#snapshot .controls .frames .current{
+ background-color: #484043;
+ display: inline-block;
+ vertical-align: top;
+ min-width: 20px;
+ height: 20px;
+ padding: 0px 2px;
+ text-align: right;
+}
+
+#snapshot .controls .frames .total{
+ display: inline-block;
+ vertical-align: top;
+}
+
+#snapshot .rendersSelection {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0,0,0,.8);
+}
+
+#snapshot .rendersSelection .listContainer{
+ text-align: center;
+}
+
+#snapshot .rendersSelection .topSpace{
+ height: 10%;
+}
+
+#snapshot .rendersSelection .listContainer .generalButton{
+ display: block;
+ margin: auto;
+}
\ No newline at end of file
diff --git a/extension/css/styles.css b/extension/css/styles.css
index 8364e5f..234ab8e 100644
--- a/extension/css/styles.css
+++ b/extension/css/styles.css
@@ -34,6 +34,10 @@
border-radius: .4em;
}
+.rightFloat{
+ float: right;
+}
+
#content {
margin-right:auto;
margin-left:auto;
@@ -121,6 +125,7 @@
.buttonSeparator{
width: 10px;
+ height: 1px;
display: inline-block;
}
diff --git a/extension/index.html b/extension/index.html
index 3388450..8937a59 100644
--- a/extension/index.html
+++ b/extension/index.html
@@ -10,6 +10,7 @@
<link id="hostStyle" rel="stylesheet" href="css/compsRender.css"/>
<link id="hostStyle" rel="stylesheet" href="css/message.css"/>
<link id="hostStyle" rel="stylesheet" href="css/info.css"/>
+<link id="hostStyle" rel="stylesheet" href="css/snapshot.css"/>
<title></title>
</head>
@@ -19,7 +20,9 @@
<div id="content">
<div id='compsSelection'>
<div class='buttons'>
- <button class='generalButton settings'>Info</button>
+ <button class='generalButton rightFloat settings'>Info</button>
+ <div class='buttonSeparator rightFloat'></div>
+ <button class='generalButton rightFloat snapshot'>Snapshot</button>
<button class='generalButton refresh'>Refresh</button>
<div class='buttonSeparator'></div>
<button class='generalButton highlightButton render disabled'>Render</button>
@@ -67,6 +70,35 @@
<button class='generalButton return'>Return</button>
</div>
</div>
+ <div id='snapshot'>
+ <div class='header'>
+ <h1>Select animation</h1>
+ <div class='buttons'>
+ <button class='generalButton rightFloat current'>Current renders</button>
+ <div class='buttonSeparator rightFloat'></div>
+ <button class='generalButton rightFloat browse'>Browse</button>
+ <button class='generalButton return'>Back</button>
+ </div>
+ </div>
+ <div class="animContainer"></div>
+ <div class="controls">
+ <div class="slider"></div>
+ <div class="thumb"></div>
+ <button class="snapshotButton generalButton highlightButton">Take Snapshot</button>
+ <div class="frames">
+ <div class="current" contenteditable="true"></div>
+ <div class="total" >/<span class='value'></span></div>
+ </div>
+ </div>
+ <div class="rendersSelection">
+ <div class="topSpace"></div>
+ <div class="listContainer">
+
+ </div>
+ <div>
+ </div>
+ </div>
+ </div>
<div id='info'>
<div class='buttons'>
<button class='generalButton return'>Back</button>
@@ -117,6 +149,7 @@
<script src="js/controllers/CompRenderController.js"></script>
<script src="js/controllers/messageController.js"></script>
<script src="js/controllers/InfoController.js"></script>
+ <script src="js/controllers/snapshotController.js"></script>
<script src="js/main.js"></script>
diff --git a/extension/js/controllers/CompRenderController.js b/extension/js/controllers/CompRenderController.js
index 822f63f..121efd0 100644
--- a/extension/js/controllers/CompRenderController.js
+++ b/extension/js/controllers/CompRenderController.js
@@ -90,6 +90,7 @@
}
if (messageData.isFinished) {
elem.addClass('rendered');
+ compData.renderData = messageData.data.substr(7);
}
}
@@ -134,9 +135,14 @@
view.hide();
}
+ function getCompositions() {
+ return compositions;
+ }
+
ob.init = init;
ob.show = show;
ob.hide = hide;
+ ob.getCompositions = getCompositions;
return ob;
}());
\ No newline at end of file
diff --git a/extension/js/controllers/CompSelectionController.js b/extension/js/controllers/CompSelectionController.js
index d4f7b49..97957ea 100644
--- a/extension/js/controllers/CompSelectionController.js
+++ b/extension/js/controllers/CompSelectionController.js
@@ -224,12 +224,17 @@
mainController.showView('settings');
}
+ function showSnapshotView() {
+ mainController.showView('snapshot');
+ }
+
function init(csIntfc) {
view = $('#compsSelection');
compsListContainer = view.find('.compsList');
csInterface = csIntfc;
csInterface.addEventListener('bm:compositions:list', updateCompositionsList);
view.find('.refresh').on('click', getCompositionsList);
+ view.find('.snapshot').on('click', showSnapshotView);
renderButton = view.find('.render');
renderButton.on('click', renderCompositions);
view.find('.settings').on('click', showSettings);
diff --git a/extension/js/controllers/snapshotController.js b/extension/js/controllers/snapshotController.js
new file mode 100644
index 0000000..748dbe6
--- /dev/null
+++ b/extension/js/controllers/snapshotController.js
@@ -0,0 +1,203 @@
+/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */
+/*global $, alertData, successData, bodymovin, mainController, compRenderController, messageController */
+var snapshotController = (function () {
+ 'use strict';
+ var ob = {}, view, csInterface, anim, header, controls, current, animContainer, slider, thumb, snapshotButton, $window, showing = false;
+ var totalFrames, currentFrame, sliderWidth, rendersSelection, listContainer;
+
+ function showSelection() {
+ mainController.showView('selection');
+ }
+
+ function showControls() {
+ controls.find('.snapshotButton').show();
+ controls.find('.frames .total').show();
+ current.show();
+ }
+
+ function hideControls() {
+ controls.find('.snapshotButton').hide();
+ controls.find('.frames .total').hide();
+ current.hide();
+ }
+
+ function browseFiles() {
+ var eScript = 'bm_main.browseFile()';
+ csInterface.evalScript(eScript);
+ }
+
+ function updateControls(origin) {
+ if (origin !== 'input') {
+ controls.find('.frames .current').html(currentFrame);
+ }
+ if (anim) {
+ anim.goToAndStop(currentFrame + 1, true);
+ }
+ var x = (currentFrame / totalFrames) * sliderWidth;
+ thumb.css('left', x - 5 + 'px');
+ }
+
+ function loadAnimation(data) {
+ var jsonData = JSON.parse(data);
+ totalFrames = jsonData.animation.totalFrames;
+ controls.find('.frames .total .value').html(totalFrames);
+ currentFrame = 1;
+ if (anim) {
+ anim.destroy();
+ }
+ updateControls();
+ var params = {
+ animType: 'svg',
+ wrapper: animContainer[0],
+ loop: false,
+ autoplay: false,
+ prerender: true,
+ animationData: jsonData
+ };
+ anim = bodymovin.loadAnimation(params);
+ showControls();
+ }
+
+ function addSelectionListener(elem, data) {
+ elem.on('click', function () {
+ rendersSelection.hide();
+ loadAnimation(data.renderData);
+ });
+ }
+
+ function displayCurrentRenders() {
+ var compositions = compRenderController.getCompositions();
+ if (!compositions || compositions.length === 0) {
+ messageController.showMessage({type: 'alert', message: 'You have no recent renders.\n Try browsing your files'});
+ } else if (compositions.length === 1) {
+ loadAnimation(compositions[0].renderData);
+ } else {
+ rendersSelection.show();
+ listContainer.empty();
+ var i, len = compositions.length;
+ var li;
+ for (i = 0; i < len; i += 1) {
+ li = $('<button class="generalButton">');
+ li.html(compositions[i].name);
+ listContainer.append(li);
+ addSelectionListener(li, compositions[i]);
+ }
+ }
+ }
+
+ function handleFilePath(ev) {
+ loadAnimation(ev.data.substr(7));
+ }
+
+ function handleWindowResize() {
+ if (!showing) {
+ return;
+ }
+ animContainer.css('height', $window.height() - 2 - header.outerHeight() - controls.outerHeight() + 'px');
+ sliderWidth = slider.width();
+
+ }
+
+ function frameChangeHandler() {
+ var num = parseInt(current.html(), 10);
+ if (isNaN(num)) {
+ return;
+ }
+ if (num < 0) {
+ num = 0;
+ } else if (num >= totalFrames) {
+ num = totalFrames - 1;
+ }
+ currentFrame = num;
+ updateControls('input');
+ }
+
+ function updateSliderValue(pageX) {
+ var x = pageX - slider.offset().left;
+ var perc = x / sliderWidth;
+ if (perc < 0) {
+ perc = 0;
+ } else if (perc > 1) {
+ perc = 1;
+ }
+ currentFrame = Math.round(perc * totalFrames);
+ updateControls();
+ }
+
+ function sliderMove(ev) {
+ updateSliderValue(ev.pageX);
+ }
+
+ function sliderUp(ev) {
+ $window.off('mousemove', sliderMove);
+ $window.off('mouseup', sliderUp);
+ }
+
+ function sliderDown(ev) {
+ $window.on('mouseup', sliderUp);
+ $window.on('mousemove', sliderMove);
+ updateSliderValue(ev.pageX);
+ }
+
+ function addSliderListeners() {
+
+ slider = controls.find('.slider');
+ thumb = controls.find('.thumb');
+ slider.on('mousedown', sliderDown);
+ }
+
+ function saveSnapshot() {
+ var svgData = animContainer[0].innerHTML;
+ var result = window.cep.fs.showSaveDialogEx('Select location', '', ['*.svg'], 'snapshot.svg');
+ var targetFilePath = result.data;
+ var writeResult = window.cep.fs.writeFile(targetFilePath, svgData);
+ if (0 !== writeResult.err) {
+ console.log('faillled');
+ }
+ }
+
+ function init(csIntfc) {
+ csInterface = csIntfc;
+ view = $('#snapshot');
+ view.hide();
+ view.find('.buttons .current').on('click', displayCurrentRenders);
+ view.find('.buttons .browse').on('click', browseFiles);
+ view.find('.return').on('click', showSelection);
+ animContainer = view.find('.animContainer');
+ controls = view.find('.controls');
+ controls.find('.snapshotButton').on('click', saveSnapshot);
+ current = controls.find('.frames .current');
+ current.on('input', frameChangeHandler);
+ header = view.find('.header');
+ rendersSelection = view.find('.rendersSelection');
+ listContainer = rendersSelection.find('.listContainer');
+ rendersSelection.hide();
+ $window = $(window);
+ csInterface.addEventListener('bm:file:path', handleFilePath);
+ $(window).on('resize', handleWindowResize);
+ addSliderListeners();
+ hideControls();
+ }
+
+ function show() {
+ if (!showing) {
+ showing = true;
+ view.show();
+ handleWindowResize();
+ }
+ }
+
+ function hide() {
+ if (showing) {
+ showing = false;
+ view.hide();
+ slider.off('mouseup', sliderUp);
+ slider.off('mousemove', sliderMove);
+ }
+ }
+
+ ob.show = show;
+ ob.hide = hide;
+ ob.init = init;
+ return ob;
+}());
\ No newline at end of file
diff --git a/extension/js/main.js b/extension/js/main.js
index 8824531..ef11098 100644
--- a/extension/js/main.js
+++ b/extension/js/main.js
@@ -1,5 +1,5 @@
/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */
-/*global $, window, location, CSInterface, SystemPath, themeManager, compSelectionController, compRenderController, messageController, infoController*/
+/*global $, window, location, CSInterface, SystemPath, themeManager, compSelectionController, compRenderController, messageController, infoController, snapshotController*/
var mainController = (function () {
'use strict';
@@ -45,6 +45,8 @@
messageController.init(csInterface);
mainViews.push({id: 'settings', controller: infoController});
infoController.init(csInterface);
+ mainViews.push({id: 'snapshot', controller: snapshotController});
+ snapshotController.init(csInterface);
loadJSX('initializer.jsx');
showView('selection');
diff --git a/extension/jsx/hostscript.jsx b/extension/jsx/hostscript.jsx
index ccec7c0..5a518b4 100644
--- a/extension/jsx/hostscript.jsx
+++ b/extension/jsx/hostscript.jsx
@@ -3,6 +3,24 @@
var bm_main = (function () {
'use strict';
var ob = {};
+
+ function browseFile() {
+ //openDlg()
+ var f = new File(Folder.desktop.absoluteURI);
+ var openFileData = f.openDlg();
+ if (openFileData !== null) {
+ var file = new File(openFileData.absoluteURI);
+ if (file.open('r')) {
+ var reading = file.read();
+ reading = '__PFX__' + reading;
+ bm_eventDispatcher.sendEvent('bm:file:path', reading);
+ }
+
+ }
+
+ }
+
+ ob.browseFile = browseFile;
return ob;
}());
\ No newline at end of file
diff --git a/extension/jsx/renderManager.jsx b/extension/jsx/renderManager.jsx
index ac70929..fd54bc7 100644
--- a/extension/jsx/renderManager.jsx
+++ b/extension/jsx/renderManager.jsx
@@ -4,7 +4,7 @@
'use strict';
var ob = {}, pendingLayers = [], pendingComps = [], destinationPath, currentCompID, totalLayers, currentLayer, currentCompSettings;
-
+
function verifyTrackLayer(layerData, comp, pos) {
var nextLayerInfo = comp.layers[pos + 2];
if (nextLayerInfo.isTrackMatte) {
@@ -104,7 +104,7 @@
function saveData() {
bm_eventDispatcher.sendEvent('bm:render:update', {type: 'update', message: 'Saving data ', compId: currentCompID, progress: 1});
bm_dataManager.saveData(ob.renderData.exportData, destinationPath, currentCompSettings);
- bm_eventDispatcher.sendEvent('bm:render:update', {type: 'update', message: 'Render finished ', compId: currentCompID, progress: 1, isFinished: true});
+ bm_eventDispatcher.sendEvent('bm:render:update', {type: 'update', message: 'Render finished ', compId: currentCompID, progress: 1, isFinished: true, data: '__PFX__' + string});
reset();
bm_compsManager.renderComplete();
}