《零基礎(chǔ)的 PhotoShop CEP 6 開發(fā)教程》系列目錄
「 0 」目錄
「 1 」配置開發(fā)環(huán)境
「 2 」CEP 文件結(jié)構(gòu)
「 3 」CEP 的運(yùn)行機(jī)制
「 4 」Hello World !
「 5 」事件(EVENTS)
「 6 」調(diào)用 JSX 并傳遞信息
「 7 」UI - HTML 開發(fā)的一些細(xì)節(jié)
「 8 」API - 文件讀寫與二進(jìn)制數(shù)據(jù)
「 9 」簽名打包與 ZXPSignCmd
「 X 」CEP 更新到 6.1版了
前面的文章已經(jīng)介紹了很多 CEP 的基礎(chǔ)概念和方法,接下了會(huì)說一些關(guān)于 UI 的事情,首先要說的就是 CEP 擴(kuò)展面板的運(yùn)行問題。
保持持久運(yùn)行
CEP 擴(kuò)展面板默認(rèn)是不會(huì)持久運(yùn)行的,也就是說只要面板被隱藏?cái)U(kuò)展就會(huì)被關(guān)閉,面板再打開就會(huì)重新載入擴(kuò)展,相當(dāng)于瀏覽網(wǎng)頁時(shí),把網(wǎng)頁最小化就會(huì)重載網(wǎng)頁一樣,這往往是我們不想要的,所以我們這時(shí)就需要把我們的擴(kuò)展持久化,讓它被隱藏時(shí)只是不顯示而已,不會(huì)重新載入。

讓我們的擴(kuò)展保持持久運(yùn)行,需要發(fā)送一個(gè) com.adobe.PhotoshopPersistent 事件,告訴宿主我們的擴(kuò)展需要持久化運(yùn)行:
var cs= new CSInterface();
var event = new CSEvent();//創(chuàng)建一個(gè)事件
event.type = "com.adobe.PhotoshopPersistent"; //注冊(cè)持久化運(yùn)行事件
event.scope = "APPLICATION";
event.extensionId = cs.getExtensionID(); // 我們的擴(kuò)展 ID
cs.dispatchEvent(event); //發(fā)送事件讓宿主持久化運(yùn)行我們的擴(kuò)展
界面顏色
我們都知道,PhotoShop 可以設(shè)置界面外觀的顏色,而我們的擴(kuò)展是網(wǎng)頁,它不能自動(dòng)隨著界面顏色改變而改變自己的顏色,這需要我們通過 JavaScript 取得 PhotoShop 界面顏色,另外還有捕捉界面顏色改變的事件,讓 PhotoShop 界面顏色改變時(shí)我們的擴(kuò)展也能跟著改變顏色。

獲得界面顏色信息
通過訪問 getHostEnvironment()方法獲取宿主的信息對(duì)象,其中有一個(gè)子對(duì)象 .appSkinInfo 包含了宿主的界面外觀信息:
var cs = new CSInterface();
var skIinInfo = cs.getHostEnvironment().appSkinInfo;
skIinInfo.panelBackgroundColor.color.red // 面板背景色 RGBA 值: R
skIinInfo.panelBackgroundColor.color.green // 面板背景色 RGBA 值: G
skIinInfo.panelBackgroundColor.color.blue // 面板背景色 RGBA 值: B
skIinInfo.panelBackgroundColor.color.alpha // 面板背景色 RGBA 值: A (透明度)
| 對(duì)象 | 內(nèi)容 |
|---|---|
panelBackgroundColor |
面板背景顏色 |
appBarBackgroundColor |
應(yīng)用工具條背景色 |
panelBackgroundColorSRGB |
面板背景顏色 在 sRGB 色彩空間的值 |
appBarBackgroundColorSRGB |
應(yīng)用工具條背景色 在 sRGB 色彩空間的值 |
baseFontFamily |
界面字體類型 |
baseFontSize |
界面字體尺寸 |
界面顏色改變事件
通過捕捉 Type 為 "com.adobe.csxs.events.ThemeColorChanged" 的事件就可以捕獲界面顏色改變了,同時(shí) CSInterface 有一個(gè)常量:CSInterface.THEME_COLOR_CHANGED_EVENT ,它們的作用是一樣的,要注意的是這個(gè)事件不會(huì)向回調(diào)函數(shù)傳遞任何信息。
var cs = new CSInterface();
cs.addEventListener(CSInterface.THEME_COLOR_CHANGED_EVENT, tChanged);
function tChanged(event)
{
var cs = new CSInterface() ;
var skIinInfo = cs.getHostEnvironment().appSkinInfo;
}