jdk/src/java.desktop/unix/native/common/awt/extutil.h
changeset 38127 2ab00cd4556e
parent 38125 1ad0239b6e4a
parent 38126 c3706b502779
child 38128 22391eb0c22d
equal deleted inserted replaced
38125:1ad0239b6e4a 38127:2ab00cd4556e
     1 /*
       
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     3  *
       
     4  * This code is free software; you can redistribute it and/or modify it
       
     5  * under the terms of the GNU General Public License version 2 only, as
       
     6  * published by the Free Software Foundation.  Oracle designates this
       
     7  * particular file as subject to the "Classpath" exception as provided
       
     8  * by Oracle in the LICENSE file that accompanied this code.
       
     9  *
       
    10  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    13  * version 2 for more details (a copy is included in the LICENSE file that
       
    14  * accompanied this code).
       
    15  *
       
    16  * You should have received a copy of the GNU General Public License version
       
    17  * 2 along with this work; if not, write to the Free Software Foundation,
       
    18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    19  *
       
    20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    21  * or visit www.oracle.com if you need additional information or have any
       
    22  * questions.
       
    23  */
       
    24 
       
    25 /*
       
    26  * This file is available under and governed by the GNU General Public
       
    27  * License version 2 only, as published by the Free Software Foundation.
       
    28  * However, the following notice accompanied the original version of this
       
    29  * file:
       
    30  *
       
    31  * $Xorg: extutil.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $
       
    32  *
       
    33 Copyright 1989, 1998  The Open Group
       
    34 
       
    35 All Rights Reserved.
       
    36 
       
    37 The above copyright notice and this permission notice shall be included in
       
    38 all copies or substantial portions of the Software.
       
    39 
       
    40 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
       
    41 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
       
    42 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
       
    43 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
       
    44 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
       
    45 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
       
    46 
       
    47 Except as contained in this notice, the name of The Open Group shall not be
       
    48 used in advertising or otherwise to promote the sale, use or other dealings
       
    49 in this Software without prior written authorization from The Open Group.
       
    50  *
       
    51  * Author:  Jim Fulton, MIT The Open Group
       
    52  *
       
    53  *                     Xlib Extension-Writing Utilities
       
    54  *
       
    55  * This package contains utilities for writing the client API for various
       
    56  * protocol extensions.  THESE INTERFACES ARE NOT PART OF THE X STANDARD AND
       
    57  * ARE SUBJECT TO CHANGE!
       
    58  */
       
    59 /* $XFree86: xc/include/extensions/extutil.h,v 1.5 2001/01/17 17:53:20 dawes Exp $ */
       
    60 
       
    61 #if defined(__linux__) || defined(MACOSX)
       
    62 
       
    63 #ifndef _EXTUTIL_H_
       
    64 #define _EXTUTIL_H_
       
    65 
       
    66 /*
       
    67  * We need to keep a list of open displays since the Xlib display list isn't
       
    68  * public.  We also have to per-display info in a separate block since it isn't
       
    69  * stored directly in the Display structure.
       
    70  */
       
    71 typedef struct _XExtDisplayInfo {
       
    72     struct _XExtDisplayInfo *next;      /* keep a linked list */
       
    73     Display *display;                   /* which display this is */
       
    74     XExtCodes *codes;                   /* the extension protocol codes */
       
    75     XPointer data;                      /* extra data for extension to use */
       
    76 } XExtDisplayInfo;
       
    77 
       
    78 typedef struct _XExtensionInfo {
       
    79     XExtDisplayInfo *head;              /* start of list */
       
    80     XExtDisplayInfo *cur;               /* most recently used */
       
    81     int ndisplays;                      /* number of displays */
       
    82 } XExtensionInfo;
       
    83 
       
    84 typedef struct _XExtensionHooks {
       
    85     int (*create_gc)(
       
    86 #if NeedNestedPrototypes
       
    87               Display*                  /* display */,
       
    88               GC                        /* gc */,
       
    89               XExtCodes*                /* codes */
       
    90 #endif
       
    91 );
       
    92     int (*copy_gc)(
       
    93 #if NeedNestedPrototypes
       
    94               Display*                  /* display */,
       
    95               GC                        /* gc */,
       
    96               XExtCodes*                /* codes */
       
    97 #endif
       
    98 );
       
    99     int (*flush_gc)(
       
   100 #if NeedNestedPrototypes
       
   101               Display*                  /* display */,
       
   102               GC                        /* gc */,
       
   103               XExtCodes*                /* codes */
       
   104 #endif
       
   105 );
       
   106     int (*free_gc)(
       
   107 #if NeedNestedPrototypes
       
   108               Display*                  /* display */,
       
   109               GC                        /* gc */,
       
   110               XExtCodes*                /* codes */
       
   111 #endif
       
   112 );
       
   113     int (*create_font)(
       
   114 #if NeedNestedPrototypes
       
   115               Display*                  /* display */,
       
   116               XFontStruct*              /* fs */,
       
   117               XExtCodes*                /* codes */
       
   118 #endif
       
   119 );
       
   120     int (*free_font)(
       
   121 #if NeedNestedPrototypes
       
   122               Display*                  /* display */,
       
   123               XFontStruct*              /* fs */,
       
   124               XExtCodes*                /* codes */
       
   125 #endif
       
   126 );
       
   127     int (*close_display)(
       
   128 #if NeedNestedPrototypes
       
   129               Display*                  /* display */,
       
   130               XExtCodes*                /* codes */
       
   131 #endif
       
   132 );
       
   133     Bool (*wire_to_event)(
       
   134 #if NeedNestedPrototypes
       
   135                Display*                 /* display */,
       
   136                XEvent*                  /* re */,
       
   137                xEvent*                  /* event */
       
   138 #endif
       
   139 );
       
   140     Status (*event_to_wire)(
       
   141 #if NeedNestedPrototypes
       
   142               Display*                  /* display */,
       
   143               XEvent*                   /* re */,
       
   144               xEvent*                   /* event */
       
   145 #endif
       
   146 );
       
   147     int (*error)(
       
   148 #if NeedNestedPrototypes
       
   149               Display*                  /* display */,
       
   150               xError*                   /* err */,
       
   151               XExtCodes*                /* codes */,
       
   152               int*                      /* ret_code */
       
   153 #endif
       
   154 );
       
   155     char *(*error_string)(
       
   156 #if NeedNestedPrototypes
       
   157                 Display*                /* display */,
       
   158                 int                     /* code */,
       
   159                 XExtCodes*              /* codes */,
       
   160                 char*                   /* buffer */,
       
   161                 int                     /* nbytes */
       
   162 #endif
       
   163 );
       
   164 } XExtensionHooks;
       
   165 
       
   166 extern XExtensionInfo *XextCreateExtension(
       
   167 #if NeedFunctionPrototypes
       
   168     void
       
   169 #endif
       
   170 );
       
   171 extern void XextDestroyExtension(
       
   172 #if NeedFunctionPrototypes
       
   173     XExtensionInfo*     /* info */
       
   174 #endif
       
   175 );
       
   176 extern XExtDisplayInfo *XextAddDisplay(
       
   177 #if NeedFunctionPrototypes
       
   178     XExtensionInfo*     /* extinfo */,
       
   179     Display*            /* dpy */,
       
   180     char*               /* ext_name */,
       
   181     XExtensionHooks*    /* hooks */,
       
   182     int                 /* nevents */,
       
   183     XPointer            /* data */
       
   184 #endif
       
   185 );
       
   186 extern int XextRemoveDisplay(
       
   187 #if NeedFunctionPrototypes
       
   188     XExtensionInfo*     /* extinfo */,
       
   189     Display*            /* dpy */
       
   190 #endif
       
   191 );
       
   192 extern XExtDisplayInfo *XextFindDisplay(
       
   193 #if NeedFunctionPrototypes
       
   194     XExtensionInfo*     /* extinfo */,
       
   195     Display*            /* dpy */
       
   196 #endif
       
   197 );
       
   198 
       
   199 #define XextHasExtension(i) ((i) && ((i)->codes))
       
   200 #define XextCheckExtension(dpy,i,name,val) \
       
   201   if (!XextHasExtension(i)) { XMissingExtension (dpy, name); return val; }
       
   202 #define XextSimpleCheckExtension(dpy,i,name) \
       
   203   if (!XextHasExtension(i)) { XMissingExtension (dpy, name); return; }
       
   204 
       
   205 
       
   206 /*
       
   207  * helper macros to generate code that is common to all extensions; caller
       
   208  * should prefix it with static if extension source is in one file; this
       
   209  * could be a utility function, but have to stack 6 unused arguments for
       
   210  * something that is called many, many times would be bad.
       
   211  */
       
   212 #define XEXT_GENERATE_FIND_DISPLAY(proc,extinfo,extname,hooks,nev,data) \
       
   213 XExtDisplayInfo *proc (Display *dpy) \
       
   214 { \
       
   215     XExtDisplayInfo *dpyinfo; \
       
   216     if (!extinfo) { if (!(extinfo = XextCreateExtension())) return NULL; } \
       
   217     if (!(dpyinfo = XextFindDisplay (extinfo, dpy))) \
       
   218       dpyinfo = XextAddDisplay (extinfo,dpy,extname,hooks,nev,data); \
       
   219     return dpyinfo; \
       
   220 }
       
   221 
       
   222 #define XEXT_FIND_DISPLAY_PROTO(proc) \
       
   223         XExtDisplayInfo *proc(Display *dpy)
       
   224 
       
   225 #define XEXT_GENERATE_CLOSE_DISPLAY(proc,extinfo) \
       
   226 int proc (Display *dpy, XExtCodes *codes) \
       
   227 { \
       
   228     return XextRemoveDisplay (extinfo, dpy); \
       
   229 }
       
   230 
       
   231 #define XEXT_CLOSE_DISPLAY_PROTO(proc) \
       
   232         int proc(Display *dpy, XExtCodes *codes)
       
   233 
       
   234 #define XEXT_GENERATE_ERROR_STRING(proc,extname,nerr,errl) \
       
   235 char *proc (Display *dpy, int code, XExtCodes *codes, char *buf, int n) \
       
   236 {  \
       
   237     code -= codes->first_error;  \
       
   238     if (code >= 0 && code < nerr) { \
       
   239         char tmp[256]; \
       
   240         sprintf (tmp, "%s.%d", extname, code); \
       
   241         XGetErrorDatabaseText (dpy, "XProtoError", tmp, errl[code], buf, n); \
       
   242         return buf; \
       
   243     } \
       
   244     return (char *)0; \
       
   245 }
       
   246 
       
   247 #define XEXT_ERROR_STRING_PROTO(proc) \
       
   248         char *proc(Display *dpy, int code, XExtCodes *codes, char *buf, int n)
       
   249 #endif
       
   250 
       
   251 #endif /* __linux__ || MACOSX */