Newer
Older
else if (!opt.paused && strcmp(p_str, " [Paused]") == 0)
*p_str = '\0';
winwidget_update_title(winwid);
Birte Kristina Friesel
committed
return;
void winwidget_free_image(winwidget w)
if (w->im)
w->im = NULL;
w->im_w = 0;
w->im_h = 0;
Birte Kristina Friesel
committed
return;
void feh_debug_print_winwid(winwidget w)
printf("winwid_debug:\n" "winwid = %p\n" "win = %ld\n" "w = %d\n"
"h = %d\n" "im_w = %d\n" "im_h = %d\n" "im_angle = %f\n"
"type = %d\n" "had_resize = %d\n" "im = %p\n" "GC = %p\n"
"pixmap = %ld\n" "name = %s\n" "file = %p\n" "mode = %d\n"
"im_x = %d\n" "im_y = %d\n" "zoom = %f\n" "old_zoom = %f\n"
"click_offset_x = %d\n" "click_offset_y = %d\n"
"has_rotated = %d\n", (void *)w, w->win, w->w, w->h, w->im_w,
w->im_h, w->im_angle, w->type, w->had_resize, w->im, (void *)w->gc,
w->bg_pmap, w->name, (void *)w->file, w->mode, w->im_x, w->im_y,
w->zoom, w->old_zoom, w->click_offset_x, w->click_offset_y,
w->has_rotated);
void winwidget_reset_image(winwidget winwid)
winwid->zoom = 1.0;
Birte Kristina Friesel
committed
winwid->old_zoom = 1.0;
winwid->im_x = 0;
winwid->im_y = 0;
winwid->im_angle = 0.0;
winwid->has_rotated = 0;
Birte Kristina Friesel
committed
return;
void winwidget_center_image(winwidget winwid)
{
int scr_width, scr_height;
scr_width = scr->width;
scr_height = scr->height;
#ifdef HAVE_LIBXINERAMA
if (opt.xinerama && xinerama_screens) {
scr_width = xinerama_screens[xinerama_screen].width;
scr_height = xinerama_screens[xinerama_screen].height;
}
#endif /* HAVE_LIBXINERAMA */
if (winwid->full_screen) {
winwid->im_x = (scr_width - lround(winwid->im_w * winwid->zoom)) >> 1;
winwid->im_y = (scr_height - lround(winwid->im_h * winwid->zoom)) >> 1;
} else {
if (opt.geom_flags & WidthValue)
winwid->im_x = ((int)opt.geom_w - lround(winwid->im_w * winwid->zoom)) >> 1;
else
winwid->im_x = 0;
if (opt.geom_flags & HeightValue)
winwid->im_y = ((int)opt.geom_h - lround(winwid->im_h * winwid->zoom)) >> 1;
else
winwid->im_y = 0;
}
}
void winwidget_sanitise_offsets(winwidget winwid)
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
int far_left, far_top;
int min_x, max_x, max_y, min_y;
far_left = winwid->w - (winwid->im_w * winwid->zoom);
far_top = winwid->h - (winwid->im_h * winwid->zoom);
if ((winwid->im_w * winwid->zoom) > winwid->w) {
min_x = far_left;
max_x = 0;
} else {
min_x = 0;
max_x = far_left;
}
if ((winwid->im_h * winwid->zoom) > winwid->h) {
min_y = far_top;
max_y = 0;
} else {
min_y = 0;
max_y = far_top;
}
if (winwid->im_x > max_x)
winwid->im_x = max_x;
if (winwid->im_x < min_x)
winwid->im_x = min_x;
if (winwid->im_y > max_y)
winwid->im_y = max_y;
if (winwid->im_y < min_y)
winwid->im_y = min_y;
Birte Kristina Friesel
committed
return;
void winwidget_size_to_image(winwidget winwid)
winwidget_resize(winwid, winwid->im_w * winwid->zoom, winwid->im_h * winwid->zoom, 1);
winwid->im_x = winwid->im_y = 0;
winwidget_render_image(winwid, 0, 0);
Birte Kristina Friesel
committed
return;
void winwidget_set_pointer(winwidget winwid, int visible)
{
Cursor no_ptr;
XColor black, dummy;
Pixmap bm_no;
static char bm_no_data[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
if (visible)
XUndefineCursor(disp, winwid->win);
else {
bm_no = XCreateBitmapFromData(disp, winwid->win, bm_no_data, 8, 8);
XAllocNamedColor(disp, DefaultColormapOfScreen(DefaultScreenOfDisplay(disp)), "black", &black, &dummy);
no_ptr = XCreatePixmapCursor(disp, bm_no, bm_no, &black, &black, 0, 0);
XDefineCursor(disp, winwid->win, no_ptr);
}
}
int winwidget_get_width(winwidget winwid)
{
int rect[4];
winwidget_get_geometry(winwid, rect);
Birte Kristina Friesel
committed
return(rect[2]);
int winwidget_get_height(winwidget winwid)
{
int rect[4];
winwidget_get_geometry(winwid, rect);
Birte Kristina Friesel
committed
return(rect[3]);
void winwidget_get_geometry(winwidget winwid, int *rect)
{
unsigned int bw, bp;
Window child;
if (!rect)
return;
XGetGeometry(disp, winwid->win, &root, &(rect[0]), &(rect[1]), (unsigned
int *)&(rect[2]), (unsigned int *)&(rect[3]), &bw, &bp);
XTranslateCoordinates(disp, winwid->win, root, 0, 0, &(rect[0]), &(rect[1]), &child);
/* update the window geometry (in case it's inaccurate) */
winwid->x = rect[0];
winwid->y = rect[1];
winwid->w = rect[2];
winwid->h = rect[3];
Birte Kristina Friesel
committed
return;
void winwidget_show_menu(winwidget winwid)
{
int x, y, b;
unsigned int c;
Window r;
XQueryPointer(disp, winwid->win, &r, &r, &x, &y, &b, &b, &c);
if (winwid->type == WIN_TYPE_SINGLE) {
if (!menu_single_win)
feh_menu_init_single_win();
feh_menu_show_at_xy(menu_single_win, winwid, x, y);
} else if (winwid->type == WIN_TYPE_THUMBNAIL) {
if (!menu_thumbnail_win)
feh_menu_init_thumbnail_win();
feh_menu_show_at_xy(menu_thumbnail_win, winwid, x, y);
} else if (winwid->type == WIN_TYPE_THUMBNAIL_VIEWER) {
if (!menu_single_win)
feh_menu_init_thumbnail_viewer();
feh_menu_show_at_xy(menu_thumbnail_viewer, winwid, x, y);
} else {
if (!menu_main)
feh_menu_init_main();
feh_menu_show_at_xy(menu_main, winwid, x, y);
}