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:
David Mann authored and GitHub committed 2026-11-10 15:51:29 +01:00
commit 9b7a9aabe3
50 files changed
+870 -52

No files matched your search

+2 -1
View File
@@ -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 |
+16
View File
@@ -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

+3
View File
@@ -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);
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+14
View File
@@ -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.
+1
View File
@@ -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")),
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
+114 -34
View File
@@ -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,
+1 -7
View File
@@ -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.
+6 -1
View File
@@ -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();
}
}
+4 -2
View File
@@ -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));
+1 -1
View File
@@ -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)]
+17 -3
View File
@@ -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;
+6
View File
@@ -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));
}
+4 -1
View File
@@ -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");
+1
View File
@@ -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;