mirror of
https://github.com/storytold/photocraft.git
synced 2026-11-11 00:11:46 +00:00
Merge pull request #11490 from Raghav2012Code/feat/crop-options-bar-details
Crop: Straighten gets its label and a spirit-level glyph (#10888)
This commit is contained in:
50 files changed
+870
-52
No files matched your search
+2
-1
@@ -42,11 +42,12 @@ next to them.
|
||||
| `epaint_default_fonts::EGUI_ICONS` (build input; deflated into `OUT_DIR/egui_fonts/egui-icons.ttf.deflate`, registered by `crates/ui-egui/src/egui_fonts.rs`) | egui-icons, five-glyph subset of emoji-icon-font | John Slegers | [egui fork at 6d518fc](https://github.com/storytold/egui/tree/6d518fc799681571963842f95b55a6b68431b15a/crates/epaint_default_fonts/fonts), [original](https://github.com/jslegers/emoji-icon-font); egui subset, unmodified here | MIT; Copyright (c) 2014 John Slegers; full upstream notice in [NOTICE](NOTICE) |
|
||||
| `assets/fonts/Inter-Regular.ttf`, `Inter-Medium.ttf`, `Inter-SemiBold.ttf` | Inter 4.001 (UI font) | The Inter Project Authors (Rasmus Andersson) | <https://github.com/rsms/inter> | SIL OFL 1.1, [`assets/fonts/OFL-Inter.txt`](assets/fonts/OFL-Inter.txt) |
|
||||
| `assets/fonts/JetBrainsMono-Regular.ttf` | JetBrains Mono 2.305 (numeric font) | The JetBrains Mono Project Authors | <https://github.com/JetBrains/JetBrainsMono> | SIL OFL 1.1, [`assets/fonts/OFL-JetBrainsMono.txt`](assets/fonts/OFL-JetBrainsMono.txt) |
|
||||
| `assets/icons/*.svg` except `slice-knife.svg`, `slice-select.svg`, `font-similar.svg`, `font-variable.svg`, `sampler.svg`, `artboard.svg`, `perspective-crop.svg`, `frame-placeholder.svg`, `ellipse-dashed.svg`, `gradient.svg`, `type-mask.svg`, `type-mask-vertical.svg`, `text-warp.svg`, `clip-below.svg`, `clip-release.svg`, `layer-mask.svg`, `adjustment-layer.svg`, `brush-replace.svg`, `history-brush.svg`, `quick-selection.svg`, `eraser-background.svg`, `eraser-magic.svg`, `lasso-magnetic.svg`, `direct-select.svg`, `convert-point.svg`, `pen-add-anchor.svg`, `pen-delete-anchor.svg`, `pen-freeform.svg`, `pen-curvature.svg`, `bandage-sparkle.svg`, `painting-symmetry.svg`, `symmetry-*.svg`, `path-op-*.svg` and `marquee-{row,column}.svg`, `align-edge-*.svg` and `distribute-*.svg`, `crop-overlay-*.svg`, `vertical-align-*.svg` (116 files; `star-filled.svg` is `star.svg` with a solid fill) | Lucide icons | Lucide Icons and Contributors | <https://github.com/lucide-icons/lucide> (`icons/<name>.svg`; `align-*` are now named `text-align-*` upstream) | ISC, [`assets/icons/LICENSE-lucide.txt`](assets/icons/LICENSE-lucide.txt) |
|
||||
| `assets/icons/*.svg` except `slice-knife.svg`, `slice-select.svg`, `font-similar.svg`, `font-variable.svg`, `sampler.svg`, `artboard.svg`, `perspective-crop.svg`, `frame-placeholder.svg`, `ellipse-dashed.svg`, `gradient.svg`, `type-mask.svg`, `type-mask-vertical.svg`, `text-warp.svg`, `clip-below.svg`, `clip-release.svg`, `layer-mask.svg`, `adjustment-layer.svg`, `brush-replace.svg`, `history-brush.svg`, `quick-selection.svg`, `eraser-background.svg`, `eraser-magic.svg`, `lasso-magnetic.svg`, `direct-select.svg`, `convert-point.svg`, `pen-add-anchor.svg`, `pen-delete-anchor.svg`, `pen-freeform.svg`, `pen-curvature.svg`, `bandage-sparkle.svg`, `painting-symmetry.svg`, `symmetry-*.svg`, `path-op-*.svg` and `marquee-{row,column}.svg`, `align-edge-*.svg` and `distribute-*.svg`, `crop-overlay-*.svg`, `vertical-align-*.svg`, `spirit-level.svg` (116 files; `star-filled.svg` is `star.svg` with a solid fill) | Lucide icons | Lucide Icons and Contributors | <https://github.com/lucide-icons/lucide> (`icons/<name>.svg`; `align-*` are now named `text-align-*` upstream) | ISC, [`assets/icons/LICENSE-lucide.txt`](assets/icons/LICENSE-lucide.txt) |
|
||||
| `assets/icons/{check,chevron-down,chevron-left,chevron-right,chevron-up,chevrons-left,chevrons-right,circle,clock,compass,info,link,link-2,lock,minus,monitor,moon,move,navigation,plus,search,square,trash,triangle,type,x,zoom-in}.svg` | Lucide icons derived from Feather (subset of the row above) | Cole Bemis (Feather), Lucide Contributors | <https://github.com/feathericons/feather> via Lucide | MIT (Feather) and ISC (Lucide), [`assets/icons/LICENSE-lucide.txt`](assets/icons/LICENSE-lucide.txt) |
|
||||
| `assets/icons/slice-knife.svg` | Slice tool glyph | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
| `assets/icons/slice-select.svg` | Slice Select tool glyph | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
| `assets/icons/crop-overlay-*.svg` | Crop overlay glyphs: Rule of Thirds, Grid, Diagonal, Triangle, Golden Ratio and Golden Spiral inside the crop-mark frame | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
| `assets/icons/spirit-level.svg` | Straighten tool glyph: a spirit level with its vial and bubble under a dotted arc | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
| `assets/icons/sampler.svg` | Color Sampler tool glyph: a target reticle marking a sampled pixel | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
| `assets/icons/font-similar.svg`, `assets/icons/font-variable.svg` | Font menu filter glyphs: two waves (Show Similar Fonts) and a T over a slider (Show Variable Fonts), drawn on the 24 px icon grid | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
| `assets/icons/convert-point.svg` | Convert Point tool glyph: an angle with a square anchor on its apex, drawn on Lucide's 24 px grid and stroke | PhotoCraft contributors | Original work | MIT OR Apache-2.0 |
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect x="3" y="10" width="18" height="7" rx="2" />
|
||||
<path d="M8 12v3M16 12v3" />
|
||||
<circle cx="12" cy="13.5" r="1.1" />
|
||||
<path d="M8.5 8.4q3.5-2.6 7 0" stroke-dasharray="0.6 1.6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 394 B |
@@ -297,6 +297,9 @@ impl PhotocraftApp {
|
||||
let home = self.home_screen_up();
|
||||
if ((chrome && self.ui.panels.options_bar) || tabbed_in) && !home {
|
||||
panels::options_bar(self, ui);
|
||||
} else {
|
||||
// Its Fill help modal is gone with the bar: do not let a stale flag hold the crop's keys.
|
||||
panels::options_bar::close_fill_help(ui.ctx());
|
||||
}
|
||||
if chrome && self.ui.panels.status_bar && !home {
|
||||
panels::status_bar(self, ui);
|
||||
|
||||
@@ -3625,3 +3625,17 @@ curves Smooth تنعيم
|
||||
Saved RAW Develop settings to {file} تم حفظ إعدادات معالجة RAW في {file}
|
||||
RAW Develop معالجة RAW
|
||||
RAW Develop Filter مرشح معالجة RAW
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size اختر نسبة أبعاد أو حجم اقتصاص مسبق الضبط
|
||||
Set the aspect ratio for the crop box اضبط نسبة أبعاد إطار الاقتصاص
|
||||
Clear aspect ratio values امسح قيم نسبة الأبعاد
|
||||
Set the overlay options for the Crop Tool اضبط خيارات تراكب الاقتصاص
|
||||
Determines if pixel data outside the crop box is retained or deleted يحدد ما إذا كانت البكسلات خارج إطار الاقتصاص تُحتفظ بها أم تُحذف
|
||||
How expanded crop area gets filled كيفية ملء منطقة الاقتصاص الموسعة
|
||||
Displays pop-up help for the fill methods يعرض تعليمات منبثقة عن طرق الملء
|
||||
Fill options خيارات الملء
|
||||
Background (default): الخلفية (افتراضي):
|
||||
Fill the expanded area with your background color or transparent pixels املأ المنطقة الموسعة بلون الخلفية أو بكسلات شفافة
|
||||
Content-aware fill ملء حسب المحتوى
|
||||
Sample content from part of the image and use it to fill a small area خذ محتوى من جزء من الصورة لملء منطقة صغيرة
|
||||
Reset the crop box, image rotation, and aspect ratio settings إعادة ضبط إطار الاقتصاص ودوران الصورة ونسبة الأبعاد
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4632,3 +4632,17 @@ smartSvg SVG editor opened. Save the SVG to update this Smart Object. SVG redakt
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW emalı ayarları {file} faylında saxlanıldı
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Əvvəlcədən təyin edilmiş aspekt nisbətini və ya kəsmə ölçüsünü seçin
|
||||
Set the aspect ratio for the crop box Kəsmə çərçivəsinin aspekt nisbətini təyin edin
|
||||
Clear aspect ratio values Aspekt nisbəti dəyərlərini təmizləyin
|
||||
Set the overlay options for the Crop Tool Kəsmə örtüyünün parametrlərini təyin edin
|
||||
Determines if pixel data outside the crop box is retained or deleted Kəsmə çərçivəsindən kənar piksellərin saxlanılıb-silinmədiyini müəyyən edir
|
||||
How expanded crop area gets filled Genişləndirilmiş kəsmə sahəsinin necə doldurulacağı
|
||||
Displays pop-up help for the fill methods Doldurma üsulları üçün açılan köməyi göstərir
|
||||
Fill options Doldurma seçimləri
|
||||
Background (default): Fon (defolt):
|
||||
Fill the expanded area with your background color or transparent pixels Genişləndirilmiş sahəni fon rəngi və ya şəffaf piksellərlə doldurun
|
||||
Content-aware fill Məzmuna əsaslanan doldurma
|
||||
Sample content from part of the image and use it to fill a small area Kiçik sahəni doldurmaq üçün şəklin bir hissəsindən məzmun götürün
|
||||
Reset the crop box, image rotation, and aspect ratio settings Kəsmə çərçivəsini, şəkil fırlanmasını və aspekt nisbətini sıfırlayın
|
||||
|
Can't render this file because it contains an unexpected character in line 1345 and column 18.
|
@@ -4646,3 +4646,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} Postavke RAW obrade sačuvane u {file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Odaberite unaprijed postavljenu razmeru ili veličinu obrezivanja
|
||||
Set the aspect ratio for the crop box Postavite razmeru okvira za obrezivanje
|
||||
Clear aspect ratio values Obrišite vrijednosti razmere
|
||||
Set the overlay options for the Crop Tool Postavite opcije preklapanja obrezivanja
|
||||
Determines if pixel data outside the crop box is retained or deleted Određuje da li se pikseli izvan okvira za obrezivanje zadržavaju ili brišu
|
||||
How expanded crop area gets filled Kako se popunjava proširena oblast obrezivanja
|
||||
Displays pop-up help for the fill methods Prikazuje iskačuću pomoć za metode popunjavanja
|
||||
Fill options Opcije popunjavanja
|
||||
Background (default): Pozadina (zadano):
|
||||
Fill the expanded area with your background color or transparent pixels Popunite proširenu oblast bojom pozadine ili prozirnim pikselima
|
||||
Content-aware fill Popunjavanje prema sadržaju
|
||||
Sample content from part of the image and use it to fill a small area Uzmite sadržaj iz dijela slike da popunite malu oblast
|
||||
Reset the crop box, image rotation, and aspect ratio settings Vratite okvir za obrezivanje, rotaciju slike i razmeru
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4372,3 +4372,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Při uložení zmenšit plátno na obsah
|
||||
Move Toolbar to the Right Přesunout panel nástrojů doprava
|
||||
Move Toolbar to the Left Přesunout panel nástrojů doleva
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Zvolit přednastavený poměr stran nebo velikost ořezu
|
||||
Set the aspect ratio for the crop box Nastavit poměr stran pro rámeček ořezu
|
||||
Clear aspect ratio values Vymazat hodnoty poměru stran
|
||||
Set the overlay options for the Crop Tool Nastavit možnosti překryvu ořezu
|
||||
Determines if pixel data outside the crop box is retained or deleted Určuje, zda se pixely mimo rámeček ořezu zachovají, nebo odstraní
|
||||
How expanded crop area gets filled Jak se vyplní rozšířená oblast ořezu
|
||||
Displays pop-up help for the fill methods Zobrazí místní nápovědu k metodám vyplňování
|
||||
Fill options Možnosti vyplnění
|
||||
Background (default): Pozadí (výchozí):
|
||||
Fill the expanded area with your background color or transparent pixels Vyplnit rozšířenou oblast barvou pozadí nebo průhlednými pixely
|
||||
Content-aware fill Vyplnění podle obsahu
|
||||
Sample content from part of the image and use it to fill a small area Vzít obsah z části obrázku k vyplnění malé oblasti
|
||||
Reset the crop box, image rotation, and aspect ratio settings Obnovit rámeček ořezu, otočení obrázku a poměr stran
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4830,3 +4830,17 @@ cameraRaw White Balance: As Shot Hvidbalance: Som fotograferet
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW-fremkaldelsesindstillinger gemt i {file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Vælg et forudindstillet billedformat eller beskæringsstørrelse
|
||||
Set the aspect ratio for the crop box Angiv billedformatet for beskæringsrammen
|
||||
Clear aspect ratio values Ryd værdier for billedformat
|
||||
Set the overlay options for the Crop Tool Angiv indstillinger for beskæringsoverlejringen
|
||||
Determines if pixel data outside the crop box is retained or deleted Bestemmer, om pixels uden for beskæringsrammen bevares eller slettes
|
||||
How expanded crop area gets filled Hvordan det udvidede beskæringsområde fyldes
|
||||
Displays pop-up help for the fill methods Viser pop op-hjælp til fyldningsmetoderne
|
||||
Fill options Fyldningsindstillinger
|
||||
Background (default): Baggrund (standard):
|
||||
Fill the expanded area with your background color or transparent pixels Fyld det udvidede område med baggrundsfarven eller gennemsigtige pixels
|
||||
Content-aware fill Indholdsbaseret udfyldning
|
||||
Sample content from part of the image and use it to fill a small area Hent indhold fra en del af billedet for at fylde et lille område
|
||||
Reset the crop box, image rotation, and aspect ratio settings Nulstil beskæringsrammen, billedrotationen og billedformatet
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -3671,3 +3671,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
# RAW Develop feature labels
|
||||
RAW Develop RAW-Entwicklung
|
||||
RAW Develop Filter RAW-Entwicklungsfilter
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Voreingestelltes Seitenverhältnis oder Zuschnittgröße wählen
|
||||
Set the aspect ratio for the crop box Seitenverhältnis für den Zuschnittrahmen festlegen
|
||||
Clear aspect ratio values Seitenverhältniswerte löschen
|
||||
Set the overlay options for the Crop Tool Optionen für die Zuschnittüberlagerung festlegen
|
||||
Determines if pixel data outside the crop box is retained or deleted Legt fest, ob Bilddaten außerhalb des Zuschnittrahmens erhalten oder gelöscht werden
|
||||
How expanded crop area gets filled Wie der erweiterte Zuschnittbereich gefüllt wird
|
||||
Displays pop-up help for the fill methods Zeigt Pop-up-Hilfe zu den Füllmethoden an
|
||||
Fill options Fülloptionen
|
||||
Background (default): Hintergrund (Standard):
|
||||
Fill the expanded area with your background color or transparent pixels Den erweiterten Bereich mit der Hintergrundfarbe oder transparenten Pixeln füllen
|
||||
Content-aware fill Inhaltsbasiert füllen
|
||||
Sample content from part of the image and use it to fill a small area Inhalte aus einem Teil des Bildes entnehmen und damit einen kleinen Bereich füllen
|
||||
Reset the crop box, image rotation, and aspect ratio settings Zuschnittrahmen, Bilddrehung und Seitenverhältniseinstellungen zurücksetzen
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4330,3 +4330,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Σμίκρυνση καμβά στο περιεχόμενο κατά την αποθήκευση
|
||||
Move Toolbar to the Right Μετακίνηση γραμμής εργαλείων δεξιά
|
||||
Move Toolbar to the Left Μετακίνηση γραμμής εργαλείων αριστερά
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Επιλογή προκαθορισμένης αναλογίας ή μεγέθους περικοπής
|
||||
Set the aspect ratio for the crop box Ορισμός αναλογίας για το πλαίσιο περικοπής
|
||||
Clear aspect ratio values Εκκαθάριση τιμών αναλογίας
|
||||
Set the overlay options for the Crop Tool Ορισμός επιλογών επικάλυψης περικοπής
|
||||
Determines if pixel data outside the crop box is retained or deleted Καθορίζει αν τα εικονοστοιχεία εκτός του πλαισίου περικοπής διατηρούνται ή διαγράφονται
|
||||
How expanded crop area gets filled Πώς γεμίζει η εκτεταμένη περιοχή περικοπής
|
||||
Displays pop-up help for the fill methods Εμφανίζει αναδυόμενη βοήθεια για τις μεθόδους γεμίσματος
|
||||
Fill options Επιλογές γεμίσματος
|
||||
Background (default): Φόντο (προεπιλογή):
|
||||
Fill the expanded area with your background color or transparent pixels Γέμισε την εκτεταμένη περιοχή με το χρώμα φόντου ή διαφανή εικονοστοιχεία
|
||||
Content-aware fill Γέμισμα βάσει περιεχομένου
|
||||
Sample content from part of the image and use it to fill a small area Δειγματοληψία περιεχομένου από μέρος της εικόνας για γέμισμα μικρής περιοχής
|
||||
Reset the crop box, image rotation, and aspect ratio settings Επαναφορά πλαισίου περικοπής, περιστροφής εικόνας και αναλογίας
|
||||
|
Can't render this file because it contains an unexpected character in line 47 and column 53.
|
@@ -4528,3 +4528,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Reducir el lienzo al contenido al guardar
|
||||
Move Toolbar to the Right Mover la barra de herramientas a la derecha
|
||||
Move Toolbar to the Left Mover la barra de herramientas a la izquierda
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Elegir un formato de imagen o un tamaño de recorte predefinido
|
||||
Set the aspect ratio for the crop box Definir la proporción del cuadro de recorte
|
||||
Clear aspect ratio values Borrar los valores de proporción
|
||||
Set the overlay options for the Crop Tool Definir las opciones de superposición del recorte
|
||||
Determines if pixel data outside the crop box is retained or deleted Determina si los píxeles fuera del cuadro de recorte se conservan o se eliminan
|
||||
How expanded crop area gets filled Cómo se rellena el área de recorte ampliada
|
||||
Displays pop-up help for the fill methods Muestra la ayuda emergente de los métodos de relleno
|
||||
Fill options Opciones de relleno
|
||||
Background (default): Fondo (predeterminado):
|
||||
Fill the expanded area with your background color or transparent pixels Rellenar el área ampliada con el color de fondo o píxeles transparentes
|
||||
Content-aware fill Relleno según el contenido
|
||||
Sample content from part of the image and use it to fill a small area Tomar contenido de parte de la imagen para rellenar un área pequeña
|
||||
Reset the crop box, image rotation, and aspect ratio settings Restablecer el cuadro de recorte, la rotación de la imagen y la proporción
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 47.
|
@@ -4831,3 +4831,17 @@ cameraRaw White Balance: As Shot Valkotasapaino: kuvauksen mukainen
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW-kehityksen asetukset tallennettu tiedostoon {file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Valitse esiasetettu kuvasuhde tai rajaustittikoko
|
||||
Set the aspect ratio for the crop box Aseta rajauskehyksen kuvasuhde
|
||||
Clear aspect ratio values Tyhjennä kuvasuhteen arvot
|
||||
Set the overlay options for the Crop Tool Aseta rajauksen peittokuvan asetukset
|
||||
Determines if pixel data outside the crop box is retained or deleted Määrittää, säilytetäänkö rajauskehyksen ulkopuoliset pikselit vai poistetaanko ne
|
||||
How expanded crop area gets filled Miten laajennettu rajausalue täytetään
|
||||
Displays pop-up help for the fill methods Näyttää ponnahdusohjeen täyttötavoista
|
||||
Fill options Täyttöasetukset
|
||||
Background (default): Tausta (oletus):
|
||||
Fill the expanded area with your background color or transparent pixels Täytä laajennettu alue taustavärillä tai läpinäkyvillä pikseleillä
|
||||
Content-aware fill Sisältöön perustuva täyttö
|
||||
Sample content from part of the image and use it to fill a small area Ota sisältöä kuvan osasta pienen alueen täyttämiseksi
|
||||
Reset the crop box, image rotation, and aspect ratio settings Palauta rajauskehys, kuvan kierto ja kuvasuhde
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4649,3 +4649,17 @@ shape Appearance Apparence
|
||||
Shrinkwrap Canvas on Save Réduire le canevas au contenu à l'enregistrement
|
||||
Move Toolbar to the Right Déplacer la barre d'outils à droite
|
||||
Move Toolbar to the Left Déplacer la barre d'outils à gauche
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Choisir un format d'image ou une taille de recadrage prédéfini
|
||||
Set the aspect ratio for the crop box Définir le format du cadre de recadrage
|
||||
Clear aspect ratio values Effacer les valeurs de format
|
||||
Set the overlay options for the Crop Tool Définir les options de superposition du recadrage
|
||||
Determines if pixel data outside the crop box is retained or deleted Détermine si les pixels en dehors du cadre de recadrage sont conservés ou supprimés
|
||||
How expanded crop area gets filled Comment la zone de recadrage étendue est remplie
|
||||
Displays pop-up help for the fill methods Affiche l'aide contextuelle des méthodes de remplissage
|
||||
Fill options Options de remplissage
|
||||
Background (default): Arrière-plan (par défaut) :
|
||||
Fill the expanded area with your background color or transparent pixels Remplir la zone étendue avec la couleur d'arrière-plan ou des pixels transparents
|
||||
Content-aware fill Remplissage basé sur le contenu
|
||||
Sample content from part of the image and use it to fill a small area Prélever le contenu d'une partie de l'image pour remplir une petite zone
|
||||
Reset the crop box, image rotation, and aspect ratio settings Réinitialiser le cadre de recadrage, la rotation de l'image et le format
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4573,3 +4573,17 @@ navigator Zoom תקריב
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} הגדרות פיתוח RAW נשמרו ב־{file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size בחר יחס גובה-רוחב או גודל חיתוך מוגדרים מראש
|
||||
Set the aspect ratio for the crop box הגדר את יחס הגובה-רוחב של מסגרת החיתוך
|
||||
Clear aspect ratio values נקה ערכי יחס גובה-רוחב
|
||||
Set the overlay options for the Crop Tool הגדר אפשרויות שכבת־על לחיתוך
|
||||
Determines if pixel data outside the crop box is retained or deleted קובע אם פיקסלים מחוץ למסגרת החיתוך נשמרים או נמחקים
|
||||
How expanded crop area gets filled כיצד מתמלא אזור החיתוך המורחב
|
||||
Displays pop-up help for the fill methods מציג עזרה קופצת על שיטות המילוי
|
||||
Fill options אפשרויות מילוי
|
||||
Background (default): רקע (ברירת מחדל):
|
||||
Fill the expanded area with your background color or transparent pixels מלא את האזור המורחב בצבע הרקע או בפיקסלים שקופים
|
||||
Content-aware fill מילוי לפי תוכן
|
||||
Sample content from part of the image and use it to fill a small area דגום תוכן מחלק מהתמונה כדי למלא אזור קטן
|
||||
Reset the crop box, image rotation, and aspect ratio settings אפס את מסגרת החיתוך, סיבוב התמונה ויחס הגובה-רוחב
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -702,3 +702,17 @@ cameraRaw Yellow पीला
|
||||
RAW Develop Filter RAW डेवलप फ़िल्टर
|
||||
RAW Develop Filter… RAW डेवलप फ़िल्टर…
|
||||
Loaded RAW Develop settings from {file} ({n} not supported) {file} से RAW डेवलप सेटिंग्स लोड की गईं ({n} समर्थित नहीं)
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size पहले से सेट पक्षानुपात या क्रॉप आकार चुनें
|
||||
Set the aspect ratio for the crop box क्रॉप फ़्रेम का पक्षानुपात सेट करें
|
||||
Clear aspect ratio values पक्षानुपात मान साफ़ करें
|
||||
Set the overlay options for the Crop Tool क्रॉप ओवरले के विकल्प सेट करें
|
||||
Determines if pixel data outside the crop box is retained or deleted निर्धारित करता है कि क्रॉप फ़्रेम के बाहर के पिक्सेल रखे जाएँ या हटाए जाएँ
|
||||
How expanded crop area gets filled विस्तारित क्रॉप क्षेत्र कैसे भरा जाता है
|
||||
Displays pop-up help for the fill methods भरण विधियों के लिए पॉप-अप सहायता दिखाता है
|
||||
Fill options भरण विकल्प
|
||||
Background (default): पृष्ठभूमि (डिफ़ॉल्ट):
|
||||
Fill the expanded area with your background color or transparent pixels विस्तारित क्षेत्र को पृष्ठभूमि रंग या पारदर्शी पिक्सेल से भरें
|
||||
Content-aware fill सामग्री-आधारित भरण
|
||||
Sample content from part of the image and use it to fill a small area छोटा क्षेत्र भरने के लिए छवि के हिस्से से सामग्री लें
|
||||
Reset the crop box, image rotation, and aspect ratio settings क्रॉप फ़्रेम, छवि घुमाव और पक्षानुपात रीसेट करें
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4535,3 +4535,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Vászon összehúzása a tartalomra mentéskor
|
||||
Move Toolbar to the Right Eszköztár áthelyezése jobbra
|
||||
Move Toolbar to the Left Eszköztár áthelyezése balra
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Előre beállított képarány vagy kivágási méret kiválasztása
|
||||
Set the aspect ratio for the crop box A kivágási keret képarányának beállítása
|
||||
Clear aspect ratio values A képarány értékeinek törlése
|
||||
Set the overlay options for the Crop Tool A kivágási fedvény beállításainak megadása
|
||||
Determines if pixel data outside the crop box is retained or deleted Meghatározza, hogy a kivágási kereten kívüli képpontok megmaradnak vagy törlődnek
|
||||
How expanded crop area gets filled Hogyan töltődik ki a kibővített kivágási terület
|
||||
Displays pop-up help for the fill methods Felugró súgó a kitöltési módokhoz
|
||||
Fill options Kitöltési beállítások
|
||||
Background (default): Háttér (alapértelmezett):
|
||||
Fill the expanded area with your background color or transparent pixels A kibővített terület kitöltése a háttérszínnel vagy átlátszó képpontokkal
|
||||
Content-aware fill Tartalom alapú kitöltés
|
||||
Sample content from part of the image and use it to fill a small area Tartalom mintavétele a kép egy részéből egy kis terület kitöltéséhez
|
||||
Reset the crop box, image rotation, and aspect ratio settings A kivágási keret, a képelforgatás és a képarány visszaállítása
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -3655,3 +3655,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
# RAW Develop feature labels
|
||||
RAW Develop Pengembangan RAW
|
||||
RAW Develop Filter Filter Pengembangan RAW
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Pilih rasio aspek atau ukuran pangkas yang sudah ditetapkan
|
||||
Set the aspect ratio for the crop box Atur rasio aspek untuk bingkai pangkas
|
||||
Clear aspect ratio values Hapus nilai rasio aspek
|
||||
Set the overlay options for the Crop Tool Atur opsi hamparan pangkas
|
||||
Determines if pixel data outside the crop box is retained or deleted Menentukan apakah piksel di luar bingkai pangkas dipertahankan atau dihapus
|
||||
How expanded crop area gets filled Bagaimana area pangkas yang diperluas diisi
|
||||
Displays pop-up help for the fill methods Menampilkan bantuan pop-up untuk metode pengisian
|
||||
Fill options Opsi pengisian
|
||||
Background (default): Latar belakang (default):
|
||||
Fill the expanded area with your background color or transparent pixels Isi area yang diperluas dengan warna latar belakang atau piksel transparan
|
||||
Content-aware fill Pengisian berdasarkan konten
|
||||
Sample content from part of the image and use it to fill a small area Ambil konten dari sebagian gambar untuk mengisi area kecil
|
||||
Reset the crop box, image rotation, and aspect ratio settings Atur ulang bingkai pangkas, rotasi gambar, dan rasio aspek
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 47.
|
@@ -4725,3 +4725,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Riduci il quadro al contenuto al salvataggio
|
||||
Move Toolbar to the Right Sposta la barra degli strumenti a destra
|
||||
Move Toolbar to the Left Sposta la barra degli strumenti a sinistra
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Scegli un formato o una dimensione di ritaglio predefiniti
|
||||
Set the aspect ratio for the crop box Imposta le proporzioni del riquadro di ritaglio
|
||||
Clear aspect ratio values Cancella i valori delle proporzioni
|
||||
Set the overlay options for the Crop Tool Imposta le opzioni della sovrapposizione di ritaglio
|
||||
Determines if pixel data outside the crop box is retained or deleted Determina se i pixel esterni al riquadro di ritaglio vengono conservati o eliminati
|
||||
How expanded crop area gets filled Come viene riempita l'area di ritaglio estesa
|
||||
Displays pop-up help for the fill methods Mostra la guida a comparsa sui metodi di riempimento
|
||||
Fill options Opzioni di riempimento
|
||||
Background (default): Sfondo (predefinito):
|
||||
Fill the expanded area with your background color or transparent pixels Riempie l'area estesa con il colore di sfondo o pixel trasparenti
|
||||
Content-aware fill Riempimento in base al contenuto
|
||||
Sample content from part of the image and use it to fill a small area Preleva contenuto da una parte dell'immagine per riempire una piccola area
|
||||
Reset the crop box, image rotation, and aspect ratio settings Reimposta il riquadro di ritaglio, la rotazione dell'immagine e le proporzioni
|
||||
|
Can't render this file because it contains an unexpected character in line 79 and column 53.
|
@@ -4299,3 +4299,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save 保存時にカンバスを内容に合わせて縮小
|
||||
Move Toolbar to the Right ツールバーを右へ移動
|
||||
Move Toolbar to the Left ツールバーを左へ移動
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size プリセットのアスペクト比または切り抜きサイズを選択
|
||||
Set the aspect ratio for the crop box 切り抜き枠のアスペクト比を設定
|
||||
Clear aspect ratio values アスペクト比の値をクリア
|
||||
Set the overlay options for the Crop Tool 切り抜きオーバーレイのオプションを設定
|
||||
Determines if pixel data outside the crop box is retained or deleted 切り抜き枠の外側のピクセルを保持するか削除するかを指定
|
||||
How expanded crop area gets filled 拡張された切り抜き領域の塗りつぶし方法
|
||||
Displays pop-up help for the fill methods 塗りつぶし方法のポップアップヘルプを表示
|
||||
Fill options 塗りつぶしオプション
|
||||
Background (default): 背景 (既定):
|
||||
Fill the expanded area with your background color or transparent pixels 拡張領域を背景色または透明ピクセルで塗りつぶす
|
||||
Content-aware fill コンテンツに応じた塗りつぶし
|
||||
Sample content from part of the image and use it to fill a small area 画像の一部から内容をサンプリングして小さな領域を塗りつぶす
|
||||
Reset the crop box, image rotation, and aspect ratio settings 切り抜き枠、画像の回転、アスペクト比をリセット
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4716,3 +4716,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW დამუშავების პარამეტრები შენახულია {file}-ში
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size აირჩიეთ წინასწარ დაყენებული ასპექტის თანაფარდობა ან ჩამოჭრის ზომა
|
||||
Set the aspect ratio for the crop box დააყენეთ ასპექტის თანაფარდობა ჩამოჭრის ჩარჩოსთვის
|
||||
Clear aspect ratio values გაასუფთავეთ ასპექტის თანაფარდობის მნიშვნელობები
|
||||
Set the overlay options for the Crop Tool დააყენეთ ჩამოჭრის გადაფარვის პარამეტრები
|
||||
Determines if pixel data outside the crop box is retained or deleted განსაზღვრავს, შენარჩუნდება თუ წაიშლება ჩამოჭრის ჩარჩოს გარეთ არსებული პიქსელები
|
||||
How expanded crop area gets filled როგორ ივსება გაფართოებული ჩამოჭრის არე
|
||||
Displays pop-up help for the fill methods აჩვენებს ამომხტარ დახმარებას შევსების მეთოდებზე
|
||||
Fill options შევსების პარამეტრები
|
||||
Background (default): ფონი (ნაგულისხმევი):
|
||||
Fill the expanded area with your background color or transparent pixels შეავსეთ გაფართოებული არე ფონის ფერით ან გამჭვირვალე პიქსელებით
|
||||
Content-aware fill შიგთავსზე დაფუძნებული შევსება
|
||||
Sample content from part of the image and use it to fill a small area აიღეთ შიგთავსი სურათის ნაწილიდან პატარა არის შესავსებად
|
||||
Reset the crop box, image rotation, and aspect ratio settings ჩამოჭრის ჩარჩოს, სურათის ბრუნვისა და ასპექტის თანაფარდობის აღდგენა
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4204,3 +4204,17 @@ shape Appearance 화면 모양
|
||||
Shrinkwrap Canvas on Save 저장 시 캔버스를 내용에 맞게 축소
|
||||
Move Toolbar to the Right 도구 모음을 오른쪽으로 이동
|
||||
Move Toolbar to the Left 도구 모음을 왼쪽으로 이동
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size 사전 설정 종횡비 또는 자르기 크기 선택
|
||||
Set the aspect ratio for the crop box 자르기 프레임의 종횡비 설정
|
||||
Clear aspect ratio values 종횡비 값 지우기
|
||||
Set the overlay options for the Crop Tool 자르기 오버레이 옵션 설정
|
||||
Determines if pixel data outside the crop box is retained or deleted 자르기 프레임 밖의 픽셀을 유지할지 삭제할지 결정
|
||||
How expanded crop area gets filled 확장된 자르기 영역을 채우는 방법
|
||||
Displays pop-up help for the fill methods 채우기 방법에 대한 팝업 도움말 표시
|
||||
Fill options 채우기 옵션
|
||||
Background (default): 배경 (기본값):
|
||||
Fill the expanded area with your background color or transparent pixels 확장된 영역을 배경색 또는 투명 픽셀로 채우기
|
||||
Content-aware fill 내용 기반 채우기
|
||||
Sample content from part of the image and use it to fill a small area 이미지의 일부에서 내용을 샘플링하여 작은 영역 채우기
|
||||
Reset the crop box, image rotation, and aspect ratio settings 자르기 프레임, 이미지 회전 및 종횡비 재설정
|
||||
|
Can't render this file because it contains an unexpected character in line 63 and column 53.
|
@@ -4830,3 +4830,17 @@ cameraRaw White Balance: As Shot Hvitbalanse: som fotografert
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW-fremkallingsinnstillinger lagret i {file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Velg et forhåndsinnstilt bildeforhold eller beskjæringsstørrelse
|
||||
Set the aspect ratio for the crop box Angi bildeforholdet for beskjæringsrammen
|
||||
Clear aspect ratio values Tøm verdier for bildeforhold
|
||||
Set the overlay options for the Crop Tool Angi alternativer for beskjæringsoverlegget
|
||||
Determines if pixel data outside the crop box is retained or deleted Bestemmer om piksler utenfor beskjæringsrammen beholdes eller slettes
|
||||
How expanded crop area gets filled Hvordan det utvidede beskjæringsområdet fylles
|
||||
Displays pop-up help for the fill methods Viser hurtighjelp for fyllmetodene
|
||||
Fill options Fyllalternativer
|
||||
Background (default): Bakgrunn (standard):
|
||||
Fill the expanded area with your background color or transparent pixels Fyll det utvidede området med bakgrunnsfargen eller gjennomsiktige piksler
|
||||
Content-aware fill Innholdsbasert fylling
|
||||
Sample content from part of the image and use it to fill a small area Hent innhold fra en del av bildet for å fylle et lite område
|
||||
Reset the crop box, image rotation, and aspect ratio settings Tilbakestill beskjæringsrammen, bilderotasjonen og bildeforholdet
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4382,3 +4382,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Canvas bij opslaan verkleinen tot de inhoud
|
||||
Move Toolbar to the Right Werkbalk naar rechts verplaatsen
|
||||
Move Toolbar to the Left Werkbalk naar links verplaatsen
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Een vooraf ingestelde beeldverhouding of uitsnijgrootte kiezen
|
||||
Set the aspect ratio for the crop box De beeldverhouding voor het uitsnijkader instellen
|
||||
Clear aspect ratio values Waarden voor beeldverhouding wissen
|
||||
Set the overlay options for the Crop Tool Opties voor de uitsnij-overlay instellen
|
||||
Determines if pixel data outside the crop box is retained or deleted Bepaalt of pixels buiten het uitsnijkader behouden of verwijderd worden
|
||||
How expanded crop area gets filled Hoe het uitgebreide uitsnijgebied wordt gevuld
|
||||
Displays pop-up help for the fill methods Toont pop-uphelp over de vulmethoden
|
||||
Fill options Vulopties
|
||||
Background (default): Achtergrond (standaard):
|
||||
Fill the expanded area with your background color or transparent pixels Het uitgebreide gebied vullen met de achtergrondkleur of transparante pixels
|
||||
Content-aware fill Op inhoud gebaseerd vullen
|
||||
Sample content from part of the image and use it to fill a small area Inhoud uit een deel van de afbeelding halen om een klein gebied te vullen
|
||||
Reset the crop box, image rotation, and aspect ratio settings Het uitsnijkader, de beeldrotatie en de beeldverhouding resetten
|
||||
|
Can't render this file because it contains an unexpected character in line 8 and column 34.
|
@@ -4246,3 +4246,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Przytnij płótno do zawartości przy zapisie
|
||||
Move Toolbar to the Right Przenieś pasek narzędzi w prawo
|
||||
Move Toolbar to the Left Przenieś pasek narzędzi w lewo
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Wybierz wstępnie ustawiony współczynnik proporcji lub rozmiar kadrowania
|
||||
Set the aspect ratio for the crop box Ustaw współczynnik proporcji ramki kadrowania
|
||||
Clear aspect ratio values Wyczyść wartości proporcji
|
||||
Set the overlay options for the Crop Tool Ustaw opcje nakładki kadrowania
|
||||
Determines if pixel data outside the crop box is retained or deleted Określa, czy piksele poza ramką kadrowania są zachowywane, czy usuwane
|
||||
How expanded crop area gets filled Jak wypełniany jest rozszerzony obszar kadrowania
|
||||
Displays pop-up help for the fill methods Pokazuje pomoc wyskakującą dotyczącą metod wypełniania
|
||||
Fill options Opcje wypełniania
|
||||
Background (default): Tło (domyślne):
|
||||
Fill the expanded area with your background color or transparent pixels Wypełnij rozszerzony obszar kolorem tła lub przezroczystymi pikselami
|
||||
Content-aware fill Wypełnianie oparte na zawartości
|
||||
Sample content from part of the image and use it to fill a small area Pobierz zawartość z części obrazu, aby wypełnić mały obszar
|
||||
Reset the crop box, image rotation, and aspect ratio settings Zresetuj ramkę kadrowania, obrót obrazu i proporcje
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4542,3 +4542,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Reduzir a tela ao conteúdo ao salvar
|
||||
Move Toolbar to the Right Mover a barra de ferramentas para a direita
|
||||
Move Toolbar to the Left Mover a barra de ferramentas para a esquerda
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Escolher uma proporção ou um tamanho de corte predefinido
|
||||
Set the aspect ratio for the crop box Definir a proporção da moldura de corte
|
||||
Clear aspect ratio values Limpar os valores de proporção
|
||||
Set the overlay options for the Crop Tool Definir as opções de sobreposição do corte
|
||||
Determines if pixel data outside the crop box is retained or deleted Determina se os pixels fora da moldura de corte são mantidos ou excluídos
|
||||
How expanded crop area gets filled Como a área de corte expandida é preenchida
|
||||
Displays pop-up help for the fill methods Mostra a ajuda pop-up dos métodos de preenchimento
|
||||
Fill options Opções de preenchimento
|
||||
Background (default): Plano de fundo (padrão):
|
||||
Fill the expanded area with your background color or transparent pixels Preencher a área expandida com a cor de fundo ou pixels transparentes
|
||||
Content-aware fill Preenchimento com base no conteúdo
|
||||
Sample content from part of the image and use it to fill a small area Amostra o conteúdo de parte da imagem para preencher uma área pequena
|
||||
Reset the crop box, image rotation, and aspect ratio settings Redefinir a moldura de corte, a rotação da imagem e a proporção
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4615,3 +4615,17 @@ navigator Zoom Zoom
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} Setările de developare RAW au fost salvate în {file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Alegeți un raport de aspect sau o dimensiune de decupare prestabilită
|
||||
Set the aspect ratio for the crop box Setați raportul de aspect pentru cadrul de decupare
|
||||
Clear aspect ratio values Goliți valorile raportului de aspect
|
||||
Set the overlay options for the Crop Tool Setați opțiunile suprapunerii de decupare
|
||||
Determines if pixel data outside the crop box is retained or deleted Stabilește dacă pixelii din afara cadrului de decupare sunt păstrați sau șterși
|
||||
How expanded crop area gets filled Cum se umple zona de decupare extinsă
|
||||
Displays pop-up help for the fill methods Afișează ajutorul contextual pentru metodele de umplere
|
||||
Fill options Opțiuni de umplere
|
||||
Background (default): Fundal (implicit):
|
||||
Fill the expanded area with your background color or transparent pixels Umple zona extinsă cu culoarea de fundal sau cu pixeli transparenți
|
||||
Content-aware fill Umplere în funcție de conținut
|
||||
Sample content from part of the image and use it to fill a small area Preia conținut dintr-o parte a imaginii pentru a umple o zonă mică
|
||||
Reset the crop box, image rotation, and aspect ratio settings Resetează cadrul de decupare, rotirea imaginii și raportul de aspect
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 47.
|
@@ -4811,3 +4811,17 @@ shape Appearance Оформление
|
||||
Shrinkwrap Canvas on Save Уменьшать холст до содержимого при сохранении
|
||||
Move Toolbar to the Right Переместить панель инструментов вправо
|
||||
Move Toolbar to the Left Переместить панель инструментов влево
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Выберите предустановленное соотношение сторон или размер кадрирования
|
||||
Set the aspect ratio for the crop box Задайте соотношение сторон рамки кадрирования
|
||||
Clear aspect ratio values Очистить значения соотношения сторон
|
||||
Set the overlay options for the Crop Tool Настроить параметры наложения кадрирования
|
||||
Determines if pixel data outside the crop box is retained or deleted Определяет, сохраняются или удаляются пиксели за пределами рамки кадрирования
|
||||
How expanded crop area gets filled Как заполняется расширенная область кадрирования
|
||||
Displays pop-up help for the fill methods Показывает всплывающую справку о методах заполнения
|
||||
Fill options Параметры заполнения
|
||||
Background (default): Фон (по умолчанию):
|
||||
Fill the expanded area with your background color or transparent pixels Заполнить расширенную область цветом фона или прозрачными пикселями
|
||||
Content-aware fill Заполнение с учётом содержимого
|
||||
Sample content from part of the image and use it to fill a small area Взять содержимое из части изображения для заполнения небольшой области
|
||||
Reset the crop box, image rotation, and aspect ratio settings Сбросить рамку кадрирования, поворот изображения и соотношение сторон
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4692,3 +4692,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Smanji platno na sadržaj pri čuvanju
|
||||
Move Toolbar to the Right Premesti traku sa alatkama desno
|
||||
Move Toolbar to the Left Premesti traku sa alatkama levo
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Izaberite unapred podešenu razmeru ili veličinu isecanja
|
||||
Set the aspect ratio for the crop box Podesite razmeru okvira za isecanje
|
||||
Clear aspect ratio values Obrišite vrednosti razmere
|
||||
Set the overlay options for the Crop Tool Podesite opcije preklapanja isecanja
|
||||
Determines if pixel data outside the crop box is retained or deleted Određuje da li se pikseli izvan okvira za isecanje zadržavaju ili brišu
|
||||
How expanded crop area gets filled Kako se popunjava proširena oblast isecanja
|
||||
Displays pop-up help for the fill methods Prikazuje iskačuću pomoć za metode popunjavanja
|
||||
Fill options Opcije popunjavanja
|
||||
Background (default): Pozadina (podrazumevano):
|
||||
Fill the expanded area with your background color or transparent pixels Popunite proširenu oblast bojom pozadine ili providnim pikselima
|
||||
Content-aware fill Popunjavanje prema sadržaju
|
||||
Sample content from part of the image and use it to fill a small area Uzmite sadržaj iz dela slike da popunite malu oblast
|
||||
Reset the crop box, image rotation, and aspect ratio settings Vratite okvir za isecanje, rotaciju slike i razmeru
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4828,3 +4828,17 @@ cameraRaw White Balance: As Shot Vitbalans: som tagen
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW-framkallningsinställningar sparade i {file}
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Välj ett förinställt bildförhållande eller beskärningsstorlek
|
||||
Set the aspect ratio for the crop box Ange bildförhållandet för beskärningsramen
|
||||
Clear aspect ratio values Rensa värden för bildförhållande
|
||||
Set the overlay options for the Crop Tool Ange alternativ för beskärningsöverlägget
|
||||
Determines if pixel data outside the crop box is retained or deleted Avgör om bildpunkter utanför beskärningsramen behålls eller tas bort
|
||||
How expanded crop area gets filled Hur det utökade beskärningsområdet fylls
|
||||
Displays pop-up help for the fill methods Visar popup-hjälp för fyllningsmetoderna
|
||||
Fill options Fyllningsalternativ
|
||||
Background (default): Bakgrund (standard):
|
||||
Fill the expanded area with your background color or transparent pixels Fyll det utökade området med bakgrundsfärgen eller genomskinliga bildpunkter
|
||||
Content-aware fill Innehållsbaserad fyllning
|
||||
Sample content from part of the image and use it to fill a small area Hämta innehåll från en del av bilden för att fylla ett litet område
|
||||
Reset the crop box, image rotation, and aspect ratio settings Återställ beskärningsramen, bildrotationen och bildförhållandet
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4274,3 +4274,17 @@ navigator Zoom பெரிதாக்கல்
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW உருவாக்க அமைப்புகள் {file} இல் சேமிக்கப்பட்டன
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size முன்னமைக்கப்பட்ட விகிதம் அல்லது வெட்டு அளவைத் தேர்ந்தெடுக்கவும்
|
||||
Set the aspect ratio for the crop box வெட்டு சட்டகத்தின் விகிதத்தை அமைக்கவும்
|
||||
Clear aspect ratio values விகித மதிப்புகளை அழிக்கவும்
|
||||
Set the overlay options for the Crop Tool வெட்டு மேலடுக்கு விருப்பங்களை அமைக்கவும்
|
||||
Determines if pixel data outside the crop box is retained or deleted வெட்டு சட்டகத்திற்கு வெளியே உள்ள பிக்சல்கள் வைக்கப்படுமா நீக்கப்படுமா என்பதை தீர்மானிக்கிறது
|
||||
How expanded crop area gets filled விரிவாக்கப்பட்ட வெட்டுப் பகுதி எவ்வாறு நிரப்பப்படுகிறது
|
||||
Displays pop-up help for the fill methods நிரப்பும் முறைகளுக்கான பாப்-அப் உதவியைக் காட்டுகிறது
|
||||
Fill options நிரப்பு விருப்பங்கள்
|
||||
Background (default): பின்னணி (இயல்புநிலை):
|
||||
Fill the expanded area with your background color or transparent pixels விரிவாக்கப்பட்ட பகுதியை பின்னணி நிறம் அல்லது ஒளிஊடுருவும் பிக்சல்களால் நிரப்பவும்
|
||||
Content-aware fill உள்ளடக்க அடிப்படையிலான நிரப்பு
|
||||
Sample content from part of the image and use it to fill a small area சிறிய பகுதியை நிரப்ப படத்தின் ஒரு பகுதியிலிருந்து உள்ளடக்கத்தை மாதிரி எடுக்கவும்
|
||||
Reset the crop box, image rotation, and aspect ratio settings வெட்டு சட்டகம், படச் சுழற்சி மற்றும் விகிதத்தை மீட்டமைக்கவும்
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 16.
|
@@ -4772,3 +4772,17 @@ cameraRaw White Balance: As Shot สมดุลแสงขาว: เท่า
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} บันทึกการตั้งค่าการปรับแต่ง RAW ไปยัง {file} แล้ว
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size เลือกอัตราส่วนหรือขนาดครอปที่ตั้งไว้ล่วงหน้า
|
||||
Set the aspect ratio for the crop box กำหนดอัตราส่วนสำหรับกรอบครอป
|
||||
Clear aspect ratio values ล้างค่าอัตราส่วน
|
||||
Set the overlay options for the Crop Tool กำหนดตัวเลือกการซ้อนทับการครอป
|
||||
Determines if pixel data outside the crop box is retained or deleted กำหนดว่าเก็บหรือลบพิกเซลนอกกรอบครอป
|
||||
How expanded crop area gets filled วิธีเติมพื้นที่ครอปที่ขยายออก
|
||||
Displays pop-up help for the fill methods แสดงความช่วยเหลือแบบป๊อปอัปสำหรับวิธีการเติม
|
||||
Fill options ตัวเลือกการเติม
|
||||
Background (default): พื้นหลัง (ค่าเริ่มต้น):
|
||||
Fill the expanded area with your background color or transparent pixels เติมพื้นที่ที่ขยายด้วยสีพื้นหลังหรือพิกเซลโปร่งใส
|
||||
Content-aware fill เติมตามเนื้อหา
|
||||
Sample content from part of the image and use it to fill a small area สุ่มเนื้อหาจากส่วนหนึ่งของภาพเพื่อเติมพื้นที่เล็ก ๆ
|
||||
Reset the crop box, image rotation, and aspect ratio settings รีเซ็ตกรอบครอป การหมุนภาพ และอัตราส่วน
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4359,3 +4359,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Kaydederken Tuvali İçeriğe Göre Küçült
|
||||
Move Toolbar to the Right Araç çubuğunu sağa taşı
|
||||
Move Toolbar to the Left Araç çubuğunu sola taşı
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Ön ayarlı bir en-boy oranı veya kırpma boyutu seçin
|
||||
Set the aspect ratio for the crop box Kırpma çerçevesinin en-boy oranını ayarlayın
|
||||
Clear aspect ratio values En-boy oranı değerlerini temizleyin
|
||||
Set the overlay options for the Crop Tool Kırpma yer paylaşımı seçeneklerini ayarlayın
|
||||
Determines if pixel data outside the crop box is retained or deleted Kırpma çerçevesinin dışındaki piksellerin korunup silineceğini belirler
|
||||
How expanded crop area gets filled Genişletilmiş kırpma alanının nasıl doldurulacağı
|
||||
Displays pop-up help for the fill methods Dolgu yöntemleri için açılır yardımı gösterir
|
||||
Fill options Dolgu seçenekleri
|
||||
Background (default): Arka plan (varsayılan):
|
||||
Fill the expanded area with your background color or transparent pixels Genişletilmiş alanı arka plan rengiyle veya saydam piksellerle doldurun
|
||||
Content-aware fill İçeriğe göre doldurma
|
||||
Sample content from part of the image and use it to fill a small area Küçük bir alanı doldurmak için görüntünün bir bölümünden içerik örnekleyin
|
||||
Reset the crop box, image rotation, and aspect ratio settings Kırpma çerçevesini, görüntü döndürmesini ve en-boy oranını sıfırlayın
|
||||
|
Can't render this file because it contains an unexpected character in line 8 and column 34.
|
@@ -4339,3 +4339,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Зменшувати полотно до вмісту під час збереження
|
||||
Move Toolbar to the Right Перемістити панель інструментів праворуч
|
||||
Move Toolbar to the Left Перемістити панель інструментів ліворуч
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Виберіть попередньо задане співвідношення сторін або розмір обрізання
|
||||
Set the aspect ratio for the crop box Задайте співвідношення сторін рамки обрізання
|
||||
Clear aspect ratio values Очистити значення співвідношення сторін
|
||||
Set the overlay options for the Crop Tool Налаштувати параметри накладення обрізання
|
||||
Determines if pixel data outside the crop box is retained or deleted Визначає, чи зберігаються або видаляються пікселі за межами рамки обрізання
|
||||
How expanded crop area gets filled Як заповнюється розширена область обрізання
|
||||
Displays pop-up help for the fill methods Показує спливаючу довідку про методи заповнення
|
||||
Fill options Параметри заповнення
|
||||
Background (default): Фон (типово):
|
||||
Fill the expanded area with your background color or transparent pixels Заповнити розширену область кольором фону або прозорими пікселями
|
||||
Content-aware fill Заповнення за вмістом
|
||||
Sample content from part of the image and use it to fill a small area Взяти вміст із частини зображення, щоб заповнити невелику область
|
||||
Reset the crop box, image rotation, and aspect ratio settings Скинути рамку обрізання, обертання зображення та співвідношення сторін
|
||||
|
Can't render this file because it contains an unexpected character in line 152 and column 53.
|
@@ -4573,3 +4573,17 @@ navigator Zoom زوم
|
||||
|
||||
# RAW Develop feature labels
|
||||
Saved RAW Develop settings to {file} RAW ڈیولپمنٹ کی ترتیبات {file} میں محفوظ ہو گئیں
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size پہلے سے طے شدہ پہلو تناسب یا تراشنے کا سائز منتخب کریں
|
||||
Set the aspect ratio for the crop box تراشنے کے فریم کے لیے پہلو تناسب مقرر کریں
|
||||
Clear aspect ratio values پہلو تناسب کی اقدار صاف کریں
|
||||
Set the overlay options for the Crop Tool تراشنے کے اوورلے کے اختیارات مقرر کریں
|
||||
Determines if pixel data outside the crop box is retained or deleted طے کرتا ہے کہ تراشنے کے فریم سے باہر کے پکسل محفوظ رہیں یا حذف ہوں
|
||||
How expanded crop area gets filled پھیلائی گئی تراشنے کی جگہ کیسے بھری جائے
|
||||
Displays pop-up help for the fill methods بھرنے کے طریقوں کے لیے پاپ اپ مدد دکھاتا ہے
|
||||
Fill options بھرنے کے اختیارات
|
||||
Background (default): پس منظر (ڈیفالٹ):
|
||||
Fill the expanded area with your background color or transparent pixels پھیلائی گئی جگہ کو پس منظر کے رنگ یا شفاف پکسل سے بھریں
|
||||
Content-aware fill مواد کی بنیاد پر بھرنا
|
||||
Sample content from part of the image and use it to fill a small area چھوٹی جگہ بھرنے کے لیے تصویر کے حصے سے مواد لیں
|
||||
Reset the crop box, image rotation, and aspect ratio settings تراشنے کا فریم، تصویر کی گردش اور پہلو تناسب دوبارہ ترتیب دیں
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -4134,3 +4134,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
Shrinkwrap Canvas on Save Thu nhỏ vùng vẽ theo nội dung khi lưu
|
||||
Move Toolbar to the Right Di chuyển thanh công cụ sang phải
|
||||
Move Toolbar to the Left Di chuyển thanh công cụ sang trái
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size Chọn tỷ lệ khung hình hoặc kích thước cắt đặt trước
|
||||
Set the aspect ratio for the crop box Đặt tỷ lệ khung hình cho khung cắt
|
||||
Clear aspect ratio values Xóa các giá trị tỷ lệ
|
||||
Set the overlay options for the Crop Tool Đặt tùy chọn lớp phủ cắt
|
||||
Determines if pixel data outside the crop box is retained or deleted Xác định xem các điểm ảnh ngoài khung cắt được giữ lại hay xóa
|
||||
How expanded crop area gets filled Cách vùng cắt mở rộng được lấp đầy
|
||||
Displays pop-up help for the fill methods Hiển thị trợ giúp bật lên về các phương pháp lấp đầy
|
||||
Fill options Tùy chọn lấp đầy
|
||||
Background (default): Nền (mặc định):
|
||||
Fill the expanded area with your background color or transparent pixels Lấp đầy vùng mở rộng bằng màu nền hoặc điểm ảnh trong suốt
|
||||
Content-aware fill Lấp đầy theo nội dung
|
||||
Sample content from part of the image and use it to fill a small area Lấy nội dung từ một phần của ảnh để lấp đầy vùng nhỏ
|
||||
Reset the crop box, image rotation, and aspect ratio settings Đặt lại khung cắt, độ xoay ảnh và tỷ lệ
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -3326,3 +3326,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
# RAW Develop feature labels
|
||||
RAW Develop RAW 显影
|
||||
RAW Develop Filter RAW 显影滤镜
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size 选择预设的宽高比或裁剪尺寸
|
||||
Set the aspect ratio for the crop box 设置裁剪框的宽高比
|
||||
Clear aspect ratio values 清除宽高比值
|
||||
Set the overlay options for the Crop Tool 设置裁剪叠加选项
|
||||
Determines if pixel data outside the crop box is retained or deleted 确定保留还是删除裁剪框外的像素
|
||||
How expanded crop area gets filled 扩展裁剪区域的填充方式
|
||||
Displays pop-up help for the fill methods 显示填充方法的弹出帮助
|
||||
Fill options 填充选项
|
||||
Background (default): 背景(默认):
|
||||
Fill the expanded area with your background color or transparent pixels 用背景色或透明像素填充扩展区域
|
||||
Content-aware fill 内容识别填充
|
||||
Sample content from part of the image and use it to fill a small area 从图像的一部分取样内容来填充小区域
|
||||
Reset the crop box, image rotation, and aspect ratio settings 重置裁剪框、图像旋转和宽高比
|
||||
|
Can't render this file because it contains an unexpected character in line 63 and column 53.
|
@@ -3284,3 +3284,17 @@ smartSvg AI/PDF/EPS contents will be edited as SVG. Saving replaces the embedded
|
||||
# RAW Develop feature labels
|
||||
RAW Develop RAW 顯影
|
||||
RAW Develop Filter RAW 顯影濾鏡
|
||||
# Crop options bar (#10888)
|
||||
Select a preset aspect ratio or crop size 選擇預設的寬高比或裁切尺寸
|
||||
Set the aspect ratio for the crop box 設定裁切框的寬高比
|
||||
Clear aspect ratio values 清除寬高比值
|
||||
Set the overlay options for the Crop Tool 設定裁切覆蓋選項
|
||||
Determines if pixel data outside the crop box is retained or deleted 決定保留或刪除裁切框外的像素
|
||||
How expanded crop area gets filled 擴展裁切區域的填滿方式
|
||||
Displays pop-up help for the fill methods 顯示填滿方法的快顯說明
|
||||
Fill options 填滿選項
|
||||
Background (default): 背景(預設):
|
||||
Fill the expanded area with your background color or transparent pixels 以背景色或透明像素填滿擴展區域
|
||||
Content-aware fill 內容感知填滿
|
||||
Sample content from part of the image and use it to fill a small area 從影像的一部分取樣內容來填滿小區域
|
||||
Reset the crop box, image rotation, and aspect ratio settings 重設裁切框、影像旋轉和寬高比
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -152,6 +152,7 @@ pub static ICONS: &[(&str, &[u8])] = &[
|
||||
("slice-select", include_bytes!("../../../assets/icons/slice-select.svg")),
|
||||
("sliders-horizontal", include_bytes!("../../../assets/icons/sliders-horizontal.svg")),
|
||||
("sparkles", include_bytes!("../../../assets/icons/sparkles.svg")),
|
||||
("spirit-level", include_bytes!("../../../assets/icons/spirit-level.svg")),
|
||||
("spline", include_bytes!("../../../assets/icons/spline.svg")),
|
||||
("square", include_bytes!("../../../assets/icons/square.svg")),
|
||||
("square-dashed", include_bytes!("../../../assets/icons/square-dashed.svg")),
|
||||
|
||||
@@ -819,7 +819,7 @@ fn handle_registry_and_tool_keys(app: &mut PhotocraftApp, ctx: &egui::Context, f
|
||||
// An open options bar popup (the Crop Ratio list, the overlay and gear menus) takes the keys
|
||||
// first: Esc closes it, and neither key reaches the crop beneath (#7386). Its id is kept in
|
||||
// memory from the last frame; `ctx.any_popup_open` only sees this frame's, drawn later.
|
||||
if (!app.ui.polygon.is_empty() || app.ui.crop_rect.is_some()) && !egui::Popup::is_any_open(ctx) {
|
||||
if (!app.ui.polygon.is_empty() || app.ui.crop_rect.is_some()) && !egui::Popup::is_any_open(ctx) && !crate::panels::options_bar::fill_help_takes_keys(ctx) {
|
||||
if pressed(Key::Enter) {
|
||||
if !app.ui.polygon.is_empty() {
|
||||
crate::canvas::commit_polygon(app);
|
||||
|
||||
@@ -49,7 +49,7 @@ pub mod layers_panel_ui;
|
||||
pub(super) mod mask_props_ui;
|
||||
pub mod mask_thumbs_ui;
|
||||
mod navigator;
|
||||
mod options_bar;
|
||||
pub(crate) mod options_bar;
|
||||
pub(super) mod panel_docking;
|
||||
mod panel_state;
|
||||
pub mod preset_panels;
|
||||
|
||||
@@ -5,6 +5,38 @@ use super::properties::{select_and_mask_button, selection_mode_buttons};
|
||||
use super::{BlendMode, Color32, PhotocraftApp, RichText, Sense, Tokens, Tool, Value, icons, json, starts_blend_group, vec2, widgets};
|
||||
use photocraft_paint::BrushSettings;
|
||||
|
||||
/// The "Fill options" modal's open flag (temporary UI data, per context).
|
||||
fn fill_help_id() -> egui::Id {
|
||||
egui::Id::NULL.with("crop-fill-help")
|
||||
}
|
||||
|
||||
/// The Crop options bar's "Fill options" modal is open: canvas keys (Esc, Enter) belong to it.
|
||||
pub(crate) fn fill_help_open(ctx: &egui::Context) -> bool {
|
||||
ctx.data(|d| d.get_temp::<bool>(fill_help_id())).unwrap_or(false)
|
||||
}
|
||||
|
||||
/// Where the Fill ⓘ was last drawn, so a click on it can take Escape in the frame the help opens
|
||||
/// (the shortcut pass runs before the options bar draws, #10888).
|
||||
fn fill_help_rect_id() -> egui::Id {
|
||||
egui::Id::NULL.with("crop-fill-help-rect")
|
||||
}
|
||||
|
||||
/// Whether the Fill help wants this frame's Enter and Escape: it is open, or its ⓘ is clicked in
|
||||
/// the frame the help opens, where Esc must not cancel the crop underneath.
|
||||
pub(crate) fn fill_help_takes_keys(ctx: &egui::Context) -> bool {
|
||||
if fill_help_open(ctx) {
|
||||
return true;
|
||||
}
|
||||
ctx.data(|d| d.get_temp::<egui::Rect>(fill_help_rect_id()))
|
||||
.is_some_and(|r| ctx.input(|i| i.pointer.any_click() && i.pointer.interact_pos().is_some_and(|p| r.contains(p))))
|
||||
}
|
||||
|
||||
/// Closes the Fill help when the options bar stops drawing: its flag would otherwise keep Enter and
|
||||
/// Escape away from the crop (#10888).
|
||||
pub(crate) fn close_fill_help(ctx: &egui::Context) {
|
||||
ctx.data_mut(|d| d.insert_temp(fill_help_id(), false));
|
||||
}
|
||||
|
||||
// Custom controls also need to bring keyboard focus into a scroll viewport.
|
||||
pub(super) fn reveal_focused_control(ui: &egui::Ui) {
|
||||
// read_response reprocesses pointer events. Reading a popup's newly focused field
|
||||
@@ -539,7 +571,7 @@ fn selection_specific_options(app: &mut PhotocraftApp, ui: &mut egui::Ui, tool:
|
||||
let before_ratio = crate::crop_ui::preset_ratio(app);
|
||||
let doc_size = app.session.active().map_or((0.0, 0.0), |s| (f64::from(s.doc.size.width), f64::from(s.doc.size.height)));
|
||||
// Ratios, sizes, saved presets, New / Delete Crop Preset… (#2443, #1919).
|
||||
crate::crop_presets::dropdown(app, ui);
|
||||
ui.scope(|ui| crate::crop_presets::dropdown(app, ui)).response.on_hover_text(tl!("Select a preset aspect ratio or crop size"));
|
||||
let o = &mut app.ui.tool_options;
|
||||
let mut turn = false;
|
||||
let mut ratio_base = None;
|
||||
@@ -551,9 +583,11 @@ fn selection_specific_options(app: &mut PhotocraftApp, ui: &mut egui::Ui, tool:
|
||||
// Original Ratio shows the document's numbers, as Photoshop does.
|
||||
let (mut rw, mut rh) = crate::crop_size::custom_ratio_fields(o, doc_size);
|
||||
let decimals = crate::crop_size::RATIO_DECIMALS;
|
||||
let fw = widgets::value_field_prec(ui, &mut rw, 0.0..=99_999.0, "", 54.0, decimals);
|
||||
let fw = widgets::value_field_prec_blank(ui, &mut rw, 0.0..=99_999.0, "", 54.0, decimals)
|
||||
.on_hover_text(tl!("Set the aspect ratio for the crop box"));
|
||||
let swap = icons::button(ui, "arrow-left-right", 22.0, false, tl!("Swaps height and width")).clicked();
|
||||
let fh = widgets::value_field_prec(ui, &mut rh, 0.0..=99_999.0, "", 54.0, decimals);
|
||||
let fh = widgets::value_field_prec_blank(ui, &mut rh, 0.0..=99_999.0, "", 54.0, decimals)
|
||||
.on_hover_text(tl!("Set the aspect ratio for the crop box"));
|
||||
let (cw, ch) = (fw.changed(), fh.changed());
|
||||
if swap {
|
||||
std::mem::swap(&mut rw, &mut rh);
|
||||
@@ -575,27 +609,33 @@ fn selection_specific_options(app: &mut PhotocraftApp, ui: &mut egui::Ui, tool:
|
||||
}
|
||||
}
|
||||
widgets::vline(ui, 22.0);
|
||||
if widgets::secondary_button(ui, tl!("Clear"), 0.0).clicked() {
|
||||
if widgets::secondary_button(ui, tl!("Clear"), 0.0).on_hover_text(tl!("Clear aspect ratio values")).clicked() {
|
||||
crate::crop_size::clear_ratio(o);
|
||||
}
|
||||
crate::crop_straighten::options_button(&mut app.crop.straighten, ui);
|
||||
crate::crop_overlay::options_button(o, ui);
|
||||
let pick_shield_color = crate::crop_shield::options_button(&mut o.crop_shield, ui);
|
||||
widgets::checkbox(ui, &mut o.crop_delete, tl!("Delete Cropped Pixels"));
|
||||
widgets::checkbox(ui, &mut o.crop_delete, tl!("Delete Cropped Pixels"))
|
||||
.on_hover_text(tl!("Determines if pixel data outside the crop box is retained or deleted"));
|
||||
// Fill: what a turned or extending crop puts where the image doesn't reach
|
||||
// (#3823). Generative Expand is not offered. The first entry names the outcome as in
|
||||
// Photoshop: the background colour, or transparency with Delete Cropped Pixels off
|
||||
// (#10872); both store `crop_content_aware: false`.
|
||||
ui.label(tl!("Fill:"));
|
||||
let delete_cropped_pixels = o.crop_delete;
|
||||
widgets::dropdown(
|
||||
ui,
|
||||
"crop-fill",
|
||||
tl!("Fill:"),
|
||||
&mut o.crop_content_aware,
|
||||
&[(false, crate::crop_ui::fill_label(delete_cropped_pixels)), (true, tl!("Content-Aware Fill"))],
|
||||
150.0,
|
||||
);
|
||||
ui.scope(|ui| {
|
||||
widgets::dropdown(
|
||||
ui,
|
||||
"crop-fill",
|
||||
tl!("Fill:"),
|
||||
&mut o.crop_content_aware,
|
||||
&[(false, crate::crop_ui::fill_label(delete_cropped_pixels)), (true, tl!("Content-Aware Fill"))],
|
||||
150.0,
|
||||
);
|
||||
})
|
||||
.response
|
||||
.on_hover_text(tl!("How expanded crop area gets filled"));
|
||||
crop_fill_help(ui);
|
||||
if turn {
|
||||
crate::crop_ui::turn_frame(app);
|
||||
}
|
||||
@@ -608,27 +648,7 @@ fn selection_specific_options(app: &mut PhotocraftApp, ui: &mut egui::Ui, tool:
|
||||
if pick_shield_color {
|
||||
crate::crop_shield::pick_custom_color(app);
|
||||
}
|
||||
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
|
||||
if icons::button(
|
||||
ui,
|
||||
"check",
|
||||
26.0,
|
||||
false,
|
||||
&crate::i18n::fmt(tl!("Commit current crop operation ({key})"), &[("key", &crate::shortcuts::pretty("Enter"))]),
|
||||
)
|
||||
.clicked()
|
||||
{
|
||||
crate::canvas::commit_crop(app);
|
||||
}
|
||||
if icons::button(ui, "ban", 26.0, false, tl!("Cancel current crop operation (Esc)")).clicked() {
|
||||
crate::crop_ui::dismiss(app);
|
||||
}
|
||||
// Resets the box to its first frame; nothing to reset until it is changed.
|
||||
let changed = crate::crop_ui::modified(app);
|
||||
if ui.add_enabled_ui(changed, |ui| icons::button(ui, "undo-2", 26.0, false, tl!("Reset"))).inner.clicked() {
|
||||
crate::crop_ui::reset(app);
|
||||
}
|
||||
});
|
||||
crop_commit_controls(app, ui);
|
||||
}
|
||||
// Every theme gets the font, style and size controls (#1387), as with Auto-Select (#1275).
|
||||
Tool::Type | Tool::VerticalType | Tool::HorizontalTypeMask | Tool::VerticalTypeMask => crate::type_tool::options_bar(app, ui),
|
||||
@@ -636,6 +656,66 @@ fn selection_specific_options(app: &mut PhotocraftApp, ui: &mut egui::Ui, tool:
|
||||
}
|
||||
}
|
||||
|
||||
/// The Fill ⓘ button and the "Fill options" help modal it opens (#10888).
|
||||
fn crop_fill_help(ui: &mut egui::Ui) {
|
||||
let help_id = fill_help_id();
|
||||
let button = icons::button(ui, "info", 24.0, false, tl!("Displays pop-up help for the fill methods"));
|
||||
ui.data_mut(|d| d.insert_temp(fill_help_rect_id(), button.rect));
|
||||
if button.clicked() {
|
||||
ui.data_mut(|d| d.insert_temp(help_id, true));
|
||||
}
|
||||
if !ui.data(|d| d.get_temp::<bool>(help_id)).unwrap_or(false) {
|
||||
return;
|
||||
}
|
||||
let mut close = false;
|
||||
let modal = egui::Modal::new(help_id.with("modal")).show(ui.ctx(), |ui| {
|
||||
ui.set_max_width(380.0);
|
||||
ui.heading(tl!("Fill options"));
|
||||
ui.add_space(4.0);
|
||||
ui.label(tl!("Background (default):"));
|
||||
ui.label(tl!("Fill the expanded area with your background color or transparent pixels"));
|
||||
ui.add_space(6.0);
|
||||
ui.label(tl!("Content-aware fill"));
|
||||
ui.label(tl!("Sample content from part of the image and use it to fill a small area"));
|
||||
ui.add_space(10.0);
|
||||
if widgets::primary_button(ui, tl!("OK"), 0.0).clicked() {
|
||||
close = true;
|
||||
}
|
||||
// Esc closes the help only; `input/shortcuts.rs` leaves it to the modal (`fill_help_open`).
|
||||
if ui.input_mut(|i| i.consume_key(egui::Modifiers::NONE, egui::Key::Escape)) {
|
||||
close = true;
|
||||
}
|
||||
});
|
||||
close |= modal.should_close();
|
||||
if close {
|
||||
ui.data_mut(|d| d.insert_temp(help_id, false));
|
||||
}
|
||||
}
|
||||
|
||||
/// Reset (always, disabled while the frame is untouched), then Cancel and Commit only while the
|
||||
/// crop is live, beside each other rather than at the far right of the bar (#10888).
|
||||
fn crop_commit_controls(app: &mut PhotocraftApp, ui: &mut egui::Ui) {
|
||||
let changed = crate::crop_ui::modified(app);
|
||||
if ui
|
||||
.add_enabled_ui(changed, |ui| icons::button(ui, "undo-2", 26.0, false, tl!("Reset the crop box, image rotation, and aspect ratio settings")))
|
||||
.inner
|
||||
.clicked()
|
||||
{
|
||||
crate::crop_ui::reset(app);
|
||||
}
|
||||
if !crate::crop_ui::pending(app) && !changed {
|
||||
return;
|
||||
}
|
||||
if icons::button(ui, "ban", 26.0, false, tl!("Cancel current crop operation (Esc)")).clicked() {
|
||||
crate::crop_ui::dismiss(app);
|
||||
}
|
||||
if icons::button(ui, "check", 26.0, false, &crate::i18n::fmt(tl!("Commit current crop operation ({key})"), &[("key", &crate::shortcuts::pretty("Enter"))]))
|
||||
.clicked()
|
||||
{
|
||||
crate::canvas::commit_crop(app);
|
||||
}
|
||||
}
|
||||
|
||||
fn is_selection_options_tool(tool: Tool) -> bool {
|
||||
matches!(
|
||||
tool,
|
||||
|
||||
@@ -428,13 +428,7 @@ pub fn keys(app: &mut PhotocraftApp, ctx: &egui::Context) -> bool {
|
||||
/// The options bar's overlay button and its menu (Photoshop's "Set the overlay options for the
|
||||
/// Crop tool").
|
||||
pub fn options_button(o: &mut ToolOptions, ui: &mut egui::Ui) {
|
||||
let r = crate::icons::button(
|
||||
ui,
|
||||
o.crop_overlay.icon(),
|
||||
24.0,
|
||||
false,
|
||||
&format!("{} ({})", tl!("Set the overlay options for the Crop tool"), tl!(o.crop_overlay.label())),
|
||||
);
|
||||
let r = crate::icons::button(ui, o.crop_overlay.icon(), 24.0, false, tl!("Set the overlay options for the Crop Tool"));
|
||||
egui::Popup::menu(&r).show(|ui| {
|
||||
ui.set_min_width(220.0);
|
||||
// Check mark, then the entry's icon (the overlays have one, #10889), then the label.
|
||||
|
||||
@@ -176,7 +176,12 @@ pub fn draw(app: &PhotocraftApp, painter: &egui::Painter, to_screen: impl Fn([f6
|
||||
|
||||
/// The options-bar Straighten button (Photoshop's level icon), lit while armed.
|
||||
pub fn options_button(s: &mut Straighten, ui: &mut egui::Ui) {
|
||||
if crate::icons::button(ui, "ruler", 24.0, s.armed, tl!("Straighten the image by drawing a line on it")).clicked() {
|
||||
// One button, icon and label, as the reference options bar shows it; lit while armed.
|
||||
let t = crate::theme::Tokens::get(ui.ctx());
|
||||
let tint = if s.armed { t.accent_text } else { t.icon };
|
||||
let button =
|
||||
egui::Button::image_and_text(crate::icons::image("spirit-level", 16.0, tint), tl!("Straighten")).selected(s.armed).min_size(egui::vec2(0.0, 24.0));
|
||||
if ui.add(button).on_hover_text(tl!("Straighten the image by drawing a line on it")).clicked() {
|
||||
s.toggle();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,13 +201,15 @@ fn the_options_bar_reset_button_resets_a_changed_frame() {
|
||||
});
|
||||
h.state_mut().ui.tool = Tool::Crop;
|
||||
h.run_steps(8);
|
||||
let button = |h: &egui_kittest::Harness<'_, PhotocraftApp>| h.get_by_role_and_label(egui::accesskit::Role::Button, "Reset").accesskit_node().is_disabled();
|
||||
let button = |h: &egui_kittest::Harness<'_, PhotocraftApp>| {
|
||||
h.get_by_role_and_label(egui::accesskit::Role::Button, "Reset the crop box, image rotation, and aspect ratio settings").accesskit_node().is_disabled()
|
||||
};
|
||||
assert!(button(&h), "an untouched frame has nothing to reset");
|
||||
h.state_mut().ui.crop_rect = Some([50.0, 20.0, 120.0, 70.0]);
|
||||
h.state_mut().crop.default_frame = false;
|
||||
h.run_steps(4);
|
||||
assert!(!button(&h), "a changed frame can be reset");
|
||||
h.get_by_role_and_label(egui::accesskit::Role::Button, "Reset").click();
|
||||
h.get_by_role_and_label(egui::accesskit::Role::Button, "Reset the crop box, image rotation, and aspect ratio settings").click();
|
||||
h.run_steps(4);
|
||||
assert_eq!(h.state().ui.crop_rect, Some([0.0, 0.0, 200.0, 100.0]));
|
||||
assert!(button(&h));
|
||||
|
||||
@@ -71,7 +71,7 @@ pub use text_field::{
|
||||
};
|
||||
pub use units::{
|
||||
FieldUnits, fmt_num, fmt_num_prec, fmt_num2, parse_num, set_field_resolution, unit_decimals, unit_of_key, value_field_extent, value_field_len,
|
||||
value_field_prec, value_field_units,
|
||||
value_field_prec, value_field_prec_blank, value_field_units,
|
||||
};
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -117,6 +117,9 @@ pub(super) struct FieldOpts {
|
||||
/// keystroke (the zoom fields: typing `150` over `50` must not zoom to 1 % on the way). Esc,
|
||||
/// Tab and Alt do not apply it (`zoom_field`).
|
||||
pub(super) hold_typed: bool,
|
||||
/// Show an unset value as an empty field rather than `0` (the Crop tool's free ratio sides,
|
||||
/// #10888). Editing, scrubbing and parsing are unchanged.
|
||||
pub(super) blank_when_zero: bool,
|
||||
}
|
||||
|
||||
/// Arrow-key and drag step for a value field: [`FieldOpts::step_from_decimals`] uses `decimals`;
|
||||
@@ -446,7 +449,7 @@ fn number_edit(
|
||||
units: crate::numeric_expression::Units,
|
||||
opts: FieldOpts,
|
||||
) -> Response {
|
||||
let FieldOpts { decimals, wrap_drag, hold_typed, .. } = opts;
|
||||
let FieldOpts { decimals, wrap_drag, hold_typed, blank_when_zero, .. } = opts;
|
||||
let (id, ctx) = (ui.next_auto_id(), ui.ctx().clone());
|
||||
// Focused before the DragValue is drawn, so it gains focus this frame and selects its text.
|
||||
if ui.data_mut(|d| d.remove_temp::<bool>(first_field_id())).unwrap_or(false) {
|
||||
@@ -462,6 +465,9 @@ fn number_edit(
|
||||
// A zoom field shows its number with the system's decimal separator (`12,5` on a German
|
||||
// Windows), as Photoshop does, so the text it shows is one that can be typed.
|
||||
let format = move |v: f64| {
|
||||
if blank_when_zero && v == 0.0 {
|
||||
return String::new();
|
||||
}
|
||||
let text = match decimals {
|
||||
Some(d) => fmt_num_prec(v, d),
|
||||
None if fine => fmt_num2(v),
|
||||
@@ -537,10 +543,18 @@ fn number_edit(
|
||||
s.to_owned()
|
||||
};
|
||||
let s = ready.as_str();
|
||||
let v = if hold_typed { zoom_number(s, units) } else { parse_num_in(s, units) };
|
||||
// A cleared field that draws its zero blank means zero, not "keep what was there" (#10888).
|
||||
let blank = blank_when_zero && s.trim().is_empty();
|
||||
let v = if hold_typed {
|
||||
zoom_number(s, units)
|
||||
} else if blank {
|
||||
Some(0.0)
|
||||
} else {
|
||||
parse_num_in(s, units)
|
||||
};
|
||||
// Whether the text being typed is a number at all, for [`typed_text_parses`].
|
||||
ctx.data_mut(|d| d.insert_temp(id.with("parses"), v.is_some()));
|
||||
if ctx.memory(|m| m.has_focus(id)) && plain(s).is_none() {
|
||||
if ctx.memory(|m| m.has_focus(id)) && !blank && plain(s).is_none() {
|
||||
// Still typing arithmetic: hold it, and stop applying keystrokes once it parses.
|
||||
ctx.data_mut(|d| d.insert_temp(held, v.is_some()));
|
||||
return None;
|
||||
|
||||
@@ -28,6 +28,12 @@ pub fn value_field_prec(ui: &mut Ui, value: &mut f32, range: std::ops::RangeIncl
|
||||
value_field_in(ui, value, range, suffix, width, 0.0, FieldOpts { decimals: Some(decimals), ..Default::default() }, None).0
|
||||
}
|
||||
|
||||
/// A [`value_field_prec`] that shows an unset `0` as an empty field (Crop's free ratio sides,
|
||||
/// #10888). Everything else, including scrubbing and typed input, is identical.
|
||||
pub fn value_field_prec_blank(ui: &mut Ui, value: &mut f32, range: std::ops::RangeInclusive<f32>, suffix: &str, width: f32, decimals: u32) -> Response {
|
||||
value_field_in(ui, value, range, suffix, width, 0.0, FieldOpts { decimals: Some(decimals), blank_when_zero: true, ..Default::default() }, None).0
|
||||
}
|
||||
|
||||
/// A field's unit and the resolution a typed unit converts at (`1in` in a px field).
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub struct FieldUnits {
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
//! #10888: the Crop options bar's chrome. Straighten carries the reference label and the new
|
||||
//! spirit-level glyph; the bar also shows the reference tooltips, Cancel/Commit only while a crop
|
||||
//! is live, the Fill options help modal, and empty free-ratio sides.
|
||||
|
||||
use egui_kittest::Harness;
|
||||
use egui_kittest::kittest::Queryable;
|
||||
use photocraft_ui_egui::PhotocraftApp;
|
||||
use photocraft_ui_egui::crop_straighten::{self, Straighten};
|
||||
use photocraft_ui_egui::state::Tool;
|
||||
use serde_json::json;
|
||||
|
||||
type App = Harness<'static, PhotocraftApp>;
|
||||
|
||||
fn app() -> App {
|
||||
Harness::builder().with_size(egui::vec2(1440.0, 320.0)).with_max_steps(64).with_accessibility_check(false).build_eframe(|cc| {
|
||||
PhotocraftApp::setup_context(&cc.egui_ctx, Default::default());
|
||||
let mut app = PhotocraftApp::new(photocraft_engine::Session::new(), Default::default());
|
||||
// The accessibility queries below use English labels.
|
||||
app.session.prefs.edit(|p| p.interface.language = "en".into());
|
||||
app.run("file.new", json!({"name": "crop bar", "width": 800, "height": 600})).expect("new document");
|
||||
app.ui.tool = Tool::Crop;
|
||||
app
|
||||
})
|
||||
}
|
||||
|
||||
/// Every text shape the harness drew this frame, tooltips and modals included.
|
||||
fn drawn<State>(h: &Harness<'_, State>) -> Vec<String> {
|
||||
fn collect(shape: &egui::Shape, text: &mut Vec<String>) {
|
||||
match shape {
|
||||
egui::Shape::Text(shape) => text.push(shape.galley.job.text.clone()),
|
||||
egui::Shape::Vec(shapes) => shapes.iter().for_each(|shape| collect(shape, text)),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
let mut text = Vec::new();
|
||||
for shape in &h.output().shapes {
|
||||
collect(&shape.shape, &mut text);
|
||||
}
|
||||
text
|
||||
}
|
||||
|
||||
fn straighten_harness() -> Harness<'static, Straighten> {
|
||||
let h = Harness::builder()
|
||||
.with_size(egui::vec2(260.0, 60.0))
|
||||
.with_max_steps(64)
|
||||
.build_ui_state(|ui, s: &mut Straighten| crop_straighten::options_button(s, ui), Straighten::default());
|
||||
// The SVG glyph needs the app's image loaders; the label and the click do not.
|
||||
PhotocraftApp::setup_context(&h.ctx, Default::default());
|
||||
h
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_straighten_button_shows_its_label_and_arms() {
|
||||
let mut h = straighten_harness();
|
||||
h.run();
|
||||
assert!(h.query_by_label("Straighten").is_some(), "the button carries the reference label");
|
||||
h.get_by_label("Straighten").click();
|
||||
h.run();
|
||||
assert!(h.state().armed, "the button arms straighten");
|
||||
h.get_by_label("Straighten").click();
|
||||
h.run();
|
||||
assert!(!h.state().armed, "clicking again disarms it");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_straighten_glyph_is_embedded() {
|
||||
assert!(photocraft_ui_egui::icons::exists("spirit-level"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cancel_and_commit_show_only_for_a_live_crop() {
|
||||
let mut h = app();
|
||||
h.run_steps(6);
|
||||
assert!(h.query_by_label_contains("Cancel current crop operation").is_none(), "no cancel while idle");
|
||||
assert!(h.query_by_label_contains("Commit current crop operation").is_none(), "no commit while idle");
|
||||
assert!(h.query_by_label_contains("Reset the crop box").is_some(), "Reset stays, disabled");
|
||||
|
||||
photocraft_ui_egui::crop_ui::ensure_frame(h.state_mut());
|
||||
photocraft_ui_egui::crop_ui::nudge(h.state_mut(), 1.0, 0.0);
|
||||
h.run_steps(2);
|
||||
let reset = h.get_by_label_contains("Reset the crop box").rect();
|
||||
let cancel = h.get_by_label_contains("Cancel current crop operation").rect();
|
||||
let commit = h.get_by_label_contains("Commit current crop operation").rect();
|
||||
assert!(reset.left() < cancel.left() && cancel.left() < commit.left(), "Reset, Cancel, Commit, in that order: {reset:?} {cancel:?} {commit:?}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_fill_help_modal_opens_and_esc_leaves_the_crop() {
|
||||
let mut h = app();
|
||||
h.run_steps(4);
|
||||
photocraft_ui_egui::crop_ui::ensure_frame(h.state_mut());
|
||||
photocraft_ui_egui::crop_ui::nudge(h.state_mut(), 1.0, 0.0);
|
||||
h.run_steps(2);
|
||||
let before = h.state().ui.crop_rect;
|
||||
|
||||
h.get_by_label("Displays pop-up help for the fill methods").click();
|
||||
h.run_steps(2);
|
||||
let text = drawn(&h);
|
||||
assert!(text.iter().any(|t| t == "Fill options"), "the modal opened: {text:?}");
|
||||
assert!(text.iter().any(|t| t.contains("Background (default):")));
|
||||
assert!(text.iter().any(|t| t.contains("Content-aware fill")));
|
||||
|
||||
h.get_by_label("OK").click();
|
||||
h.run_steps(2);
|
||||
assert!(!drawn(&h).iter().any(|t| t == "Fill options"), "OK closes the modal");
|
||||
|
||||
// Esc closes the modal only: the pending crop frame is still there afterwards.
|
||||
h.get_by_label("Displays pop-up help for the fill methods").click();
|
||||
h.run_steps(2);
|
||||
h.key_press(egui::Key::Escape);
|
||||
h.run_steps(2);
|
||||
assert!(!drawn(&h).iter().any(|t| t == "Fill options"), "Esc closes the modal");
|
||||
assert_eq!(h.state().ui.crop_rect, before, "Esc leaves the crop alone");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn crop_controls_carry_the_reference_tooltips() {
|
||||
use egui::accesskit::Role;
|
||||
let mut h = app();
|
||||
h.run_steps(4);
|
||||
for (role, label, tip) in [
|
||||
(Role::CheckBox, "Delete Cropped Pixels", "Determines if pixel data outside the crop box is retained or deleted"),
|
||||
(Role::Button, "Displays pop-up help for the fill methods", "Displays pop-up help for the fill methods"),
|
||||
(Role::ComboBox, "Fill:", "How expanded crop area gets filled"),
|
||||
(Role::ComboBox, "Aspect Ratio", "Select a preset aspect ratio or crop size"),
|
||||
] {
|
||||
// Two nodes can share a name (the bar's twin layouts), so take the first.
|
||||
h.get_all_by_role_and_label(role, label).next().unwrap_or_else(|| panic!("no {label}")).hover();
|
||||
// egui holds a tooltip back for half a second before showing it.
|
||||
h.run_steps(40);
|
||||
assert!(drawn(&h).iter().any(|t| t == tip), "{label} shows its tooltip: {:?}", drawn(&h));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn clearing_a_blank_zero_field_commits_zero() {
|
||||
let mut h = Harness::builder().with_size(egui::vec2(120.0, 60.0)).with_max_steps(4).with_accessibility_check(false).build_ui_state(
|
||||
|ui, v: &mut f32| {
|
||||
photocraft_ui_egui::widgets::value_field_prec_blank(ui, v, 0.0..=99_999.0, "", 54.0, 3);
|
||||
},
|
||||
1.5f32,
|
||||
);
|
||||
h.run();
|
||||
h.get_by_role(egui::accesskit::Role::SpinButton).click();
|
||||
h.run_steps(2);
|
||||
// Select all and delete, as a user clearing a ratio side does.
|
||||
for (key, pressed, modifiers) in [
|
||||
(egui::Key::A, true, egui::Modifiers::COMMAND),
|
||||
(egui::Key::A, false, egui::Modifiers::COMMAND),
|
||||
(egui::Key::Backspace, true, egui::Modifiers::NONE),
|
||||
(egui::Key::Backspace, false, egui::Modifiers::NONE),
|
||||
] {
|
||||
h.event(egui::Event::Key { key, physical_key: None, pressed, repeat: false, modifiers });
|
||||
}
|
||||
h.run_steps(2);
|
||||
assert_eq!(*h.state(), 0.0, "a cleared side is zero, not the value it had");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hiding_the_options_bar_releases_the_fill_help() {
|
||||
let mut h = app();
|
||||
h.run_steps(4);
|
||||
photocraft_ui_egui::crop_ui::ensure_frame(h.state_mut());
|
||||
photocraft_ui_egui::crop_ui::nudge(h.state_mut(), 1.0, 0.0);
|
||||
h.run_steps(2);
|
||||
h.get_by_label("Displays pop-up help for the fill methods").click();
|
||||
h.run_steps(2);
|
||||
assert!(drawn(&h).iter().any(|t| t == "Fill options"), "the help opened");
|
||||
|
||||
// F hides the chrome and with it the bar; the help goes too and must not keep the crop's keys.
|
||||
h.state_mut().ui.panels.options_bar = false;
|
||||
h.run_steps(2);
|
||||
assert!(!drawn(&h).iter().any(|t| t == "Fill options"), "the modal goes with the bar");
|
||||
h.key_press(egui::Key::Enter);
|
||||
h.run_steps(2);
|
||||
assert!(h.state().ui.crop_rect.is_none(), "Enter commits the crop again");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn esc_in_the_frame_the_fill_help_opens_leaves_the_crop() {
|
||||
let mut h = app();
|
||||
h.run_steps(4);
|
||||
photocraft_ui_egui::crop_ui::ensure_frame(h.state_mut());
|
||||
photocraft_ui_egui::crop_ui::nudge(h.state_mut(), 1.0, 0.0);
|
||||
h.run_steps(2);
|
||||
let before = h.state().ui.crop_rect;
|
||||
|
||||
// Esc and the click on the Fill ⓘ land in one frame: the shortcut pass runs first, so the click
|
||||
// must claim Esc before it cancels the crop underneath.
|
||||
let at = h.get_by_label("Displays pop-up help for the fill methods").rect().center();
|
||||
let button = |pressed| egui::Event::PointerButton { pos: at, button: egui::PointerButton::Primary, pressed, modifiers: egui::Modifiers::NONE };
|
||||
h.input_mut().events.extend([
|
||||
egui::Event::PointerMoved(at),
|
||||
egui::Event::Key { key: egui::Key::Escape, physical_key: None, pressed: true, repeat: false, modifiers: egui::Modifiers::NONE },
|
||||
button(true),
|
||||
button(false),
|
||||
]);
|
||||
h.run_steps(2);
|
||||
assert_eq!(h.state().ui.crop_rect, before, "the crop frame and its history survive");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_free_ratio_sides_draw_nothing_at_zero() {
|
||||
fn field(value: f32) -> Vec<String> {
|
||||
let mut h = Harness::builder().with_size(egui::vec2(120.0, 60.0)).with_max_steps(4).with_accessibility_check(false).build_ui_state(
|
||||
|ui, v: &mut f32| {
|
||||
photocraft_ui_egui::widgets::value_field_prec_blank(ui, v, 0.0..=99_999.0, "", 54.0, 3);
|
||||
},
|
||||
value,
|
||||
);
|
||||
h.run();
|
||||
drawn(&h)
|
||||
}
|
||||
assert!(field(0.0).iter().all(|t| t.is_empty()), "an unset side is blank, not `0`: {:?}", field(0.0));
|
||||
assert!(field(1.5).iter().any(|t| t == "1.5"), "a set side still shows its number: {:?}", field(1.5));
|
||||
}
|
||||
@@ -379,7 +379,10 @@ fn the_bar_grows_for_cancel_and_done() {
|
||||
fn straighten_is_the_options_bar_straighten() {
|
||||
let mut h = harness();
|
||||
assert!(!photocraft_ui_egui::crop_straighten::mode(h.state()));
|
||||
let at = widget(&h, "Straighten");
|
||||
// The options-bar button and the task-bar one are both labelled "Straighten" now (#10888);
|
||||
// click the one in the bar.
|
||||
let bar = bar(&h).expect("the task bar");
|
||||
let at = h.query_all_by_label("Straighten").map(|n| n.rect().center()).find(|p| bar.contains(*p)).expect("the task bar's Straighten");
|
||||
click_at(&mut h, at);
|
||||
assert!(photocraft_ui_egui::crop_straighten::mode(h.state()), "armed, as by the options bar's button");
|
||||
assert_eq!(h.state().ui.crop_rect, Some([0.0, 0.0, 400.0, 300.0]), "the click didn't reach the canvas");
|
||||
|
||||
@@ -21,6 +21,7 @@ mod crop_ctrl_straighten;
|
||||
mod crop_default_mode;
|
||||
mod crop_defaults;
|
||||
mod crop_frame_look;
|
||||
mod crop_options_bar_chrome;
|
||||
mod crop_overlay_icons;
|
||||
mod crop_popup_keys;
|
||||
mod crop_shift_corner;
|
||||
|
||||
Reference in new issue
Block a user