Copy link to clipboard
Copied
I have some trouble with this little script
The problem is that if I put blur at 10 and then return to 0
it does not take the blur
where is wrong?
var box = new Window('dialog', "blur");
box.panel = box.add('panel', undefined, "Gaussian Blur");
box.panel.group = box.panel.add('group', undefined );
box.panel.group.orientation='row';
box.panel.group.text1 = box.panel.group.add('statictext', undefined, "radius:");
var slider = box.panel.group.add("slider",undefined, 0, 0, 255);
var value = box.panel.group.add('edittext', undefined, "0");
box.panel.group2 = box.panel.add('group', undefined );
box.panel.group2.orientation='row';
box.panel.group2.okBtn = box.panel.group2.add('button',undefined, "ok", {name:'ok'});
box.panel.group2.closeBtn = box.panel.group2.add('button',undefined, "cancel", {name:'cancel'});
slider.onChanging = function () {
value.text = slider.value;
var r = value.text;
blur(r);
app.refresh();
}
value.onChanging = function () {
slider.value = value.text;
var r = slider.value;
blur(r);
app.refresh();
}
box.panel.group2.okBtn.onClick = function(){
slider.onChanging();
box.close();
}
box.panel.group2.closeBtn.onClick = function(){
box.close();
}
box.center();
box.show()
function blur(r){
var idGsnB = charIDToTypeID( "GsnB" );
var desc14 = new ActionDescriptor();
var idRds = charIDToTypeID( "Rds " );
var idPxl = charIDToTypeID( "#Pxl" );
desc14.putUnitDouble( idRds, idPxl, r );
executeAction( idGsnB, desc14, DialogModes.NO );
}
Try this code
...var curr_blur = 0
var box = new Window('dialog', "blur");
with (box.add('panel', undefined, "Gaussian Blur"))
{
with (add('group'))
{
orientation='row';
add('statictext', undefined, "radius:");
var slider = add("slider",undefined, 0, 0, 255);
slider.preferredSize.width = 256;
var value = add('edittext', undefined, curr_blur);
value.preferredSize.width = 40;
}
with (add('group'))
{
orientatio
Copy link to clipboard
Copied
You do not seem to have included any undo or return to a history state, so what do you expect?
Copy link to clipboard
Copied
When creating a dialog that is supposed to work on an image while still being open one needs to keep in mind whether the operations have an accumulative effect and act accordingly; but also keep in mind that if the dialog gets canceled the operations may be expected to get undone.
Copy link to clipboard
Copied
Thanks for the answers
I tried adding historystate and improved a bit
but it is not good yet?
var box = new Window('dialog', "blur");
box.panel = box.add('panel', undefined, "Gaussian Blur");
box.panel.group = box.panel.add('group', undefined );
box.panel.group.orientation='row';
box.panel.group.text1 = box.panel.group.add('statictext', undefined, "radius:");
var slider = box.panel.group.add("slider",undefined, 0, 0, 255);
var value = box.panel.group.add('edittext', undefined, "0");
box.panel.group2 = box.panel.add('group', undefined );
box.panel.group2.orientation='row';
box.panel.group2.okBtn = box.panel.group2.add('button',undefined, "ok", {name:'ok'});
box.panel.group2.closeBtn = box.panel.group2.add('button',undefined, "cancel", {name:'cancel'});
var doc = app.activeDocument;
var lay = doc.activeLayer;
var currentStatus = doc.activeHistoryState;
slider.onChanging = function () {
doc.activeHistoryState = currentStatus;
value.text = slider.value;
var r = value.text;
blur(r);
app.refresh();
}
value.onChanging = function () {
doc.activeHistoryState = currentStatus;
slider.value = value.text;
var r = slider.value;
blur(r);
app.refresh();
}
box.panel.group2.okBtn.onClick = function(){
slider.onChanging();
box.close();
}
box.panel.group2.closeBtn.onClick = function(){
box.close();
}
box.center();
box.show()
function blur(r){
var idGsnB = charIDToTypeID( "GsnB" );
var desc14 = new ActionDescriptor();
var idRds = charIDToTypeID( "Rds " );
var idPxl = charIDToTypeID( "#Pxl" );
desc14.putUnitDouble( idRds, idPxl, r );
executeAction( idGsnB, desc14, DialogModes.NO );
}
Copy link to clipboard
Copied
but it is not good yet?
How so?
Do you mean that you have not included a return to the history state at cancelling?
Copy link to clipboard
Copied
If you catch the result of
box.show()
as a variable you can use that to determine if »OK« or »Cancel« were clicked and have the Script proceed accordingly.
Copy link to clipboard
Copied
See also Slider color balance! as an example of a similar issue, i.e. dealing with cumulative effects.
Copy link to clipboard
Copied
According to your first code put in line 16th:
function ahS() {
aD.activeHistoryState = (hS = (aD = activeDocument).historyStates)[hS.length - 2]
}
while between lines 17 & 18 and 35 & 36:
ahS()
Copy link to clipboard
Copied
It's not good for me
maybe I put your scripts wrong
can you place them in the starting script?
Copy link to clipboard
Copied
box.panel.group2.closeBtn = box.panel.group2.add('button',undefined, "cancel", {name:'cancel'});
function ahS() {
aD.activeHistoryState = (hS = (aD = activeDocument).historyStates)[hS.length - 2]
}
slider.onChanging = function () {
slider.onChanging = function () {
ahS()
value.text = slider.value;
box.panel.group2.closeBtn.onClick = function(){
ahS()
box.close();
You may also put ahS() inside value.onChanging = function()
Copy link to clipboard
Copied
I tried it but it does not work
var box = new Window('dialog', "blur");
box.panel = box.add('panel', undefined, "Gaussian Blur");
box.panel.group = box.panel.add('group', undefined );
box.panel.group.orientation='row';
box.panel.group.text1 = box.panel.group.add('statictext', undefined, "radius:");
var slider = box.panel.group.add("slider",undefined, 0, 0, 255);
var value = box.panel.group.add('edittext', undefined, "0");
box.panel.group2 = box.panel.add('group', undefined );
box.panel.group2.orientation='row';
box.panel.group2.okBtn = box.panel.group2.add('button',undefined, "ok", {name:'ok'});
box.panel.group2.closeBtn = box.panel.group2.add('button',undefined, "cancel", {name:'cancel'});
function ahS() {
aD.activeHistoryState = (hS = (aD = activeDocument).historyStates)[hS.length - 2]
}
slider.onChanging = function () {
ahS()
value.text = slider.value;
var r = value.text;
blur(r);
app.refresh();
}
value.onChanging = function () {
ahS()
slider.value = value.text;
var r = slider.value;
blur(r);
app.refresh();
}
box.panel.group2.okBtn.onClick = function(){
slider.onChanging();
box.close();
}
box.panel.group2.closeBtn.onClick = function(){
ahS()
box.close();
}
box.center();
box.show()
function blur(r){
var idGsnB = charIDToTypeID( "GsnB" );
var desc14 = new ActionDescriptor();
var idRds = charIDToTypeID( "Rds " );
var idPxl = charIDToTypeID( "#Pxl" );
desc14.putUnitDouble( idRds, idPxl, r );
executeAction( idGsnB, desc14, DialogModes.NO );
}
Copy link to clipboard
Copied
I copied this code you just pasted and tried it in CS6 EXTENDED and CC2018 (19.1.2) - in both versions that worked very well.
Copy link to clipboard
Copied
Kukurykus ha scritto
I copied this code you just pasted and tried it in CS6 EXTENDED and CC2018 (19.1.2) - in both versions that worked very well.
I use mac with high sierra
maybe this is the problem?
Copy link to clipboard
Copied
I have some trouble with this little script
The problem is that if I put blur at 10 and then return to 0
it does not take the blur
That has no sense, as with your first script when I changed blur to 10 and then back to 0, then blur level was still at 10 level.
With modified by me script now when you put pointer at 10 and again at 0, then blur effect is reverted, so the blur level is 0.
I guess I know what you want but there's mistake in your question. That should be logically asked: 'it does not take the blur'
It might be because of 'high sierra' - Many people reported some bugs about at: Photoshop Family Customer Community
Copy link to clipboard
Copied
del
Copy link to clipboard
Copied
I tested it, there was lack of one line:
currentStatus = (doc = activeDocument).activeHistoryState;
currentStatus = (doc = activeDocument)
.activeHistoryState; var active = false
slider.onChanging = function () {
if (active) return
active = true
doc.activeHistoryState = currentStatus
value.text = slider.value
var r = value.text
blur(r)
app.refresh()
active = false
}
Edit: I didn't see you deleted it meantime, should I delete it too?
Copy link to clipboard
Copied
There everything does not work right. Maybe later I'll see what I can do.
Copy link to clipboard
Copied
Try this code
var curr_blur = 0
var box = new Window('dialog', "blur");
with (box.add('panel', undefined, "Gaussian Blur"))
{
with (add('group'))
{
orientation='row';
add('statictext', undefined, "radius:");
var slider = add("slider",undefined, 0, 0, 255);
slider.preferredSize.width = 256;
var value = add('edittext', undefined, curr_blur);
value.preferredSize.width = 40;
}
with (add('group'))
{
orientation='row';
spacing = 70;
var okBtn = add('button',undefined, "ok", {name:'ok'});
okBtn.preferredSize.width = 100;
var closeBtn = add('button',undefined, "cancel", {name:'cancel'});
closeBtn.preferredSize.width = 100;
}
}
var ok = false;
var doc = app.activeDocument;
var currentStatus = doc.activeHistoryState;
slider.onChange = function ()
{
value.text = slider.value.toFixed(0);
value.onChanging();
}
slider.onChanging = function ()
{
value.text = slider.value.toFixed(0);
}
value.onChanging = function ()
{
var n = Number(value.text);
if (isNaN(n)) { beep(); return; }
curr_blur = n;
slider.value = curr_blur;
box.opacity = 0.7;
doc.activeHistoryState = currentStatus;
blur(curr_blur);
app.refresh();
box.opacity = 1.0;
}
okBtn.onClick = function()
{
ok = true;
box.close();
}
closeBtn.onClick = function()
{
box.close();
}
function key_handle(e) // in CC2018 does not work correctly, may not be use
{
if (!value.active) return;
switch (e.keyIdentifier)
{
case "U+0030":
case "U+0031":
case "U+0032":
case "U+0033":
case "U+0034":
case "U+0035":
case "U+0036":
case "U+0037":
case "U+0038":
case "U+0039":
case "U+002E":
case "U+0008":
case "U+001B":
case "U+007F":
return;
default:
//alert(e.keyIdentifier)
e.preventDefault();
beep();
return;
}
}
box.addEventListener ("keydown", key_handle, false); // in CC2018 does not work correctly, may not be use
box.center();
box.show()
if (!ok) doc.activeHistoryState = currentStatus;
function blur(r){
var idGsnB = charIDToTypeID( "GsnB" );
var desc14 = new ActionDescriptor();
var idRds = charIDToTypeID( "Rds " );
var idPxl = charIDToTypeID( "#Pxl" );
desc14.putUnitDouble( idRds, idPxl, r );
executeAction( idGsnB, desc14, DialogModes.NO );
}