月別2020年12月 一覧

UXPに備えてモダンなJSの書き方に慣れる(アロー関数)

PhotoshopにUXPがついに来ましたが今後ECMA3ベースのjsxからUXPに移行するにあたり最新のjsの書き方がAdobe scriptを書く上でスタンダードになると思います。しかし今まで古い書き方に慣れていたのにいきなり新しい書き方に慣れようにも移行しづらいと思います。実際ECMA3からECMA2015の進化は飛躍的な進化でしたしその後のECMA2016,ECMA2017と年々さらに進化しています。もしくはECMA2015の進化影に隠れがちですがその前にECMA5の進化もありました。Adobe jsxはこのECMA5すらもサポートしていません。それくらいECMA3は古いです。今web

Read more

Photoshop UXPのmanifest.jsonを簡単に解説

Photoshop uxpのmanifest.jsonを簡単に触ってわかったことを自分へのメモがわりも含めて少し解説します。 CEPで言う所のmanifest.xmlのようにパネルのサイズや挙動を管理するのがこのmanifest.jsonになります。尚且つ今回UXPではjs内でのuxpモジュールのentrypointsメソッドも利用してパネルの挙動、メニューから呼び起こす関数等も管理します。まず上部のメニューとプラグインパネルのコマンドから実行する関数を設定します。これらの関数はパネルを通さなくても関数を実行できるので簡単なコードをたまに実行したい時などにjsxのように使用できます。manif

Read more

Photoshop UXP触ってみた

CEPの次なるplugin開発システムであるUXP(Unified Extensibility Platform)がPhotoshop2021から搭載されました。CEPとjsxはいつかはUXPに移行することになるらしいですが今すぐ使用できなくなるわけではないらしいです。(実際PhotoshopのUXP APIも開発途上な感じ)ベースがJavascript V8でアプリケーションの操作も同じV8の環境で実行できるのでCEPみたいにパネルとjsxで通信する必要もなくなます。将来的には動作もjsxよりかなり高速になるとは書いてありました。こちらを参照 とりあえず基本的な情報に軽く触れたいと思います。

Read more

loading画面を作成してボタン等の反応を一時的に止める Adobe Illustrator Extensionの開発 脱Hello Worldその14

最後になりました。今回おまけ的にloading画面を作ります。loadingの最中はあらゆる要素の反応を無効にしたいので全ての画面をload画面で覆います。これを図的に表すとこんな感じでしょうか。 立体的な要素の指定はz-indexを行います。詳しくはこちらも参照してください。 まずhtmlでload要素を配置します。 load要素はcontainerには必ず含めないでください。このload要素はcontainerと独立した要素なので。そして以下、css。 円がくるくる回転するcssです。ベースとなっているload要素にz-index:5と高めの要素を指定しています。 このload要素ですが普

Read more

Adobe Illustrator Extensionの開発 脱Hello Worldその13

前回に続きパネルのjsとjsxの通信についての記事です。 ヘッドの情報を書き込む機能から。ただこれは前回のガイドを引く機能のようにフォームの情報をjsxに渡して実行するだけなので前回とあまり変わりません。 html js データを書き込む情報を日付とパスアイテムの長さから選べますがどちらとも選択されていない場合は書き込む情報が無くなるのでアラートを出して処理を中止します。 ヘッド情報を書き込む関数です。hostscript.jsxに追加します。パネルの情報によって書き込む内容を変えます。(と言ってもチェックボックスのオン、オフ程度の事ですが)最後に関数分岐用のswitch構文でmakeHead

Read more

js->jsxの通信部分のデバッグ Adobe Illustrator Extensionの開発 脱Hello Worldその12

jsからjsxに通信する場合、jsx内でエラーが起きても具体的にどこで起きているのか分かりにくい、$.write関数(console.logのjsx版)が使えないなどかなり不便です。これをもう少しやりやすくします。とりあえずVSCodeでデバッグするためにExtendScript Debuggerを使用します。CEPの開発をしながらjsxのデバッグもしたいのでvscodeのlaunch.jsonをCEPフォルダーの直下に作ります。 launch.json CEPのフォルダーからjsx内のjsxのテストを実行できるように“program“を “${file}&

Read more

Adobe Illustrator Extensionの開発 脱Hello Worldその11

今回からjsxとパネルのjsで通信します。main.jsから通信する前に通信の対象となるjsxを作ります。最初はアクティブなアートボードに対してガイドを中央に引くjsxを動かすjsを書きます。singleProcessというフォルダにsetCenterGuide.jsxを作ってその中にガイドを引くコードを書きます。 今回の通信は特にフォームの数値を渡したりするわけではないので単純にガイドを引くだけのシンプルなjsxです。 setCenterボタンを押すとcenterGuide関数が実行されるようにイベントを登録。関数の引数にjsxのファイル名、singleProcessを渡します。事前に準備し

Read more

Adobe Illustrator Extensionの開発 脱Hello Worldその10

ついにmain.jsに触ります。完成形が以下 今回Node.jsのネイティブモジュールを使用するため冒頭でfsとpathをrequireしてます。更に各種htmlのidタグをdocument.getElementByIdで取得。extensionRoot変数はご存知の通りjsxフォルダーのパスです。 本格的に解説に入る前にnav.jsの関数を実行した時に書いたコードをもう一度確認します。 冒頭の変数を頭に入れつつまずウインドウが開いた時に実行する関数、initから解説します。 非同期処理が入るのでasync関数として定義しています。ここで行っているのは。 jsxの共通の関数等を外部ファイルとし

Read more