Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : apps/e_utils

Dir     : e17/apps/e_utils/src/bin/e17setroot


Modified Files:
        e17setroot.c 
Removed Files:
        e17setroot_template.edc 


Log Message:
1- applied patch allowing e17setroot to use engrave
2- fixed and added options (scale / center / tile)
3- removed edc template

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/e17setroot/e17setroot.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e17setroot.c        24 Jan 2005 14:40:16 -0000      1.7
+++ e17setroot.c        24 Jan 2005 23:29:42 -0000      1.8
@@ -8,9 +8,14 @@
 #include <X11/Xlib.h>
 #include <Imlib2.h>
 #include <E.h>
+#include <Engrave.h>
 
 #include "config.h"
 
+/* TODO: make Esetroot respect out options */
+
+int e_bg_type;
+
 enum E_Bg_Types
 {
      E_BG_TILE = 1,
@@ -33,7 +38,7 @@
 
    int this_option_optind = optind ? optind : 1;
    int option_index = 0;
-   static char *options = "t:s:c:f:g";
+   static char *options = "t:s:c:f:gh";
    static struct option long_options[] = {
        {"tile",   1, 0, E_BG_TILE},
        {"scale",  1, 0, E_BG_SCALE},
@@ -48,21 +53,29 @@
       switch (c) {
         
         /* tile */
-       case E_BG_TILE:
+       case E_BG_TILE:    
        case 't':           
         //long_options[option_index].name
         //optarg
+        e_bg_type = E_BG_TILE;
+        _e_bg_bg_eet_gen(optarg);
+        return;
         break;
 
         /* scale */
        case E_BG_SCALE:
        case 's':
-
+        e_bg_type = E_BG_SCALE;
+        _e_bg_bg_eet_gen(optarg);
+        return;         
         break;
         
         /* center */
        case E_BG_CENTER:
        case 'c':
+        e_bg_type = E_BG_CENTER;
+        _e_bg_bg_eet_gen(optarg);
+        return;         
         break;
         
         /* fit */
@@ -76,17 +89,23 @@
         break;
         
         /* show help screen */
+       case 'h':
+        _e_bg_bg_help();
+        break;
+        
+        /* show help screen */
        default:
+        _e_bg_bg_help();
+        return;         
         break;
       }
    }
-
+   
    if (optind < argc) {
-      printf ("non-option ARGV-elements: ");
-      while (optind < argc)
-       printf ("%s ", argv[optind++]);
-      printf ("\n");
+      /* add some sort of fix to detect fake / nonexistant images? */
+      _e_bg_bg_eet_gen(argv[optind]);      
    }
+   
 }
 
 /* return dir from a full path filename */
@@ -158,88 +177,102 @@
    return file;
 }
 
