1450N/A/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved.
1450N/A *
1450N/A * Permission is hereby granted, free of charge, to any person obtaining a
1450N/A * copy of this software and associated documentation files (the "Software"),
1450N/A * to deal in the Software without restriction, including without limitation
1450N/A * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1450N/A * and/or sell copies of the Software, and to permit persons to whom the
1450N/A * Software is furnished to do so, subject to the following conditions:
1450N/A *
1450N/A * The above copyright notice and this permission notice (including the next
1450N/A * paragraph) shall be included in all copies or substantial portions of the
1450N/A * Software.
1450N/A *
1450N/A * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1450N/A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1450N/A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
1450N/A * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1450N/A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1450N/A * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1450N/A * DEALINGS IN THE SOFTWARE.
1450N/A */
1450N/A
1450N/A
1450N/A/*
1450N/A** draw_db.c - Drawable veneer for DGA window buffer control routines
1450N/A*/
1450N/A
1450N/A#ifdef SERVER_DGA
1450N/A#include <X11/Xlib.h>
1450N/A#endif /* SERVER_DGA */
1450N/A#include "dga_incls.h"
1450N/A
1450N/Aint
1450N/Adga_draw_db_grab (Dga_drawable dgadraw, int nbuffers,
1450N/A int (*vrtfunc)(Dga_drawable), u_int *vrtcounterp)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A return (0);
1450N/A }
1450N/A return (dga_db_grab((Dga_window)dgawin, nbuffers, vrtfunc, vrtcounterp));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A return (0);
1450N/A }
1450N/A}
1450N/A
1450N/Aint
1450N/Adga_draw_db_ungrab (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A return (0);
1450N/A }
1450N/A return (dga_db_ungrab((Dga_window)dgawin));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A return (0);
1450N/A }
1450N/A}
1450N/A
1450N/Avoid
1450N/Adga_draw_db_write (Dga_drawable dgadraw, int buffer,
1450N/A int (*writefunc)(void*, Dga_drawable, int),
1450N/A void *data)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A break;
1450N/A }
1450N/A dga_db_write((Dga_window)dgawin, buffer, writefunc, data);
1450N/A break;
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A break;
1450N/A }
1450N/A}
1450N/A
1450N/Avoid
1450N/Adga_draw_db_read (Dga_drawable dgadraw, int buffer,
1450N/A int (*readfunc)(void*, Dga_drawable, int),
1450N/A void *data)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A break;
1450N/A }
1450N/A dga_db_read((Dga_window)dgawin, buffer, readfunc, data);
1450N/A break;
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A break;
1450N/A }
1450N/A}
1450N/A
1450N/Avoid
1450N/Adga_draw_db_display (Dga_drawable dgadraw, int buffer,
1450N/A int (*visfunc)(void*, Dga_drawable, int),
1450N/A void *data)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A break;
1450N/A }
1450N/A dga_db_display((Dga_window)dgawin, buffer, visfunc, data);
1450N/A break;
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A break;
1450N/A }
1450N/A}
1450N/A
1450N/Avoid
1450N/Adga_draw_db_interval (Dga_drawable dgadraw, int interval)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A break;
1450N/A }
1450N/A dga_db_interval((Dga_window)dgawin, interval);
1450N/A break;
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A break;
1450N/A }
1450N/A}
1450N/A
1450N/Avoid
1450N/Adga_draw_db_interval_wait (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A break;
1450N/A }
1450N/A dga_db_interval_wait((Dga_window)dgawin);
1450N/A break;
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A break;
1450N/A }
1450N/A}
1450N/A
1450N/Aint
1450N/Adga_draw_db_interval_check (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A /* not applicable to multibuffers - consider interval always expired */
1450N/A return (1);
1450N/A }
1450N/A return (dga_db_interval_check((Dga_window)dgawin));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A /* not applicable to pixmaps - consider interval always expired */
1450N/A return (1);
1450N/A }
1450N/A}
1450N/A
1450N/Aint
1450N/Adga_draw_db_write_inquire (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A /* not applicable to multibuffers - always return an invalid buffer index */
1450N/A return (-1);
1450N/A }
1450N/A return (dga_db_write_inquire((Dga_window)dgawin));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A /* not applicable to pixmaps - always return an invalid buffer index */
1450N/A return (-1);
1450N/A }
1450N/A}
1450N/A
1450N/Aint
1450N/Adga_draw_db_read_inquire (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A /* not applicable to multibuffers - always return an invalid buffer index */
1450N/A return (-1);
1450N/A }
1450N/A return (dga_db_read_inquire((Dga_window)dgawin));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A /* not applicable to pixmaps - always return an invalid buffer index */
1450N/A return (-1);
1450N/A }
1450N/A}
1450N/A
1450N/Aint
1450N/Adga_draw_db_display_inquire (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A /* not applicable to multibuffers - always return an invalid buffer index */
1450N/A return (-1);
1450N/A }
1450N/A return (dga_db_display_inquire((Dga_window)dgawin));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A /* not applicable to pixmaps - always return an invalid buffer index */
1450N/A return (-1);
1450N/A }
1450N/A}
1450N/A
1450N/Aint
1450N/Adga_draw_db_display_done (Dga_drawable dgadraw, int flag,
1450N/A int (*display_done_func)(Dga_drawable))
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A /* not applicable to multibuffers - consider display done (to prevent hangs) */
1450N/A return (1);
1450N/A }
1450N/A return (dga_db_display_done((Dga_window)dgawin, flag, display_done_func));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A /* not applicable to pixmaps - consider display done (to prevent hangs) */
1450N/A return (1);
1450N/A }
1450N/A}
1450N/A
1450N/ADga_dbinfo *
1450N/Adga_draw_db_dbinfop (Dga_drawable dgadraw)
1450N/A{
1450N/A switch ( ((_Dga_drawable)dgadraw)->drawable_type) {
1450N/A case DGA_DRAW_WINDOW: {
1450N/A _Dga_window dgawin = (_Dga_window)dgadraw;
1450N/A if (!DGA_LOCKSUBJ_WINDOW(dgawin, dgawin->eLockSubj)) {
1450N/A /* not applicable to multibuffers - return NULL */
1450N/A return (NULL);
1450N/A }
1450N/A return (dga_win_dbinfop((Dga_window)dgawin));
1450N/A }
1450N/A case DGA_DRAW_PIXMAP:
1450N/A /* not applicable to pixmaps - return NULL */
1450N/A return (NULL);
1450N/A }
1450N/A}
1450N/A