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