Newer
Older
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)
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
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);
}