mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-22 18:22:00 +00:00
Merge PR #7167: fix(ui): right-click an Adaptive Wide Angle constraint for its orientation menu, as in the reference app
This commit is contained in:
commit
cce5208c2a
22 files changed
+136
-34
No files matched your search
@@ -1105,7 +1105,7 @@
|
||||
Done Hotovo
|
||||
Dots Tečky
|
||||
Drag a rectangle around the object Táhněte obdélník kolem objektu
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Tažením v obraze přidáte omezení; Shift pro vodorovné/svislé; pravým kliknutím odstraníte.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Tažením v obraze přidáte omezení; Shift pro vodorovné/svislé; pravým kliknutím na omezení ho změníte nebo odstraníte.
|
||||
Drag to move the active shape's path or the Work Path Tažením přesunete cestu aktivního tvaru nebo pracovní cestu
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Klik: vybrat bod · Tažení: přesunout bod, úchyt nebo segment · {shift}+klik: přidat · {alt}+klik: celá podcesta
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Kreslete nástrojem pero (P) nebo vytvořte pracovní cestu z výběru.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1088,7 +1088,7 @@
|
||||
Done Fertig
|
||||
Dots Punkte
|
||||
Drag a rectangle around the object Ziehe ein Rechteck um das Objekt
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Ziehe auf dem Bild, um eine Zwangsbedingung hinzuzufügen; Shift für horizontal/vertikal; Rechtsklick löscht.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Ziehe auf dem Bild, um eine Zwangsbedingung hinzuzufügen; Shift für horizontal/vertikal; Rechtsklick auf eine Zwangsbedingung ändert oder löscht sie.
|
||||
Drag to move the active shape's path or the Work Path Ziehen, um den Pfad der aktiven Form oder den Arbeitspfad zu verschieben
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Klick: Ankerpunkt auswählen · Ziehen: Ankerpunkt, Griff oder Segment verschieben · {shift}-Klick: hinzufügen · {alt}-Klick: ganzer Teilpfad
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Zeichne mit dem Stift-Werkzeug (P) oder erzeuge einen Arbeitspfad aus einer Auswahl.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -2347,7 +2347,7 @@
|
||||
Drag (lasso) or click points (polygonal) · {add} add · {sub} subtract Σύρετε για λάσο ή κάντε κλικ για πολυγωνική επιλογή · {add} προσθήκη · {sub} αφαίρεση
|
||||
Drag a crop box · drag inside to move · edges resize ({ratio} ratio, {centre} centre) · Space moves while drawing · arrows nudge · X swaps orientation · {commit} commits · Esc cancels Σύρετε για περιοχή περικοπής · σύρετε στο εσωτερικό για μετακίνηση · από τα άκρα αλλάζει μέγεθος ({ratio} αναλογία, {centre} κέντρο) · Space για μετακίνηση κατά τη σχεδίαση · βέλη για μετακίνηση · X εναλλαγή προσανατολισμού · {commit} εφαρμογή · Esc ακύρωση
|
||||
Drag around the centre to rotate the view · Shift constrains to 15° Σύρετε γύρω από το κέντρο για να περιστρέψετε την προβολή · Shift περιορίζει στις 15°
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Σύρετε πάνω στην εικόνα για προσθήκη περιορισμού· Shift για οριζόντιο/κατακόρυφο· δεξί κλικ για διαγραφή.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Σύρετε πάνω στην εικόνα για προσθήκη περιορισμού· Shift για οριζόντιο/κατακόρυφο· δεξί κλικ σε έναν περιορισμό για αλλαγή ή διαγραφή.
|
||||
Drag or click polygon points · hold Alt during lasso for straight segments · {add} add · {sub} before drawing subtracts Σύρετε ή κάντε κλικ για πολυγωνικά σημεία · κρατήστε Alt κατά το λάσο για ευθείες · {add} προσθήκη · {sub} αφαίρεση πριν από τη σχεδίαση
|
||||
Drag to draw a gradient Σύρετε για να σχεδιάσετε διαβάθμιση
|
||||
Drag to move the active layer Σύρετε για μετακίνηση του ενεργού επιπέδου
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 1030 and column 18.
|
@@ -1095,7 +1095,7 @@
|
||||
Done Hecho
|
||||
Dots Puntos
|
||||
Drag a rectangle around the object Arrastre un rectángulo alrededor del objeto
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Arrastre sobre la imagen para añadir una restricción; Mayús para horizontal/vertical; clic derecho para eliminar.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Arrastre sobre la imagen para añadir una restricción; Mayús para horizontal/vertical; clic derecho en una restricción para cambiarla o eliminarla.
|
||||
Drag to move the active shape's path or the Work Path Arrastre para mover el trazado de la forma activa o el trazado de trabajo
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Clic: seleccionar punto · Arrastrar: mover punto, manejador o segmento · {shift}-clic: añadir · {alt}-clic: subtrazado completo
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Dibuje con la herramienta Pluma (P) o cree un trazado de trabajo a partir de una selección.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 47.
|
@@ -1080,7 +1080,7 @@
|
||||
Done Terminé
|
||||
Dots Points
|
||||
Drag a rectangle around the object Tracez un rectangle autour de l'objet
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Faites glisser sur l'image pour ajouter une contrainte ; Maj pour horizontal/vertical ; clic droit pour supprimer.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Faites glisser sur l'image pour ajouter une contrainte ; Maj pour horizontal/vertical ; clic droit sur une contrainte pour la modifier ou la supprimer.
|
||||
Drag to move the active shape's path or the Work Path Faites glisser pour déplacer le tracé de la forme active ou le tracé de travail
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Clic : sélectionner le point · Glisser : déplacer point, poignée ou segment · {shift}-clic : ajouter · {alt}-clic : sous-tracé entier
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Dessinez avec l'outil Plume (P) ou créez un tracé de travail à partir d'une sélection.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -2077,7 +2077,7 @@ navigator Zoom Nagyítás mértéke
|
||||
Distortion Torzítás
|
||||
Dither Árnyalatkeverés
|
||||
Double Line Kettős vonal
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Húzással kényszert adhatsz a képhez; Shift: vízszintes/függőleges; jobb kattintás: törlés.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Húzással kényszert adhatsz a képhez; Shift: vízszintes/függőleges; jobb kattintás egy kényszeren: módosítás vagy törlés.
|
||||
Dry Brush Száraz ecset
|
||||
Dust & Scratches Por és karcolások
|
||||
Dynamic color sliders Dinamikus színcsúszkák
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1074,7 +1074,7 @@
|
||||
Done Selesai
|
||||
Dots Titik
|
||||
Drag a rectangle around the object Seret persegi panjang di sekeliling objek
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Seret pada gambar untuk menambah batasan; Shift untuk horizontal/vertikal; klik kanan untuk menghapus.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Seret pada gambar untuk menambah batasan; Shift untuk horizontal/vertikal; klik kanan pada batasan untuk mengubah atau menghapusnya.
|
||||
Drag to move the active shape's path or the Work Path Seret untuk memindah path bentuk aktif atau Work Path
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Klik: pilih titik jangkar · Seret: pindahkan titik, gagang, atau segmen · {shift}-klik: tambah · {alt}-klik: seluruh subpath
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Gambar dengan alat Pen (P) atau buat work path dari seleksi.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 47.
|
@@ -1090,7 +1090,7 @@
|
||||
Done Fatto
|
||||
Dots Punti
|
||||
Drag a rectangle around the object Trascina un rettangolo attorno all'oggetto
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Trascina sull'immagine per aggiungere un vincolo; Maiusc per orizz/vert; clic destro per eliminare.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Trascina sull'immagine per aggiungere un vincolo; Maiusc per orizz/vert; clic destro su un vincolo per modificarlo o eliminarlo.
|
||||
Drag to move the active shape's path or the Work Path Trascina per spostare il tracciato forma attiva o il Tracciato di lavoro
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Clic: seleziona punto · Trascina: sposta punto, maniglia o segmento · {shift}-clic: aggiungi · {alt}-clic: intero sottotracciato
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Disegna con Penna (P) o crea un tracciato di lavoro da una selezione.
|
||||
|
||||
|
@@ -1093,7 +1093,7 @@
|
||||
Done 完了
|
||||
Dots ドット
|
||||
Drag a rectangle around the object オブジェクトを囲む矩形をドラッグ
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. 画像上をドラッグして制約を追加。Shift で水平/垂直、右クリックで削除。
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. 画像上をドラッグして制約を追加。Shift で水平/垂直、制約を右クリックで変更・削除。
|
||||
Drag to move the active shape's path or the Work Path ドラッグして、アクティブなシェイプのパスまたは作業用パスを移動
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath クリック: アンカーポイントを選択 · ドラッグ: ポイント、ハンドル、セグメントを移動 · {shift}+クリック: 追加 · {alt}+クリック: サブパス全体
|
||||
Draw with the Pen tool (P) or make a work path from a selection. ペンツール(P)で描くか、選択範囲から作業用パスを作成します。
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1071,7 +1071,7 @@
|
||||
Done 완료
|
||||
Dots 점
|
||||
Drag a rectangle around the object 오브젝트를 둘러싸는 사각형을 드래그하세요
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. 이미지 위에서 드래그하여 제약 조건 추가; Shift 키로 수평/수직 유지; 오른쪽 클릭하여 삭제.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. 이미지 위에서 드래그하여 제약 조건 추가; Shift 키로 수평/수직 유지; 제약 조건을 오른쪽 클릭하여 변경 또는 삭제.
|
||||
Drag to move the active shape's path or the Work Path 드래그하여 활성 모양의 패스 또는 작업 패스 이동
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath 클릭: 기준점 선택 · 드래그: 기준점, 핸들 또는 세그먼트 이동 · {shift}-클릭: 추가 · {alt}-클릭: 하위 패스 전체
|
||||
Draw with the Pen tool (P) or make a work path from a selection. 펜 도구(P)로 그리거나 선택 영역에서 작업 패스를 만드세요.
|
||||
|
||||
|
@@ -1074,7 +1074,7 @@
|
||||
Done Gereed
|
||||
Dots Stippen
|
||||
Drag a rectangle around the object Sleep een rechthoek rond het object
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Sleep over de afbeelding om een beperking toe te voegen; Shift voor horizontaal/verticaal; rechtsklik om te verwijderen.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Sleep over de afbeelding om een beperking toe te voegen; Shift voor horizontaal/verticaal; rechtsklik op een beperking om deze te wijzigen of te verwijderen.
|
||||
Drag to move the active shape's path or the Work Path Sleep om het pad van de actieve vorm of het werkpad te verplaatsen
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Klik: ankerpunt selecteren · Slepen: ankerpunt, greep of segment verplaatsen · {shift}-klik: toevoegen · {alt}-klik: heel subpad
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Teken met het pengereedschap (P) of maak een werkpad van een selectie.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 8 and column 34.
|
@@ -1093,7 +1093,7 @@
|
||||
Done Gotowe
|
||||
Dots Kropki
|
||||
Drag a rectangle around the object Przeciągnij prostokąt wokół obiektu
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Przeciągnij po obrazie, aby dodać ograniczenie; Shift — poziomo/pionowo; prawy przycisk usuwa.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Przeciągnij po obrazie, aby dodać ograniczenie; Shift — poziomo/pionowo; prawy przycisk na ograniczeniu — zmiana lub usunięcie.
|
||||
Drag to move the active shape's path or the Work Path Przeciągnij, aby przesunąć ścieżkę aktywnego kształtu lub ścieżkę roboczą
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Klik: zaznacz punkt kontrolny · Przeciągnięcie: przesuń punkt, uchwyt lub segment · {shift}-klik: dodaj · {alt}-klik: cała podścieżka
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Rysuj narzędziem Pióro (P) lub utwórz ścieżkę roboczą z zaznaczenia.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1075,7 +1075,7 @@
|
||||
Done Concluído
|
||||
Dots Pontos
|
||||
Drag a rectangle around the object Arraste um retângulo ao redor do objeto
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Arraste sobre a imagem para adicionar uma restrição; Shift para horizontal/vertical; clique direito para excluir.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Arraste sobre a imagem para adicionar uma restrição; Shift para horizontal/vertical; clique direito em uma restrição para alterá-la ou excluí-la.
|
||||
Drag to move the active shape's path or the Work Path Arraste para mover o demarcador da forma ativa ou o demarcador de trabalho
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Clique: selecionar ponto · Arrastar: mover ponto, alça ou segmento · {shift}-clique: adicionar · {alt}-clique: subdemarcador inteiro
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Desenhe com a ferramenta Caneta (P) ou crie um demarcador de trabalho a partir de uma seleção.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1584,7 +1584,7 @@
|
||||
Click to restore the current colour Щёлкните, чтобы восстановить текущий цвет
|
||||
Click with the Note tool to add a note. Щёлкните инструментом «Заметки», чтобы добавить заметку.
|
||||
Drag a rectangle around the object Обведите объект прямоугольником
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Перетащите по изображению, чтобы добавить ограничение; Shift — горизонталь/вертикаль; правый клик — удалить.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Перетащите по изображению, чтобы добавить ограничение; Shift — горизонталь/вертикаль; щелчок правой кнопкой по ограничению — изменить или удалить.
|
||||
Drag the arrow to set the angle, the dots to set the roundness Перетащите стрелку, чтобы задать угол, и точки — круглость
|
||||
Create new pattern from the selection Создать новый паттерн из выделения
|
||||
Create new gradient Создать новый градиент
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1061,7 +1061,7 @@
|
||||
Done Gotovo
|
||||
Dots Tačke
|
||||
Drag a rectangle around the object Prevucite pravougaonik oko objekta
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Prevucite po slici da dodate ograničenje; Shift za horizontalno/vertikalno; desni klik za brisanje.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Prevucite po slici da dodate ograničenje; Shift za horizontalno/vertikalno; desni klik na ograničenje za izmenu ili brisanje.
|
||||
Drag to move the active shape's path or the Work Path Prevucite da pomerite putanju aktivnog oblika ili radnu putanju
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Klik: izaberi sidrišnu tačku · Prevlačenje: pomeri tačku, ručicu ili segment · {shift}-klik: dodaj · {alt}-klik: cela podputanja
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Crtajte alatkom pero (P) ili napravite radnu putanju od selekcije.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1053,7 +1053,7 @@
|
||||
Done Bitti
|
||||
Dots Noktalar
|
||||
Drag a rectangle around the object Nesnenin çevresine bir dikdörtgen sürükleyin
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Kısıtlama eklemek için resmin üzerine sürükleyin; Yatay/dikey için kaydırma; silmek için sağ tıklayın.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Kısıtlama eklemek için resmin üzerine sürükleyin; Yatay/dikey için kaydırma; değiştirmek veya silmek için bir kısıtlamaya sağ tıklayın.
|
||||
Drag to move the active shape's path or the Work Path Etkin şeklin yolunu veya Çalışma Yolunu taşımak için sürükleyin
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath Tıklayın: çapayı seçin · Sürükleyin: çapayı, tutamacı veya parçayı taşıyın · {shift}-tıklayın: ekleyin · {alt}-tıklayın: alt yolun tamamı
|
||||
Draw with the Pen tool (P) or make a work path from a selection. Kalem aracıyla (P) çizim yapın veya seçimden bir çalışma yolu oluşturun.
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 8 and column 34.
|
@@ -1562,7 +1562,7 @@
|
||||
Click to restore the current colour Клацніть, щоб відновити поточний колір
|
||||
Click with the Note tool to add a note. Клацніть інструментом «Нотатка», щоб додати нотатку.
|
||||
Drag a rectangle around the object Намалюйте прямокутник навколо об'єкта
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Перетягніть на зображенні, щоб додати обмеження; Shift для горизонталі/вертикалі; праве клацання для видалення.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Перетягніть на зображенні, щоб додати обмеження; Shift для горизонталі/вертикалі; клацніть правою кнопкою на обмеженні, щоб змінити або видалити його.
|
||||
Drag the arrow to set the angle, the dots to set the roundness Перетягніть стрілку, щоб установити кут, а точки — округлість
|
||||
Create new pattern from the selection Створити новий візерунок із виділення
|
||||
Create new gradient Створити новий градієнт
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 1394 and column 18.
|
@@ -2256,7 +2256,7 @@ layers Fill: Độ tô:
|
||||
Delete Timeline Xóa dòng thời gian
|
||||
Deselect All Bỏ chọn tất cả
|
||||
Display Text Hiển thị văn bản
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. Kéo trên ảnh để thêm ràng buộc; Shift cho ngang/dọc; nhấp chuột phải để xóa.
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. Kéo trên ảnh để thêm ràng buộc; Shift cho ngang/dọc; nhấp chuột phải vào ràng buộc để thay đổi hoặc xóa.
|
||||
Export selected measurements (CSV) Xuất các phép đo đã chọn (CSV)
|
||||
Focal Length Tiêu cự
|
||||
Font Size: Cỡ chữ:
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1099,7 +1099,7 @@
|
||||
Done 完成
|
||||
Dots 点
|
||||
Drag a rectangle around the object 围绕对象拖出矩形
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. 在图像上拖动以添加约束;按 Shift 保持水平或垂直;右键单击删除。
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. 在图像上拖动以添加约束;按 Shift 保持水平或垂直;右键单击约束可更改或删除。
|
||||
Drag to move the active shape's path or the Work Path 拖动以移动当前形状的路径或工作路径
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath 单击:选择锚点 · 拖动:移动锚点、手柄或线段 · {shift}-单击:添加 · {alt}-单击:整个子路径
|
||||
Draw with the Pen tool (P) or make a work path from a selection. 使用钢笔工具(P)绘制,或从选区创建工作路径。
|
||||
|
||||
|
@@ -1102,7 +1102,7 @@
|
||||
Done 完成
|
||||
Dots 點
|
||||
Drag a rectangle around the object 在物件周圍拖曳出矩形
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete. 在影像上拖曳以新增限制線;按住 Shift 可限制水平/垂直;按右鍵可刪除。
|
||||
Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it. 在影像上拖曳以新增限制線;按住 Shift 可限制水平/垂直;在限制線上按右鍵可變更或刪除。
|
||||
Drag to move the active shape's path or the Work Path 拖曳以移動作用中形狀的路徑或工作路徑
|
||||
Click: select anchor · Drag: move anchor, handle or segment · {shift}-click: add · {alt}-click: whole subpath 按一下:選取錨點 · 拖曳:移動錨點、把手或線段 · {shift}-按一下:增加 · {alt}-按一下:整個子路徑
|
||||
Draw with the Pen tool (P) or make a work path from a selection. 使用筆型工具 (P) 繪製,或從選取範圍建立工作路徑。
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -1,12 +1,13 @@
|
||||
//! Filter › Adaptive Wide Angle…: a full-window dialog like Photoshop's. Drag on the image to
|
||||
//! draw a constraint (the scene line between the two points, curved by the lens model); hold
|
||||
//! Shift when releasing to make it horizontal or vertical; right-click a constraint to delete
|
||||
//! it. The right panel holds the correction model, focal length, crop factor, scale and the
|
||||
//! Shift when releasing to make it horizontal or vertical; right-click a constraint for its menu
|
||||
//! (Free, Horizontal, Vertical, Delete), as in Photoshop. The right panel holds the correction model, focal length, crop factor, scale and the
|
||||
//! constraint list. The preview solves the mesh warp on a CPU proxy (≤ 800 px); OK runs
|
||||
//! `filter.adaptiveWideAngle` with the constraints in document pixels.
|
||||
//!
|
||||
//! Control channel: `ui.menu.invoke {"id":"filter.adaptiveWideAngle","params":{"ui":{"set":{…},
|
||||
//! "add":{"a":[x,y],"b":[x,y],"orientation":"…"}, "remove":i, "commit":true | "cancel":true}}}`.
|
||||
//! "add":{"a":[x,y],"b":[x,y],"orientation":"…"}, "orient":{"index":i,"orientation":"…"}, "remove":i,
|
||||
//! "commit":true | "cancel":true}}}`.
|
||||
|
||||
use egui::{Align2, Color32, FontId, Pos2, Rect as ERect, Sense, Stroke, TextureHandle, pos2, vec2};
|
||||
use photocraft_algo::transform::Interp;
|
||||
@@ -40,6 +41,8 @@ pub struct WideAngleDialog {
|
||||
dirty: bool,
|
||||
pub preview: bool,
|
||||
drag: Option<([f64; 2], [f64; 2])>,
|
||||
/// The constraint a right-click opened the constraint menu on.
|
||||
menu_for: Option<usize>,
|
||||
pub residual: f64,
|
||||
pub render_ms: f64,
|
||||
history: EditHistory<WideAngle>,
|
||||
@@ -143,6 +146,7 @@ pub fn open(app: &mut PhotocraftApp, ctx: &egui::Context) -> Result<(), String>
|
||||
dirty: true,
|
||||
preview: true,
|
||||
drag: None,
|
||||
menu_for: None,
|
||||
residual: 0.0,
|
||||
render_ms: 0.0,
|
||||
};
|
||||
@@ -192,6 +196,12 @@ pub fn menu(app: &mut PhotocraftApp, ctx: &egui::Context, id: &str, params: &Val
|
||||
d.params.constraints.push(Constraint { a: pa, b: pb, orientation: parse_orientation(a.get("orientation").and_then(Value::as_str).unwrap_or("free")) });
|
||||
d.dirty = true;
|
||||
}
|
||||
if let Some(o) = ui.get("orient") {
|
||||
let i = o.get("index").and_then(Value::as_u64).and_then(|i| usize::try_from(i).ok());
|
||||
let Some(c) = i.and_then(|i| d.params.constraints.get_mut(i)) else { return Some(Err("`orient` needs the index of a constraint".into())) };
|
||||
c.orientation = parse_orientation(o.get("orientation").and_then(Value::as_str).unwrap_or("free"));
|
||||
d.dirty = true;
|
||||
}
|
||||
if let Some(i) = ui.get("remove").and_then(Value::as_u64)
|
||||
&& (i as usize) < d.params.constraints.len()
|
||||
{
|
||||
@@ -217,6 +227,32 @@ fn commit(app: &mut PhotocraftApp) -> Result<Value, String> {
|
||||
app.run("filter.adaptiveWideAngle", d.command_params())
|
||||
}
|
||||
|
||||
/// Photoshop's right-click menu on a constraint: its orientation (the current one checked) and
|
||||
/// Delete. A right-click away from every constraint opens nothing.
|
||||
fn constraint_menu(ui: &mut egui::Ui, d: &mut WideAngleDialog) {
|
||||
let Some(i) = d.menu_for.filter(|i| *i < d.params.constraints.len()) else {
|
||||
ui.close();
|
||||
return;
|
||||
};
|
||||
for (o, label) in [(Orientation::Free, tl!("Free")), (Orientation::Horizontal, tl!("Horizontal")), (Orientation::Vertical, tl!("Vertical"))] {
|
||||
let current = d.params.constraints.get(i).is_some_and(|c| c.orientation == o);
|
||||
if ui.radio(current, label).clicked() {
|
||||
if let Some(c) = d.params.constraints.get_mut(i) {
|
||||
c.orientation = o;
|
||||
d.dirty = true;
|
||||
}
|
||||
ui.close();
|
||||
}
|
||||
}
|
||||
ui.separator();
|
||||
if ui.button(tl!("Delete")).clicked() {
|
||||
d.params.constraints.remove(i);
|
||||
d.menu_for = None;
|
||||
d.dirty = true;
|
||||
ui.close();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn show(app: &mut PhotocraftApp, ctx: &egui::Context) {
|
||||
if app.wide_angle.is_none() {
|
||||
return;
|
||||
@@ -274,7 +310,7 @@ pub fn show(app: &mut PhotocraftApp, ctx: &egui::Context) {
|
||||
if resp.secondary_clicked()
|
||||
&& let Some(p) = resp.interact_pointer_pos()
|
||||
{
|
||||
// Delete the constraint whose curve passes nearest the click.
|
||||
// The constraint whose curve passes nearest the click gets the menu.
|
||||
let near = d
|
||||
.params
|
||||
.constraints
|
||||
@@ -282,13 +318,9 @@ pub fn show(app: &mut PhotocraftApp, ctx: &egui::Context) {
|
||||
.enumerate()
|
||||
.map(|(i, c)| (i, cam.arc(c.a, c.b, 24).iter().map(|q| (to_screen(*q) - p).length()).fold(f32::MAX, f32::min)))
|
||||
.min_by(|a, b| a.1.total_cmp(&b.1));
|
||||
if let Some((i, dist)) = near
|
||||
&& dist < 10.0
|
||||
{
|
||||
d.params.constraints.remove(i);
|
||||
d.dirty = true;
|
||||
}
|
||||
d.menu_for = near.filter(|(_, dist)| *dist < 10.0).map(|(i, _)| i);
|
||||
}
|
||||
resp.context_menu(|ui| constraint_menu(ui, d));
|
||||
let show_src = !d.preview || d.drag.is_some();
|
||||
let tex = if show_src { d.src_tex.as_ref() } else { d.out_tex.as_ref() };
|
||||
widgets::checker(&painter, img_r, 8.0);
|
||||
@@ -393,9 +425,11 @@ pub fn show(app: &mut PhotocraftApp, ctx: &egui::Context) {
|
||||
widgets::hairline(ui);
|
||||
widgets::checkbox(ui, &mut d.preview, tl!("Preview"));
|
||||
ui.label(
|
||||
egui::RichText::new(tl!("Drag on the image to add a constraint; Shift for horizontal/vertical; right-click to delete."))
|
||||
.color(t.text_faint)
|
||||
.size(11.0),
|
||||
egui::RichText::new(tl!(
|
||||
"Drag on the image to add a constraint; Shift for horizontal/vertical; right-click a constraint to change or delete it."
|
||||
))
|
||||
.color(t.text_faint)
|
||||
.size(11.0),
|
||||
);
|
||||
});
|
||||
let foot = ERect::from_min_max(pos2(full.left(), full.bottom() - footer_h), full.max);
|
||||
@@ -458,6 +492,74 @@ mod tests {
|
||||
assert!(app.wide_angle.is_none());
|
||||
}
|
||||
|
||||
/// A 160 × 100 grey layer to open the dialog on.
|
||||
fn grey_layer() -> PhotocraftApp {
|
||||
let mut app = PhotocraftApp::new(photocraft_engine::Session::new(), Default::default());
|
||||
app.run("file.new", json!({"width": 160, "height": 100})).unwrap();
|
||||
app.run("layer.new.layer", json!({})).unwrap();
|
||||
app.run("edit.fill", json!({"color": "#808080"})).unwrap();
|
||||
app
|
||||
}
|
||||
|
||||
/// Open the dialog with one free constraint across the middle of the layer.
|
||||
fn open_with_a_constraint(app: &mut PhotocraftApp, ctx: &egui::Context) {
|
||||
menu(app, ctx, "filter.adaptiveWideAngle", &json!({"ui": {"add": {"a": [20, 50], "b": [140, 50]}}})).unwrap().unwrap();
|
||||
}
|
||||
|
||||
/// `orient` sets a constraint's orientation, as the right-click menu does; a bad index is
|
||||
/// an error that changes nothing.
|
||||
#[test]
|
||||
fn orient_sets_a_constraint_orientation() {
|
||||
let mut app = grey_layer();
|
||||
let ctx = egui::Context::default();
|
||||
open_with_a_constraint(&mut app, &ctx);
|
||||
let r = menu(&mut app, &ctx, "filter.adaptiveWideAngle", &json!({"ui": {"orient": {"index": 0, "orientation": "vertical"}}})).unwrap().unwrap();
|
||||
assert_eq!(r["params"]["constraints"][0]["orientation"], "vertical");
|
||||
for bad in [json!({"index": 1, "orientation": "horizontal"}), json!({"orientation": "horizontal"}), json!({"index": -1})] {
|
||||
assert!(menu(&mut app, &ctx, "filter.adaptiveWideAngle", &json!({"ui": {"orient": bad}})).unwrap().is_err(), "{bad}");
|
||||
}
|
||||
assert_eq!(app.wide_angle.as_ref().unwrap().params.constraints[0].orientation, Orientation::Vertical);
|
||||
}
|
||||
|
||||
/// Right-clicking a constraint opens Photoshop's constraint menu: an orientation (the
|
||||
/// current one checked) or Delete. A right-click away from every constraint deletes nothing
|
||||
/// and opens no menu (it used to delete the nearest constraint outright).
|
||||
#[test]
|
||||
fn right_click_on_a_constraint_opens_its_menu() {
|
||||
use egui_kittest::kittest::Queryable;
|
||||
let size = vec2(1000.0, 600.0);
|
||||
let mut h = egui_kittest::Harness::builder().with_size(size).build_ui_state(|ui, app: &mut PhotocraftApp| show(app, ui.ctx()), grey_layer());
|
||||
PhotocraftApp::setup_context(&h.ctx, crate::theme::ThemeKind::ALL[0]);
|
||||
let ctx = h.ctx.clone();
|
||||
open_with_a_constraint(h.state_mut(), &ctx);
|
||||
h.run_steps(2);
|
||||
// The image view (see `show`): the window less the title, footer and panel, inset 16 pt.
|
||||
let view = ERect::from_min_max(pos2(16.0, 30.0 + 16.0), pos2(size.x - PANEL_W - 16.0, size.y - 48.0 - 16.0));
|
||||
let right_click = |h: &mut egui_kittest::Harness<'_, PhotocraftApp>, p: Pos2| {
|
||||
let button = |pressed| egui::Event::PointerButton { pos: p, button: egui::PointerButton::Secondary, pressed, modifiers: egui::Modifiers::NONE };
|
||||
h.input_mut().events.extend([egui::Event::PointerMoved(p), button(true)]);
|
||||
h.run_steps(1);
|
||||
h.input_mut().events.push(button(false));
|
||||
h.run_steps(2);
|
||||
};
|
||||
let constraints = |h: &egui_kittest::Harness<'_, PhotocraftApp>| h.state().wide_angle.as_ref().unwrap().params.constraints.clone();
|
||||
// The constraint runs through the document's centre, which the view centres.
|
||||
right_click(&mut h, view.center());
|
||||
h.get_by_label("Horizontal").click();
|
||||
h.run_steps(2);
|
||||
assert_eq!(constraints(&h).len(), 1, "choosing an orientation keeps the constraint");
|
||||
assert_eq!(constraints(&h)[0].orientation, Orientation::Horizontal);
|
||||
// Away from it: no menu, nothing deleted.
|
||||
right_click(&mut h, view.left_top() + vec2(4.0, 4.0));
|
||||
assert!(h.query_by_label("Horizontal").is_none(), "no menu away from a constraint");
|
||||
assert_eq!(constraints(&h).len(), 1);
|
||||
// Delete from the menu (the panel's list has its own Delete button too).
|
||||
right_click(&mut h, view.center());
|
||||
h.get_all_by_label("Delete").last().expect("the menu's Delete").click();
|
||||
h.run_steps(2);
|
||||
assert!(constraints(&h).is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn command_z_steps_the_dialog_not_the_document() {
|
||||
let mut app = PhotocraftApp::new(photocraft_engine::Session::new(), Default::default());
|
||||
|
||||
@@ -85,7 +85,7 @@ Photoshop's Generative Fill and Delete and Fill Selection rows are left out: Pho
|
||||
| Empty pasteboard / workspace | Gray, Black, Custom canvas color choices; verify any additional entries in a current Photoshop capture | Implemented (canvas_tool_menu.rs `PASTEBOARD_MENU`, #2462): Default, Black, Dark Gray, Medium Gray, Light Gray, Custom, Select Custom Color… | Adobe [documents right-clicking outside the image for canvas color](https://helpx.adobe.com/ph_en/photoshop/using/filling-stroking-selections-layers-paths.html); exact current layout still needs a capture |
|
||||
| Text field / selected text | Native edit menu and spelling suggestions without routing to active image tool | Edit menu implemented in text_field_menu.rs for every text field (Undo, Cut, Copy, Paste, Delete, Select All; a right-click inside the selection keeps it; never reaches the canvas or tool menu). Spelling suggestions live in the Type tool's edit menu (canvas_tool_menu.rs), not in generic fields, which hold no type layer text (UI-217-8) | P1; **inferred** exact spelling list |
|
||||
| Tool icon in Options bar | Reset Tool, Reset All Tools | Audit | Explicitly documented in [Adobe Photoshop reference](https://helpx.adobe.com/archive/en/photoshop/cc/2015/photoshop_reference.pdf); historical source, verify modern label |
|
||||
| Adaptive Wide Angle constraint line | Auto, Horizontal, Vertical orientation | Current right-click deletes constraint | P1 behavior mismatch: [Adobe documents orientation choice](https://helpx.adobe.com/photoshop/using/adaptive-wide-angle-filter.html) |
|
||||
| Adaptive Wide Angle constraint line | Auto, Horizontal, Vertical orientation | Right-click a constraint (wide_angle_ui.rs `constraint_menu`): Free, Horizontal, Vertical (current checked), Delete; a right-click away from every constraint opens nothing. Photoshop's Arbitrary angle is not modelled by the solver | Done except Arbitrary: [Adobe documents orientation choice](https://helpx.adobe.com/photoshop/using/adaptive-wide-angle-filter.html) |
|
||||
|
||||
## Delivery slices and acceptance
|
||||
|
||||
|
||||
Reference in new issue
Block a user