Skip to content

Commit

Permalink
Add method to forcefully disable antialiasing (closes GH-17)
Browse files Browse the repository at this point in the history
  • Loading branch information
derf committed Mar 21, 2011
1 parent 283618a commit 56dec87
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 41 deletions.
2 changes: 2 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ git HEAD
* Fix segfault upon unloadable images when image-related format specifiers
(e.g. %h) are used in --title
* Show images in current directory when invoked without file arguments
* Disable antialiasing, either globally (--force-aliasing) or per image
(press 'A' to toggle, keybinding toggle_aliasing)

Sat, 12 Mar 2011 22:49:53 +0100 Daniel Friesel <derf@finalrewind.org>

Expand Down
20 changes: 10 additions & 10 deletions src/events.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ static void feh_event_handle_ButtonRelease(XEvent * ev)
opt.mode = MODE_NORMAL;
winwid->mode = MODE_NORMAL;
winwidget_sanitise_offsets(winwid);
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
} else if (opt.mode == MODE_NEXT) {
opt.mode = MODE_NORMAL;
Expand Down Expand Up @@ -248,7 +248,7 @@ static void feh_event_handle_ButtonRelease(XEvent * ev)
} else
winwidget_sanitise_offsets(winwid);

winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
} else if ((ev->xbutton.button == opt.blur_button)
&& ((opt.no_blur_ctrl_mask)
Expand Down Expand Up @@ -281,7 +281,7 @@ static void feh_event_handle_ConfigureNotify(XEvent * ev)
opt.geom_w = w->w;
opt.geom_h = w->h;
}
winwidget_render_image(w, 0, 1);
winwidget_render_image(w, 0, 0);
}
}
}
Expand Down Expand Up @@ -404,7 +404,7 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
winwid->im_y = winwid->click_offset_y
- (winwid->im_click_offset_y * winwid->zoom);

winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
} else if ((opt.mode == MODE_PAN) || (opt.mode == MODE_NEXT)) {
int orig_x, orig_y;
Expand Down Expand Up @@ -463,7 +463,7 @@ static void feh_event_handle_MotionNotify(XEvent * ev)

if ((winwid->im_x != orig_x)
|| (winwid->im_y != orig_y))
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
} else if (opt.mode == MODE_ROTATE) {
while (XCheckTypedWindowEvent(disp, ev->xmotion.window, MotionNotify, ev));
Expand All @@ -483,7 +483,7 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
}
winwid->im_angle = (ev->xmotion.x - winwid->w / 2) / ((double) winwid->w / 2) * 3.1415926535;
D(("angle: %f\n", winwid->im_angle));
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
} else if (opt.mode == MODE_BLUR) {
while (XCheckTypedWindowEvent(disp, ev->xmotion.window, MotionNotify, ev));
Expand All @@ -503,7 +503,7 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
gib_imlib_image_blur(temp, 0 - blur_radius);
ptr = winwid->im;
winwid->im = temp;
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
gib_imlib_free_image_and_decache(winwid->im);
winwid->im = ptr;
}
Expand All @@ -522,7 +522,7 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
imlib_context_set_image(winwid->im);
imlib_apply_filter("bump_map_point(x=[],y=[],map="
PREFIX "/share/feh/images/about.png);", &x, &y);
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
gib_imlib_free_image_and_decache(winwid->im);
winwid->im = orig_im;
} else if (winwid->type == WIN_TYPE_THUMBNAIL) {
Expand Down Expand Up @@ -553,11 +553,11 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
thumbnail->x + 2, thumbnail->y + 2,
thumbnail->w - 4, thumbnail->h - 4,
255, 255, 255, 255);
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
gib_imlib_free_image_and_decache(winwid->im);
winwid->im = origwin;
} else
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
last_thumb = thumbnail;
}
Expand Down
31 changes: 19 additions & 12 deletions src/keyevents.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ void init_keyevents(void) {
feh_set_kb(&keys.size_to_image, 0, XK_w , 0, 0 , 0, 0);
feh_set_kb(&keys.render , 0, XK_KP_Begin , 0, 0 , 0, 0);
feh_set_kb(&keys.toggle_actions, 0, XK_a, 0, 0, 0, 0);
feh_set_kb(&keys.toggle_aliasing, 0, XK_A, 0, 0, 0, 0);
feh_set_kb(&keys.toggle_filenames, 0, XK_d, 0, 0, 0, 0);
feh_set_kb(&keys.toggle_pointer, 0, XK_o, 0, 0, 0, 0);
feh_set_kb(&keys.toggle_caption, 0, XK_c, 0, 0, 0, 0);
Expand Down Expand Up @@ -245,6 +246,8 @@ void init_keyevents(void) {
cur_kb = &keys.render;
else if (!strcmp(action, "toggle_actions"))
cur_kb = &keys.toggle_actions;
else if (!strcmp(action, "toggle_aliasing"))
cur_kb = &keys.toggle_aliasing;
else if (!strcmp(action, "toggle_filenames"))
cur_kb = &keys.toggle_filenames;
else if (!strcmp(action, "toggle_pointer"))
Expand Down Expand Up @@ -424,19 +427,19 @@ void feh_event_handle_keypress(XEvent * ev)
}
else if (feh_is_kp(&keys.scroll_right, keysym, state)) {
winwid->im_x -= 20;
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
else if (feh_is_kp(&keys.scroll_left, keysym, state)) {
winwid->im_x += 20;
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
else if (feh_is_kp(&keys.scroll_down, keysym, state)) {
winwid->im_y -= 20;
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
else if (feh_is_kp(&keys.scroll_up, keysym, state)) {
winwid->im_y += 20;
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
}
else if (feh_is_kp(&keys.jump_back, keysym, state)) {
if (opt.slideshow)
Expand Down Expand Up @@ -505,7 +508,7 @@ void feh_event_handle_keypress(XEvent * ev)
winwid->im_y = (winwid->h / 2) - (((winwid->h / 2) - winwid->im_y) /
winwid->old_zoom * winwid->zoom);
winwidget_sanitise_offsets(winwid);
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
else if (feh_is_kp(&keys.zoom_out, keysym, state)) {
winwid->old_zoom = winwid->zoom;
Expand All @@ -515,7 +518,7 @@ void feh_event_handle_keypress(XEvent * ev)
winwid->im_y = (winwid->h / 2) - (((winwid->h / 2) - winwid->im_y) /
winwid->old_zoom * winwid->zoom);
winwidget_sanitise_offsets(winwid);
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
else if (feh_is_kp(&keys.zoom_default, keysym, state)) {
winwid->zoom = 1;
Expand All @@ -526,18 +529,22 @@ void feh_event_handle_keypress(XEvent * ev)
else if (feh_is_kp(&keys.zoom_fit, keysym, state)) {
feh_calc_needed_zoom(&winwid->zoom, winwid->im_w, winwid->im_h, winwid->w, winwid->h);
winwidget_center_image(winwid);
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
else if (feh_is_kp(&keys.render, keysym, state)) {
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
else if (feh_is_kp(&keys.toggle_actions, keysym, state)) {
opt.draw_actions = !opt.draw_actions;
winwidget_rerender_all(0, 1);
winwidget_rerender_all(0);
}
else if (feh_is_kp(&keys.toggle_aliasing, keysym, state)) {
opt.force_aliasing = !opt.force_aliasing;
winwidget_rerender_all(0);
}
else if (feh_is_kp(&keys.toggle_filenames, keysym, state)) {
opt.draw_filename = !opt.draw_filename;
winwidget_rerender_all(0, 1);
winwidget_rerender_all(0);
}
else if (feh_is_kp(&keys.toggle_pointer, keysym, state)) {
winwidget_set_pointer(winwid, opt.hide_pointer);
Expand All @@ -549,7 +556,7 @@ void feh_event_handle_keypress(XEvent * ev)
else if (feh_is_kp(&keys.toggle_caption, keysym, state)) {
if (opt.caption_path)
winwid->caption_entry = 1;
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
}
else if (feh_is_kp(&keys.reload_image, keysym, state)) {
feh_reload_image(winwid, 0, 0);
Expand Down Expand Up @@ -614,7 +621,7 @@ void feh_event_handle_keypress(XEvent * ev)
winwid->full_screen = !winwid->full_screen;
winwidget_destroy_xwin(winwid);
winwidget_create_window(winwid, winwid->im_w, winwid->im_h);
winwidget_render_image(winwid, 1, 1);
winwidget_render_image(winwid, 1, 0);
winwidget_show(winwid);
#ifdef HAVE_LIBXINERAMA
/* if we have xinerama and we're using it, then full screen the window
Expand Down
10 changes: 5 additions & 5 deletions src/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1268,7 +1268,7 @@ void feh_menu_cb_opt_fullscreen(feh_menu * m, feh_menu_item * i)
winwidget_destroy_xwin(m->fehwin);
winwidget_create_window(m->fehwin, m->fehwin->im_w, m->fehwin->im_h);

winwidget_render_image(m->fehwin, 1, 1);
winwidget_render_image(m->fehwin, 1, 0);
winwidget_show(m->fehwin);

#ifdef HAVE_LIBXINERAMA
Expand Down Expand Up @@ -1343,7 +1343,7 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
winwidget_resize(m->fehwin, m->fehwin->im_w, m->fehwin->im_h);
}
winwidget_reset_image(m->fehwin);
winwidget_render_image(m->fehwin, 1, 1);
winwidget_render_image(m->fehwin, 1, 0);
break;
case CB_RELOAD:
feh_reload_image(m->fehwin, 0, 0);
Expand Down Expand Up @@ -1404,15 +1404,15 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
opt.draw_filename = TRUE;
else
opt.draw_filename = FALSE;
winwidget_rerender_all(0, 1);
winwidget_rerender_all(0);
break;
case CB_OPT_DRAW_ACTIONS:
MENU_ITEM_TOGGLE(i);
if (MENU_ITEM_IS_ON(i))
opt.draw_actions = TRUE;
else
opt.draw_actions = FALSE;
winwidget_rerender_all(0, 1);
winwidget_rerender_all(0);
break;
case CB_OPT_KEEP_HTTP:
MENU_ITEM_TOGGLE(i);
Expand Down Expand Up @@ -1440,7 +1440,7 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data)
opt.zoom_mode = ZOOM_MODE_FILL;
else
opt.zoom_mode = 0;
winwidget_rerender_all(1, 1);
winwidget_rerender_all(1);
break;
}
return;
Expand Down
4 changes: 4 additions & 0 deletions src/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,7 @@ static void feh_parse_option_array(int argc, char **argv)
{"index-dim" , 1, 0, 232},
{"thumb-redraw" , 1, 0, 'J'},
{"info" , 1, 0, 234},
{"force-aliasing", 0, 0, 235},

{0, 0, 0, 0}
};
Expand Down Expand Up @@ -772,6 +773,9 @@ static void feh_parse_option_array(int argc, char **argv)
case 234:
opt.info_cmd = estrdup(optarg);
break;
case 235:
opt.force_aliasing = 1;
break;
default:
break;
}
Expand Down
2 changes: 2 additions & 0 deletions src/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ struct __fehoptions {
unsigned char no_blur_ctrl_mask;
unsigned char no_pan_ctrl_mask;

int force_aliasing;
int thumb_w;
int thumb_h;
int limit_w;
Expand Down Expand Up @@ -175,6 +176,7 @@ struct __fehkb {
struct __fehkey toggle_actions;
struct __fehkey toggle_filenames;
struct __fehkey toggle_pointer;
struct __fehkey toggle_aliasing;
struct __fehkey jump_random;
struct __fehkey toggle_caption;
struct __fehkey toggle_pause;
Expand Down
4 changes: 2 additions & 2 deletions src/slideshow.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ void feh_reload_image(winwidget w, int resize, int force_new)
w->im_w = gib_imlib_image_get_width(w->im);
w->im_h = gib_imlib_image_get_height(w->im);
}
winwidget_render_image(w, resize, 1);
winwidget_render_image(w, resize, 0);

winwidget_rename(w, title);
free(title);
Expand Down Expand Up @@ -264,7 +264,7 @@ void slideshow_change_image(winwidget winwid, int change)
winwidget_reset_image(winwid);
winwid->im_w = gib_imlib_image_get_width(winwid->im);
winwid->im_h = gib_imlib_image_get_height(winwid->im);
winwidget_render_image(winwid, 1, 1);
winwidget_render_image(winwid, 1, 0);

s = slideshow_create_name(FEH_FILE(current_file->data));
winwidget_rename(winwid, s);
Expand Down
4 changes: 2 additions & 2 deletions src/thumbnail.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ void init_thumbnail_mode(void)
if (opt.display) {
/* thumb_counter is unsigned, so no need to catch overflows */
if (++thumb_counter == opt.thumb_redraw) {
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);
thumb_counter = 0;
}
if (!feh_main_iteration(0))
Expand All @@ -373,7 +373,7 @@ void init_thumbnail_mode(void)
}

if (thumb_counter != 0)
winwidget_render_image(winwid, 0, 0);
winwidget_render_image(winwid, 0, 1);

if (opt.verbose)
fprintf(stdout, "\n");
Expand Down
21 changes: 13 additions & 8 deletions src/winwidget.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ static winwidget winwidget_allocate(void)
ret->type = WIN_TYPE_UNSET;
ret->visible = 0;
ret->caption_entry = 0;
ret->force_aliasing = opt.force_aliasing;

/* Zoom stuff */
ret->mode = MODE_NORMAL;
Expand Down Expand Up @@ -99,7 +100,7 @@ winwidget winwidget_create_from_image(Imlib_Image im, char *name, char type)
if (opt.full_screen && (type != WIN_TYPE_THUMBNAIL))
ret->full_screen = True;
winwidget_create_window(ret, ret->w, ret->h);
winwidget_render_image(ret, 1, 1);
winwidget_render_image(ret, 1, 0);

return(ret);
}
Expand Down Expand Up @@ -132,7 +133,7 @@ winwidget winwidget_create_from_file(gib_list * list, char *name, char type)
if (opt.full_screen)
ret->full_screen = True;
winwidget_create_window(ret, ret->w, ret->h);
winwidget_render_image(ret, 1, 1);
winwidget_render_image(ret, 1, 0);
}

return(ret);
Expand Down Expand Up @@ -362,10 +363,11 @@ void winwidget_setup_pixmaps(winwidget winwid)
return;
}

void winwidget_render_image(winwidget winwid, int resize, int alias)
void winwidget_render_image(winwidget winwid, int resize, int force_alias)
{
int sx, sy, sw, sh, dx, dy, dw, dh;
int calc_w, calc_h;
int alias = 0; /* TODO should be called antialias */

if (!winwid->full_screen && resize) {
winwidget_resize(winwid, winwid->im_w, winwid->im_h);
Expand All @@ -378,8 +380,8 @@ void winwidget_render_image(winwidget winwid, int resize, int alias)
if (winwid->im_y > winwid->h)
winwid->im_y = winwid->h;

D(("winwidget_render_image resize %d alias %d im %dx%d\n",
resize, alias, winwid->im_w, winwid->im_h));
D(("winwidget_render_image resize %d force_alias %d im %dx%d\n",
resize, force_alias, winwid->im_w, winwid->im_h));

winwidget_setup_pixmaps(winwid);

Expand Down Expand Up @@ -524,6 +526,9 @@ void winwidget_render_image(winwidget winwid, int resize, int alias)
D(("sx: %d sy: %d sw: %d sh: %d dx: %d dy: %d dw: %d dh: %d zoom: %f\n",
sx, sy, sw, sh, dx, dy, dw, dh, winwid->zoom));

if ((winwid->zoom != 1.0) && !force_alias && !winwid->force_aliasing)
alias = 1;

D(("winwidget_render(): winwid->im_angle = %f\n", winwid->im_angle));
if (winwid->has_rotated)
gib_imlib_render_image_part_on_drawable_at_size_with_rotation
Expand Down Expand Up @@ -691,13 +696,13 @@ void winwidget_destroy_all(void)
return;
}

void winwidget_rerender_all(int resize, int alias)
void winwidget_rerender_all(int resize)
{
int i;

/* Have to DESCEND the list here, 'cos of the way _unregister works */
for (i = window_num - 1; i >= 0; i--)
winwidget_render_image(windows[i], resize, alias);
winwidget_render_image(windows[i], resize, 0);
return;
}

Expand Down Expand Up @@ -988,7 +993,7 @@ void winwidget_size_to_image(winwidget winwid)
{
winwidget_resize(winwid, winwid->im_w * winwid->zoom, winwid->im_h * winwid->zoom);
winwid->im_x = winwid->im_y = 0;
winwidget_render_image(winwid, 0, 1);
winwidget_render_image(winwid, 0, 0);
return;
}

Expand Down
Loading

0 comments on commit 56dec87

Please sign in to comment.