Macでは一部機能が使えなくなるスクリプトについて
- July 9, 2024
- 1 reply
- 469 views
スクリプトのコードが書けないためチャットGPTを使って、以下の「テキストレイヤーを追加するスクリプト」を作ってもらったのですが、
・カーソルで範囲選択している場合は、その範囲内にある文字列のみをテキストレイヤーとして追加する
という機能が、Windowsならちゃんと機能するのに、Macだと範囲選択しても常にテキスト入力欄にあるすべての文字が追加されてしまいます。
WindowsとMacで範囲選択の定義か何かに違いがあるのでしょうか?Macでも選択範囲の文字列のみテキストレイヤーとして追加するには、どうすればよいのでしょうか?
※添付画像は、Windowsで起動してうまくできているパターンです。Macではこのようにできません。
おそらく、範囲選択した部分に限定するという機能の記述は、以下の「selectedText・・・」部分が該当すると思っていますが、この点をどう修正すれば良いのかわからない、という状況です。
<該当箇所>(後述スクリプトより抜粋)--------------------------------
// 「テキスト追加」ボタンの定義と追加
var addButton = buttonGroup.add("button", undefined, "追加");
addButton.onClick = function() {
var selectedText = inputField.textselection || inputField.text;
addTextLayer(selectedText);
};
------------------------------------------------------------------------------------
<スクリプト>------------------------------------
(function(parent) {
var mainScriptName = "test";
// 指定したテキストを保存する関数
function saveText(text) {
app.settings.saveSetting(mainScriptName, "tabText", File.encode(text));
}
// 保存されているテキストを取得する関数
function getSavedText() {
return app.settings.haveSetting(mainScriptName, "tabText") ?
File.decode(app.settings.getSetting(mainScriptName, "tabText")) :
"";
}
// メインパネルの作成
var mainPanel = (parent instanceof Panel) ? parent : new Window("palette", "メモパネル", undefined, {
resizeable: true,
});
// ボタン用のグループの作成
var buttonGroup = mainPanel.add("group");
// 「テキスト追加」ボタンの定義と追加
var addButton = buttonGroup.add("button", undefined, "追加");
addButton.onClick = function() {
var selectedText = inputField.textselection || inputField.text;
addTextLayer(selectedText);
};
// テキスト入力フィールドの追加
var inputField = mainPanel.add("edittext", undefined, getSavedText(), {
multiline: true,
});
inputField.alignment = ["fill", "fill"];
inputField.onChange = function() {
saveText(this.text);
};
// パネルのレイアウト調整
mainPanel.layout.layout();
mainPanel.onResize = function() {
mainPanel.layout.resize();
}
// パネルの表示
if (mainPanel instanceof Window) {
mainPanel.center();
mainPanel.show();
}
// テキストレイヤーを追加する関数
function addTextLayer(text) {
var comp = app.project.activeItem;
if (!(comp instanceof CompItem)) {
alert("コンポジションをアクティブにしてください");
return null;
}
var selectedLayer = comp.selectedLayers.length === 1 ? comp.selectedLayers[0] : null;
app.beginUndoGroup("Add Text Layer");
var textLayer = comp.layers.addText(text);
if (selectedLayer) {
textLayer.moveBefore(selectedLayer);
textLayer.inPoint = selectedLayer.inPoint;
textLayer.outPoint = selectedLayer.outPoint;
}
centerAnchorPoint(textLayer);
textLayer.position.setValue([comp.width / 2, comp.height / 2]);
app.endUndoGroup();
return textLayer;
}
// アンカーポイントを中心に設定する関数
function centerAnchorPoint(layer) {
var sourceRect = layer.sourceRectAtTime(0, false);
layer.property("ADBE Transform Group").property("ADBE Anchor Point").setValue([sourceRect.left + sourceRect.width / 2, sourceRect.top + sourceRect.height / 2]);
}
})(this);
