/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /* ** pix_inquiry.c - state inquiry routines for pixmaps. */ #ifdef SERVER_DGA #include #endif /* SERVER_DGA */ #include "dga_incls.h" #include "pix_grab.h" Display * dgai_pix_display(_Dga_pixmap dgapix) { return (dgapix->p_dpy); } char * dgai_pix_devname(_Dga_pixmap dgapix) { if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) return (NULL); return((char *)(((SHARED_PIXMAP_INFO *)(dgapix->p_infop))->scr_name)); } int dgai_pix_devfd(_Dga_pixmap dgapix) { return(dgapix->p_infofd); } int dgai_pix_depth(_Dga_pixmap dgapix) { return(dgapix->depth); } void dgai_pix_set_client_infop(_Dga_pixmap dgapix, void *client_info_ptr) { dgapix->p_client = client_info_ptr; } void * dgai_pix_get_client_infop(_Dga_pixmap dgapix) { return(dgapix->p_client); } void * dgai_pix_devinfo(_Dga_pixmap dgapix) { if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) return (NULL); return(((char *)dgapix->p_infop) + PIX_INFOP(dgapix)->device_offset); } int dgai_pix_devinfochg(_Dga_pixmap dgapix) { if (dgapix->changeMask & DGA_CHANGE_DEVINFO) { dgapix->changeMask &= ~DGA_CHANGE_DEVINFO; return (1); } else { return (0); } } int dgai_pix_sitechg(_Dga_pixmap dgapix, int *reason) { if (dgapix->changeMask & DGA_CHANGE_SITE) { dgapix->changeMask &= ~DGA_CHANGE_SITE; *reason = dgapix->siteChgReason; return (1); } else { *reason = DGA_SITECHG_UNKNOWN; return (0); } } void dgai_pix_sitesetnotify(_Dga_pixmap dgapix, DgaSiteNotifyFunc site_notify_func, void *client_data) { dgapix->siteNotifyFunc = site_notify_func; dgapix->siteNotifyClientData = client_data; } void dgai_pix_sitegetnotify(_Dga_pixmap dgapix, DgaSiteNotifyFunc *site_notify_func, void **client_data) { *site_notify_func = dgapix->siteNotifyFunc; *client_data = dgapix->siteNotifyClientData; } int dgai_pix_site(_Dga_pixmap dgapix) { SHARED_PIXMAP_INFO *infop; if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) { return (DGA_SITE_NULL); } infop = PIX_INFOP(dgapix); return (infop->cached ? DGA_SITE_DEVICE : DGA_SITE_SYSTEM); } void * dgai_pix_address(_Dga_pixmap dgapix) { SHARED_PIXMAP_INFO *infop; if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) return (NULL); infop = PIX_INFOP(dgapix); return(infop->cached ? NULL : (void *)(infop + 1)); } int dgai_pix_linebytes(_Dga_pixmap dgapix) { SHARED_PIXMAP_INFO *infop; if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) return (NULL); infop = PIX_INFOP(dgapix); return(infop->cached ? 0 : infop->linebytes); } int dgai_pix_bitsperpixel(_Dga_pixmap dgapix) { SHARED_PIXMAP_INFO *infop; if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) return (NULL); infop = PIX_INFOP(dgapix); return(infop->cached ? 0 : infop->bitsperpixel); } int dgai_pix_clipchg(_Dga_pixmap dgapix) { /* always force a clip change on a zombie to get the client to notice */ if ((dgapix->changeMask & DGA_CHANGE_ZOMBIE) || (dgapix->pix_flags & PIX_NOTICE_CLIPCHG)){ dgapix->pix_flags &= ~PIX_NOTICE_CLIPCHG; return (1); } else { return(0); } } void dgai_pix_bbox(_Dga_pixmap dgapix, int *xp, int *yp, int *widthp, int *heightp) { if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) { *xp = 0; *yp = 0; *widthp = 0; *heightp = 0; } else { SHARED_PIXMAP_INFO *infop; infop = PIX_INFOP(dgapix); *xp = 0; *yp = 0; *widthp = infop->width; *heightp = infop->height; } } int dgai_pix_empty(_Dga_pixmap dgapix) { if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) { return (1); } else { SHARED_PIXMAP_INFO *infop; infop = PIX_INFOP(dgapix); return (infop->width <= 0 || infop->height <= 0); } } static short nonviewableShape[] = { 0, /* ymin */ 0, /* ymax: fill in based on height */ 0, /* xmin */ 0, /* xmax: fill in based on width */ DGA_X_EOL, DGA_Y_EOL, }; #define YMAX_INDEX 1 #define XMAX_INDEX 3 short * dgai_pix_clipinfo(_Dga_pixmap dgapix) { if (dgapix->changeMask & DGA_CHANGE_ZOMBIE) { return (NULL); } else { SHARED_PIXMAP_INFO *infop; infop = PIX_INFOP(dgapix); if (infop->width <= 0 || infop->height <= 0) { return (NULL); } else { nonviewableShape[YMAX_INDEX] = infop->height - 1; nonviewableShape[XMAX_INDEX] = infop->width - 1; return (nonviewableShape); } } }