+int _e_bg_bg_set(char *filename) {
+   if (!e_init(":0.0")) {
+      printf("Can't connect to enlightenment, perhaps we are not on :0.0!\n");
+      return 0;
+   }
+   e_background_set(filename);
+   return 1;
+}
+
 void _e_bg_bg_eet_gen(char *filename) {
-   int i, w, h;
-   char *cmd, *file, *dir, *sed, *cp, *eet, *edc, *edj, *edje, *filenoext, 
-     *esetroot;
+   int w, h;
+   char *file, *dir, *eet_file, *filenoext, *esetroot;
    Imlib_Image *im;
+   Engrave_File *eet;
+   Engrave_Image *image;
+   Engrave_Group *grp;
+   Engrave_Part *part;
+   Engrave_Part_State *ps;
 
    if (strcmp(filename + strlen(filename) - 4, ".eet") == 0)
      {
-       e_background_set(filename);
-       return;
+       _e_bg_bg_set(filename);
+       return;
      }
                   
-   i = 0;
-
    file = _e_bg_bg_file_getfile(filename);
    dir = _e_bg_bg_file_getdir(filename);
-   edc = strdup(PACKAGE_DATA_DIR "/data/e17setroot/e17setroot_template.edc");
-   edj = strdup("edje_cc -id ");
 
    filenoext = _e_bg_bg_file_stripext(filename);
    filenoext = _e_bg_bg_file_getfile(filenoext);
 
-   /* Copy edc to /tmp so we can fiddle with it there */
-   cp = malloc(strlen("cp ") + strlen(edc) + strlen(" /tmp/") + 3);
-   strcpy(cp, "cp ");
-   strcat(cp, edc);
-   strcat(cp, " /tmp/");
-   system(cp);
-   free(cp);
-   
-   /* change edc to the one stored in /tmp */
-   free(edc);
-   edc = strdup("/tmp/e17setroot_template.edc");
-   
    /* Set up eet path */
-   eet = malloc(strlen(getenv("HOME")) +  strlen("/.e/e/backgrounds/") 
+   eet_file = malloc(strlen(getenv("HOME")) +  strlen("/.e/e/backgrounds/") 
                + strlen(filenoext) + strlen(".eet") + 1);
-   strcpy(eet, getenv("HOME"));
-   strcat(eet, "/.e/e/backgrounds/");
-   strcat(eet, filenoext);
-   strcat(eet, ".eet");
-   
-   /* Set up edje_cc command sans eet path */
-   edje = malloc(strlen(edc) + strlen(edj) + strlen(dir) + 2);
-   strcpy(edje, edj);
-   strcat(edje, dir);
-   strcat(edje, " ");
-   strcat(edje, edc);
-
-   /* Set up edje_cc command + eet path */
-   cmd = malloc(strlen(edje) + strlen(eet) + 2);
-   strcpy(cmd, edje);
-   strcat(cmd, " ");
-   strcat(cmd, eet);
-
+   strcpy(eet_file, getenv("HOME"));
+   strcat(eet_file, "/.e/e/backgrounds/");
+   strcat(eet_file, filenoext);
+   strcat(eet_file, ".eet");
+ 
    /* Determine image width / height */
    im = imlib_load_image(filename);
    imlib_context_set_image(im);
    w = imlib_image_get_width();
    h = imlib_image_get_height();
-   
-   sed = malloc(100 + strlen(filename) + strlen(edc));
-   sprintf(sed, "sed -i -e 's,FILENAME,%s,' %s",filename,edc);
-   system(sed);
-   free(sed);
-
-   sed = malloc(100 + 1 + strlen(edc));
-   sprintf(sed, "sed -i -e 's/WIDTH/%d/' %s",w,edc);
-   system(sed);
-   free(sed);
-
-   sed = malloc(100 + 1 + strlen(edc));
-   sprintf(sed, "sed -i -e 's/HEIGHT/%d/' %s",h,edc);
-   system(sed);
-   free(sed);
-
    imlib_free_image_and_decache();
 
-   system(cmd);
-   free(cmd);
+   /* create the .eet */
+   eet = engrave_file_new();
+   engrave_file_image_dir_set(eet, dir);
+   image = engrave_image_new(file, ENGRAVE_IMAGE_TYPE_COMP, 0);
+   engrave_file_image_add(eet, image);
+
+   grp = engrave_group_new();
+   engrave_group_name_set(grp, "desktop/background");
+   engrave_file_group_add(eet, grp);
+
+   part = engrave_part_new(ENGRAVE_PART_TYPE_IMAGE);
+   engrave_part_name_set(part, "background_image");
+   engrave_group_part_add(grp, part);
+
+   ps = engrave_part_state_new();
+   engrave_part_state_name_set(ps, "default", 0.0);
+   engrave_part_state_image_normal_set(ps, image);
+      
+   switch(e_bg_type) {      
+    case E_BG_CENTER:
+      engrave_part_state_aspect_set(ps, 1.0, 1.0);
+      engrave_part_state_max_size_set(ps, w, h);
+      break;
+      
+    case E_BG_SCALE:
+      break;
+      
+    case E_BG_FIT:
+      break;
+      
+    case E_BG_TILE:
+      engrave_part_state_max_size_set(ps, w, h);
+      engrave_part_state_fill_size_relative_set(ps, 0, 0);
+      engrave_part_state_fill_size_offset_set(ps, w, h);
+      break;
+    default:
+      engrave_part_state_max_size_set(ps, w, h);
+      engrave_part_state_fill_size_relative_set(ps, 0, 0);
+      engrave_part_state_fill_size_offset_set(ps, w, h);
+      break;
+   }
 
-   e_background_set(eet);
+   engrave_part_state_add(part, ps);   
+   
+   engrave_eet_output(eet, eet_file);
+   engrave_file_free(eet);
+
+   /* set the background */
+   if (!_e_bg_bg_set(eet_file))
+       return;
 
    /* If we're using pseudo-trans for eterm, then this will help */
    esetroot = malloc(strlen("Esetroot ") + strlen(filename) + 1);
@@ -247,20 +280,11 @@
    strcat(esetroot, filename);
    system(esetroot);
    free(esetroot);
-   
-   /* unlink the temp edc */
-   unlink(edc);
 }
 
 int main(int argc, char **argv)
 {
-   if (!e_init(":0.0")) {
-      printf("Can't connect to enlightenment, perhaps we are not on :0.0!\n");
-      exit(-1);
-   }
-
-   //_e_bg_bg_parseargs(argc, argv);
-   _e_bg_bg_eet_gen(argv[1]);
+   _e_bg_bg_parseargs(argc, argv);
 
    e_shutdown();
 




-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to