Newer
Older
#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)
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
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);
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);
}