Hi there,

I have added a (maybe even "the") missing wallpaper mode to pcmanfm.

I can be described as follows: The image will be cropped by the maximum
necessary amount to fill the whole screen without changing the aspect ratio
(i.e. stretch).

Technically it is a variation of the 'fit' mode. The difference is that it
uses the greater of the width/height aspect ratios to scale the image.
Thus it cuts off the image on two sides, as compaired to filling (the other)
two sides with the background color.

I have not added any translations yet. I'm not sure what the workflow would
be here. One combo box item was added: "Crop to fill the entire screen".
The german translation (considering the existing translations of the other
items) would be "Zuschneiden".

Regards
Jonas Petersen


Signed-off-by: Jonas Petersen <[email protected]>
---
 data/ui/desktop-pref.glade |    8 ++++++--
 src/app-config.h           |    1 +
 src/desktop.c              |    5 ++++-
 src/pcmanfm.c              |    4 ++--
 4 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/data/ui/desktop-pref.glade b/data/ui/desktop-pref.glade
index 25f7769..45b56c7 100644
--- a/data/ui/desktop-pref.glade
+++ b/data/ui/desktop-pref.glade
@@ -636,13 +636,17 @@
         <col id="1">2</col>
       </row>
       <row>
-        <col id="0" translatable="yes">Center on the screen</col>
+        <col id="0" translatable="yes">Crop to fill the entire screen</col>
         <col id="1">3</col>
       </row>
       <row>
-        <col id="0" translatable="yes">Tile the image to fill the entire 
screen</col>
+        <col id="0" translatable="yes">Center on the screen</col>
         <col id="1">4</col>
       </row>
+      <row>
+        <col id="0" translatable="yes">Tile the image to fill the entire 
screen</col>
+        <col id="1">5</col>
+      </row>
     </data>
   </object>
 </interface>
diff --git a/src/app-config.h b/src/app-config.h
index a72d472..68ac99d 100644
--- a/src/app-config.h
+++ b/src/app-config.h
@@ -46,6 +46,7 @@ typedef enum
     FM_WP_COLOR,
     FM_WP_STRETCH,
     FM_WP_FIT,
+    FM_WP_CROP,
     FM_WP_CENTER,
     FM_WP_TILE
 }FmWallpaperMode;
diff --git a/src/desktop.c b/src/desktop.c
index 6725313..a2531f1 100644
--- a/src/desktop.c
+++ b/src/desktop.c
@@ -892,11 +892,14 @@ static void update_background(FmDesktop* desktop, int 
is_it)
             pix = scaled;
             break;
         case FM_WP_FIT:
+        case FM_WP_CROP:
             if(dest_w != src_w || dest_h != src_h)
             {
                 gdouble w_ratio = (float)dest_w / src_w;
                 gdouble h_ratio = (float)dest_h / src_h;
-                gdouble ratio = MIN(w_ratio, h_ratio);
+                gdouble ratio = app_config->wallpaper_mode == FM_WP_FIT
+                    ? MIN(w_ratio, h_ratio)
+                    : MAX(w_ratio, h_ratio);
                 if(ratio != 1.0)
                 {
                     src_w *= ratio;
diff --git a/src/pcmanfm.c b/src/pcmanfm.c
index d62bb5f..bb1fee4 100644
--- a/src/pcmanfm.c
+++ b/src/pcmanfm.c
@@ -83,7 +83,7 @@ static GOptionEntry opt_entries[] =
     { "one-screen", '\0', 0, G_OPTION_ARG_NONE, &one_screen, N_("Use --desktop 
option only for one screen"), NULL },
     { "set-wallpaper", 'w', 0, G_OPTION_ARG_FILENAME, &set_wallpaper, N_("Set 
desktop wallpaper from image FILE"), N_("FILE") },
                     /* don't translate list of modes in description, please */
-    { "wallpaper-mode", '\0', 0, G_OPTION_ARG_STRING, &wallpaper_mode, N_("Set 
mode of desktop wallpaper. MODE=(color|stretch|fit|center|tile)"), N_("MODE") },
+    { "wallpaper-mode", '\0', 0, G_OPTION_ARG_STRING, &wallpaper_mode, N_("Set 
mode of desktop wallpaper. MODE=(color|stretch|fit|crop|center|tile)"), 
N_("MODE") },
     { "show-pref", '\0', 0, G_OPTION_ARG_INT, &show_pref, N_("Open Preferences 
dialog on the page N"), N_("N") },
     { "new-win", 'n', 0, G_OPTION_ARG_NONE, &new_win, N_("Open new window"), 
NULL },
     /* { "find-files", 'f', 0, G_OPTION_ARG_NONE, &find_files, N_("Open Find 
Files utility"), NULL }, */
@@ -92,7 +92,7 @@ static GOptionEntry opt_entries[] =
     { NULL }
 };
 
-static const char* valid_wallpaper_modes[] = {"color", "stretch", "fit", 
"center", "tile"};
+static const char* valid_wallpaper_modes[] = {"color", "stretch", "fit", 
"crop", "center", "tile"};
 
 static gboolean pcmanfm_run(gint screen_num);
 
-- 
1.7.10.4


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Pcmanfm-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pcmanfm-develop

Reply via email to