Welcome Dialog

Welcome to the Community!

We have a brand new look! Take a tour with us and explore the latest updates on Adobe Support Community.


Toggle “Sample Current Layer” option of eyedroppper

Explorer ,
Aug 06, 2021 Aug 06, 2021

Copy link to clipboard

Copied

I'm trying to create a script to toogle Eyedropper Tool's Sample option between "Current Layer" and "All Layers".

 

I search a bit and only see suggestions telling me to create two tool presets and swtich between them. It works, but I'd like to make it a bit more powerful: a single script/button that changes Eyedropper Tool's option, while keeping the Brush Tool as my active tool. Is it possible?

TOPICS
Actions and scripting

Views

185

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Adobe Community Professional , Aug 06, 2021 Aug 06, 2021
#target photoshop var s2t = stringIDToTypeID; (ref = new ActionReference()).putProperty(s2t('property'), p = s2t('tool')); ref.putEnumerated(s2t('application'), s2t('ordinal'), s2t('targetEnum')); var cTool = executeActionGet(ref).getEnumerationType(p); (selectTool = function (tool) { (r = new ActionReference()).putClass(tool); (d = new ActionDescriptor()).putReference(s2t('target'), r); executeAction(s2t('select'), d, DialogModes.NO); })(s2t('eyedropperTool')); (d = new ActionDe...

Likes

Translate

Translate
Adobe Community Professional ,
Aug 06, 2021 Aug 06, 2021

Copy link to clipboard

Copied

 

#target photoshop
var s2t = stringIDToTypeID;

(ref = new ActionReference()).putProperty(s2t('property'), p = s2t('tool'));
ref.putEnumerated(s2t('application'), s2t('ordinal'), s2t('targetEnum'));
var cTool = executeActionGet(ref).getEnumerationType(p);

(selectTool = function (tool) {
    (r = new ActionReference()).putClass(tool);
    (d = new ActionDescriptor()).putReference(s2t('target'), r);
    executeAction(s2t('select'), d, DialogModes.NO);
})(s2t('eyedropperTool'));

(d = new ActionDescriptor()).putInteger(p = s2t('eyeDropperSampleSheet'),
    executeActionGet(ref).getObjectValue(s2t('currentToolOptions')).getInteger(p) ? 0 : 1);
(r = new ActionReference()).putClass(s2t('eyedropperTool'));
(d1 = new ActionDescriptor()).putReference(s2t('target'), r);
d1.putObject(s2t('to'), s2t('target'), d);
executeAction(s2t('set'), d1, DialogModes.NO);

selectTool(cTool)

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

@jazz-y – Great job as always! I added a couple of alerts to your code for visibility, however, I'm guessing that this may "interrupt the painting flow".

 

#target photoshop
var s2t = stringIDToTypeID;

(ref = new ActionReference()).putProperty(s2t('property'), p = s2t('tool'));
ref.putEnumerated(s2t('application'), s2t('ordinal'), s2t('targetEnum'));
var cTool = executeActionGet(ref).getEnumerationType(p);

(selectTool = function (tool) {
    (r = new ActionReference()).putClass(tool);
    (d = new ActionDescriptor()).putReference(s2t('target'), r);
    executeAction(s2t('select'), d, DialogModes.NO);
})(s2t('eyedropperTool'));

(d = new ActionDescriptor()).putInteger(p = s2t('eyeDropperSampleSheet'),
    executeActionGet(ref).getObjectValue(s2t('currentToolOptions')).getInteger(p) ? 0 : 1);
(r = new ActionReference()).putClass(s2t('eyedropperTool'));
(d1 = new ActionDescriptor()).putReference(s2t('target'), r);
d1.putObject(s2t('to'), s2t('target'), d);
executeAction(s2t('set'), d1, DialogModes.NO);

// Alerts //
if (executeActionGet(ref).getObjectValue(s2t('currentToolOptions')).getInteger(p) === 0) {
    alert('Sample from "All Layers" selected');
}
else if (executeActionGet(ref).getObjectValue(s2t('currentToolOptions')).getInteger(p) === 1) {
    alert('Sample from "Current Layer" selected');
}
////////////

selectTool(cTool)

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

I was already afraid that switching between tools would be too slow and would interrupt drawing 🙂 Although on my computer the script runs in about 200 milliseconds

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

It was fast enough for me, but it was very easy to forget which mode the eye dropper was in when the brush was active. In this case, my suggested cure may be worse than the disease!

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

Instead of alerts, show palette with refresh(). That's going to show information for 1 second.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

That is much better!

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

Thank you very much! I think it's fast enough. The latency causes by switching tools is barely noticable.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 07, 2021 Aug 07, 2021

Copy link to clipboard

Copied

 

(ref = new ActionReference()).putProperty(s2t('property'), p = s2t('tool'));
ref.putEnumerated(s2t('application'), s2t('ordinal'), s2t('targetEnum'));
var cTool = executeActionGet(ref).getEnumerationType(p);

 

 

var cTool = currentTool;

 

-----------------------------------------------------------

 

 

(selectTool = function (tool) {
    (r = new ActionReference()).putClass(tool);
    (d = new ActionDescriptor()).putReference(s2t('target'), r);
    executeAction(s2t('select'), d, DialogModes.NO);
})(s2t('eyedropperTool'));

selectTool(cTool)

 

 

currentTool = "eyedropperTool";

 

currentTool = cTool ;

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 08, 2021 Aug 08, 2021

Copy link to clipboard

Copied

Hmm I knew it tells you the current tool, but last time I tried it to set some tool with this method it failed. Maybe I did some typo that time. I see now in docs it is also for writing.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 08, 2021 Aug 08, 2021

Copy link to clipboard

Copied

What code doesn't work for you?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 08, 2021 Aug 08, 2021

Copy link to clipboard

Copied

I was sure that currentTool is read-only 🙂

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Aug 08, 2021 Aug 08, 2021

Copy link to clipboard

Copied

LATEST

I can't remember what tool I used when it failed, but now I'm sure it's not read-only.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines