winwidget winwidget_create_from_file(gib_list * list, char *name, char type) { winwidget ret = NULL; feh_file *file = FEH_FILE(list->data); if (!file || !file->filename) return(NULL); ret = winwidget_allocate(); ret->file = list; ret->type = type; if (name) ret->name = estrdup(name); else ret->name = estrdup(file->filename); if (winwidget_loadimage(ret, file) == 0) { winwidget_destroy(ret); return(NULL); } if (!ret->win) { ret->w = ret->im_w = gib_imlib_image_get_width(ret->im); ret->h = ret->im_h = gib_imlib_image_get_height(ret->im); D(("image is %dx%d pixels, format %s\n", ret->w, ret->h, gib_imlib_image_format(ret->im))); if (opt.full_screen) ret->full_screen = True; winwidget_create_window(ret, ret->w, ret->h); winwidget_render_image(ret, 1, 0); } return(ret); }
void feh_edit_inplace(winwidget w, int op) { int tmp; Imlib_Image old = NULL; Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename) return; if (!strcmp(gib_imlib_image_format(w->im), "jpeg") && !path_is_url(FEH_FILE(w->file->data)->filename)) { feh_edit_inplace_lossless(w, op); feh_reload_image(w, 1, 1); return; } old = imlib_load_image_with_error_return(FEH_FILE(w->file->data)->filename, &err); if ((old != NULL) && (err == IMLIB_LOAD_ERROR_NONE)) { imlib_context_set_image(old); if (op == INPLACE_EDIT_FLIP) imlib_image_flip_vertical(); else if (op == INPLACE_EDIT_MIRROR) imlib_image_flip_horizontal(); else imlib_image_orientate(op); gib_imlib_save_image_with_error_return(old, FEH_FILE(w->file->data)->filename, &err); gib_imlib_free_image(old); if (err) feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename, w, err); feh_reload_image(w, 1, 1); } else { /* * Image was opened using curl/magick or has been deleted after * opening it */ imlib_context_set_image(w->im); if (op == INPLACE_EDIT_FLIP) imlib_image_flip_vertical(); else if (op == INPLACE_EDIT_MIRROR) imlib_image_flip_horizontal(); else { imlib_image_orientate(op); tmp = w->im_w; FEH_FILE(w->file->data)->info->width = w->im_w = w->im_h; FEH_FILE(w->file->data)->info->height = w->im_h = tmp; } im_weprintf(w, "unable to edit in place. Changes have not been saved."); winwidget_render_image(w, 1, 0); } return; }
void feh_edit_inplace(winwidget w, int op) { int ret; Imlib_Image old; Imlib_Load_Error err; if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename) return; if (!strcmp(gib_imlib_image_format(w->im), "jpeg")) { feh_edit_inplace_lossless(w, op); feh_reload_image(w, 1, 1); return; } ret = feh_load_image(&old, FEH_FILE(w->file->data)); if (ret) { if (op == INPLACE_EDIT_FLIP) { imlib_context_set_image(old); imlib_image_flip_vertical(); } else if (op == INPLACE_EDIT_MIRROR) { imlib_context_set_image(old); imlib_image_flip_horizontal(); } else gib_imlib_image_orientate(old, op); ungib_imlib_save_image_with_error_return(old, FEH_FILE(w->file->data)->filename, &err); gib_imlib_free_image(old); if (err) feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename, w, err); feh_reload_image(w, 1, 1); } else { im_weprintf(w, "failed to load image from disk to edit it in place"); } return; }
char * im_printf(char *str, struct tm *tm, char *filename_im, char *filename_thumb, Imlib_Image im) { char *c; char buf[20]; char ret[4096]; char strf[4096]; char *tmp; struct stat st; ret[0] = '\0'; strftime(strf, 4095, str, tm); for (c = strf; *c != '\0'; c++) { if (*c == '$') { c++; switch (*c) { case 'f': if (filename_im) strcat(ret, filename_im); break; case 'm': /* t was allready taken, so m as in mini */ if (filename_thumb) strcat(ret, filename_thumb); break; case 'n': if (filename_im) { tmp = strrchr(filename_im, '/'); if (tmp) strcat(ret, tmp + 1); else strcat(ret, filename_im); } break; case 'w': snprintf(buf, sizeof(buf), "%d", gib_imlib_image_get_width(im)); strcat(ret, buf); break; case 'h': snprintf(buf, sizeof(buf), "%d", gib_imlib_image_get_height(im)); strcat(ret, buf); break; case 's': if (filename_im) { if (!stat(filename_im, &st)) { int size; size = st.st_size; snprintf(buf, sizeof(buf), "%d", size); strcat(ret, buf); } else strcat(ret, "[err]"); } break; case 'p': snprintf(buf, sizeof(buf), "%d", gib_imlib_image_get_width(im) * gib_imlib_image_get_height(im)); strcat(ret, buf); break; case 't': strcat(ret, gib_imlib_image_format(im)); break; case '$': strcat(ret, "$"); break; default: strncat(ret, c, 1); break; } } else if (*c == '\\') { c++; switch (*c) { case 'n': if (filename_im) strcat(ret, "\n"); break; default: strncat(ret, c, 1); break; } } else strncat(ret, c, 1); } return gib_estrdup(ret); }
int feh_file_info_load(feh_file * file, Imlib_Image im) { struct stat st; int need_free = 1; Imlib_Image im1; D(4, ("im is %p\n", im)); if (im) need_free = 0; errno = 0; if (stat(file->filename, &st)) { /* Display useful error message */ switch (errno) { case ENOENT: case ENOTDIR: if (!opt.quiet) weprintf("%s does not exist - skipping", file->filename); break; case ELOOP: if (!opt.quiet) weprintf("%s - too many levels of symbolic links - skipping", file->filename); break; case EACCES: if (!opt.quiet) weprintf("you don't have permission to open %s - skipping", file->filename); break; default: if (!opt.quiet) weprintf("couldn't open %s ", file->filename); break; } return(1); } if (im) im1 = im; else if (!feh_load_image(&im1, file)) return(1); if (!im1) return(1); file->info = feh_file_info_new(); file->info->width = gib_imlib_image_get_width(im1); file->info->height = gib_imlib_image_get_height(im1); file->info->has_alpha = gib_imlib_image_has_alpha(im1); file->info->pixels = file->info->width * file->info->height; file->info->format = estrdup(gib_imlib_image_format(im1)); file->info->size = st.st_size; if (need_free && im1) gib_imlib_free_image_and_decache(im1); return(0); }