feat: crop save (save visible area at original resolution) v1.4.0
- Save visible area at original resolution as JPEG q90 (title bar button or Ctrl+S) - Output name: original name + _HHmmss suffix; no overwrite, warning shown - Active color effects baked in; rotation saves bounding box - New: crop_save_service, l10n strings TR/EN, docs/plan-crop-save.md
This commit is contained in:
1 parent
73c1ff51d6
commit
168e087c8b
16 files changed
+399
-14
No files matched your search
+11
-1
@@ -6,9 +6,19 @@
|
||||
"sortByName": "By name",
|
||||
"appDescription": "Ultra-lightweight and fast image viewer. Open images and use arrows or keyboard keys to navigate.",
|
||||
"shortcuts": "Shortcuts",
|
||||
"shortcutsList": "• Left/Right arrow — previous/next image\n• Ctrl+Q — close window\n• Ctrl+Shift+Q — close all windows\n• Double click — toggle fill/fit\n• Right-drag — contrast\n• Shift+right-drag — rotate\n• Ctrl+right-drag — saturation\n• Ctrl+Shift+right-drag — brightness",
|
||||
"shortcutsList": "• Left/Right arrow — previous/next image\n• Ctrl+S — save visible area (JPEG 90)\n• Ctrl+Q — close window\n• Ctrl+Shift+Q — close all windows\n• Double click — toggle fill/fit\n• Right-drag — contrast\n• Shift+right-drag — rotate\n• Ctrl+right-drag — saturation\n• Ctrl+Shift+right-drag — brightness",
|
||||
"print": "Print",
|
||||
"close": "Close",
|
||||
"saveCrop": "Save visible area (JPEG 90)",
|
||||
"cropSaved": "Saved: {path}",
|
||||
"@cropSaved": {
|
||||
"placeholders": {
|
||||
"path": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"cropFileExists": "A file with the same name already exists — nothing was written",
|
||||
"cropUnsupported": "This image format cannot be saved as a crop",
|
||||
"cropFailed": "Failed to save crop",
|
||||
"dragDropHint": "Drag images here\nor press Ctrl+O to open",
|
||||
"dropHere": "Drop",
|
||||
"imageLoadError": "Failed to load image"
|
||||
|
||||
@@ -137,7 +137,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @shortcutsList.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'• Left/Right arrow — previous/next image\n• Ctrl+Q — close window\n• Ctrl+Shift+Q — close all windows\n• Double click — toggle fill/fit\n• Right-drag — contrast\n• Shift+right-drag — rotate\n• Ctrl+right-drag — saturation\n• Ctrl+Shift+right-drag — brightness'**
|
||||
/// **'• Left/Right arrow — previous/next image\n• Ctrl+S — save visible area (JPEG 90)\n• Ctrl+Q — close window\n• Ctrl+Shift+Q — close all windows\n• Double click — toggle fill/fit\n• Right-drag — contrast\n• Shift+right-drag — rotate\n• Ctrl+right-drag — saturation\n• Ctrl+Shift+right-drag — brightness'**
|
||||
String get shortcutsList;
|
||||
|
||||
/// No description provided for @print.
|
||||
@@ -152,6 +152,36 @@ abstract class AppLocalizations {
|
||||
/// **'Close'**
|
||||
String get close;
|
||||
|
||||
/// No description provided for @saveCrop.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Save visible area (JPEG 90)'**
|
||||
String get saveCrop;
|
||||
|
||||
/// No description provided for @cropSaved.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Saved: {path}'**
|
||||
String cropSaved(String path);
|
||||
|
||||
/// No description provided for @cropFileExists.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'A file with the same name already exists — nothing was written'**
|
||||
String get cropFileExists;
|
||||
|
||||
/// No description provided for @cropUnsupported.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This image format cannot be saved as a crop'**
|
||||
String get cropUnsupported;
|
||||
|
||||
/// No description provided for @cropFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Failed to save crop'**
|
||||
String get cropFailed;
|
||||
|
||||
/// No description provided for @dragDropHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
||||
@@ -29,7 +29,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get shortcutsList =>
|
||||
'• Left/Right arrow — previous/next image\n• Ctrl+Q — close window\n• Ctrl+Shift+Q — close all windows\n• Double click — toggle fill/fit\n• Right-drag — contrast\n• Shift+right-drag — rotate\n• Ctrl+right-drag — saturation\n• Ctrl+Shift+right-drag — brightness';
|
||||
'• Left/Right arrow — previous/next image\n• Ctrl+S — save visible area (JPEG 90)\n• Ctrl+Q — close window\n• Ctrl+Shift+Q — close all windows\n• Double click — toggle fill/fit\n• Right-drag — contrast\n• Shift+right-drag — rotate\n• Ctrl+right-drag — saturation\n• Ctrl+Shift+right-drag — brightness';
|
||||
|
||||
@override
|
||||
String get print => 'Print';
|
||||
@@ -37,6 +37,24 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get close => 'Close';
|
||||
|
||||
@override
|
||||
String get saveCrop => 'Save visible area (JPEG 90)';
|
||||
|
||||
@override
|
||||
String cropSaved(String path) {
|
||||
return 'Saved: $path';
|
||||
}
|
||||
|
||||
@override
|
||||
String get cropFileExists =>
|
||||
'A file with the same name already exists — nothing was written';
|
||||
|
||||
@override
|
||||
String get cropUnsupported => 'This image format cannot be saved as a crop';
|
||||
|
||||
@override
|
||||
String get cropFailed => 'Failed to save crop';
|
||||
|
||||
@override
|
||||
String get dragDropHint => 'Drag images here\nor press Ctrl+O to open';
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get shortcutsList =>
|
||||
'• Sol/Sağ ok — önceki/sonraki resim\n• Ctrl+Q — pencereyi kapat\n• Ctrl+Shift+Q — tüm pencereleri kapat\n• Çift tık — doldur/sığdır geçişi\n• Sağ tık sürükle — kontrast\n• Shift+sağ tık — döndür\n• Ctrl+sağ tık — doygunluk\n• Ctrl+Shift+sağ tık — parlaklık';
|
||||
'• Sol/Sağ ok — önceki/sonraki resim\n• Ctrl+S — görünen alanı kaydet (JPEG 90)\n• Ctrl+Q — pencereyi kapat\n• Ctrl+Shift+Q — tüm pencereleri kapat\n• Çift tık — doldur/sığdır geçişi\n• Sağ tık sürükle — kontrast\n• Shift+sağ tık — döndür\n• Ctrl+sağ tık — doygunluk\n• Ctrl+Shift+sağ tık — parlaklık';
|
||||
|
||||
@override
|
||||
String get print => 'Yazdır';
|
||||
@@ -37,6 +37,23 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
@override
|
||||
String get close => 'Kapat';
|
||||
|
||||
@override
|
||||
String get saveCrop => 'Görünen alanı kaydet (JPEG 90)';
|
||||
|
||||
@override
|
||||
String cropSaved(String path) {
|
||||
return 'Kaydedildi: $path';
|
||||
}
|
||||
|
||||
@override
|
||||
String get cropFileExists => 'Aynı adlı dosya zaten var — yazılmadı';
|
||||
|
||||
@override
|
||||
String get cropUnsupported => 'Bu resim formatı crop olarak kaydedilemiyor';
|
||||
|
||||
@override
|
||||
String get cropFailed => 'Crop kaydedilemedi';
|
||||
|
||||
@override
|
||||
String get dragDropHint =>
|
||||
'Resimleri buraya sürükleyin\nveya Ctrl+O ile açın';
|
||||
|
||||
+11
-1
@@ -6,9 +6,19 @@
|
||||
"sortByName": "İsme göre",
|
||||
"appDescription": "Ultra hafif ve hızlı resim görüntüleyici. Görselleri açın, gezinti için okları veya klavye tuşlarını kullanın.",
|
||||
"shortcuts": "Kısayollar",
|
||||
"shortcutsList": "• Sol/Sağ ok — önceki/sonraki resim\n• Ctrl+Q — pencereyi kapat\n• Ctrl+Shift+Q — tüm pencereleri kapat\n• Çift tık — doldur/sığdır geçişi\n• Sağ tık sürükle — kontrast\n• Shift+sağ tık — döndür\n• Ctrl+sağ tık — doygunluk\n• Ctrl+Shift+sağ tık — parlaklık",
|
||||
"shortcutsList": "• Sol/Sağ ok — önceki/sonraki resim\n• Ctrl+S — görünen alanı kaydet (JPEG 90)\n• Ctrl+Q — pencereyi kapat\n• Ctrl+Shift+Q — tüm pencereleri kapat\n• Çift tık — doldur/sığdır geçişi\n• Sağ tık sürükle — kontrast\n• Shift+sağ tık — döndür\n• Ctrl+sağ tık — doygunluk\n• Ctrl+Shift+sağ tık — parlaklık",
|
||||
"print": "Yazdır",
|
||||
"close": "Kapat",
|
||||
"saveCrop": "Görünen alanı kaydet (JPEG 90)",
|
||||
"cropSaved": "Kaydedildi: {path}",
|
||||
"@cropSaved": {
|
||||
"placeholders": {
|
||||
"path": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"cropFileExists": "Aynı adlı dosya zaten var — yazılmadı",
|
||||
"cropUnsupported": "Bu resim formatı crop olarak kaydedilemiyor",
|
||||
"cropFailed": "Crop kaydedilemedi",
|
||||
"dragDropHint": "Resimleri buraya sürükleyin\nveya Ctrl+O ile açın",
|
||||
"dropHere": "Bırakın",
|
||||
"imageLoadError": "Resim yüklenemedi"
|
||||
|
||||
Reference in new issue
Block a user