]> git.saurik.com Git - wxWidgets.git/commitdiff
Some more NanoX compile fixes
authorJulian Smart <julian@anthemion.co.uk>
Thu, 21 Feb 2002 14:52:04 +0000 (14:52 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 21 Feb 2002 14:52:04 +0000 (14:52 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14337 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/x11/nanox/X11/Xlib.h
include/wx/x11/privx.h
src/x11/app.cpp
src/x11/dcclient.cpp
src/x11/font.cpp
src/x11/nanox.c
src/x11/palette.cpp
src/x11/popupwin.cpp

index 8698db12a35606bdc9fe23adb3aef7fa167bb7da..3805751b1f23a95ba22e67e407f22b2cb9ae0e7e 100644 (file)
@@ -5,7 +5,11 @@
 #ifndef _DUMMY_XLIBH_
 #define _DUMMY_XLIBH_
 
+/* Move away the typedef in XtoNX.h */
+#define XFontStruct XFontStruct1
 #include <XtoNX.h>
+#undef XFontStruct
+#undef XCharStruct
 
 /* Data types */
 
@@ -16,6 +20,20 @@ typedef unsigned long VisualID;
 typedef int Bool;
 typedef long XID;
 typedef XID KeySym;
+typedef struct {
+    GR_FONT_INFO info;
+    GR_FONT_ID fid;
+} XFontStruct;
+typedef struct {
+    short      lbearing;       /* origin to left edge of raster */
+    short      rbearing;       /* origin to right edge of raster */
+    short      width;          /* advance to next char's origin */
+    short      ascent;         /* baseline to top edge of raster */
+    short      descent;        /* baseline to bottom edge of raster */
+    unsigned short attributes; /* per char flags (not predefined) */
+} XCharStruct;
+
+
 /* typedef unsigned long Time; */
 
 #define Success 0
@@ -30,12 +48,77 @@ typedef XID KeySym;
 #define PropertyChangeMask GR_EVENT_MASK_SELECTION_CHANGED
 #define GraphicsExpose GR_EVENT_TYPE_EXPOSURE
 #define GraphicsExposeMask GR_EVENT_MASK_EXPOSURE
+#define ColormapChangeMask 0
+#define FillSolid 0
+#define LineSolid 0
+#define LineOnOffDash 0
+#define CapNotLast 0
+#define CapRound 0
+#define CapProjecting 0
+#define CapButt 0
+#define JoinRound 0
+#define JoinBevel 0
+#define JoinMiter 0
+#define IncludeInferiors 0
+#define ClipByChildren 0
+#define DoRed 0
+#define DoGreen 0
+#define DoBlue 0
+
+#define GXcopy GR_MODE_COPY
+#define GXclear GR_MODE_CLEAR
+#ifndef GXxor
+#define GXxor GR_MODE_OR
+#endif
+#define GXinvert GR_MODE_INVERT
+#define GXorReverse GR_MODE_ORREVERSE
+#define GXandReverse GR_MODE_ANDREVERSE
+#define GXand GR_MODE_AND
+#define GXor GR_MODE_OR
+#define GXandInverted GR_MODE_ANDINVERTED
+#define GXnoop GR_MODE_NOOP
+#define GXnor GR_MODE_NOR
+#define GXequiv GR_MODE_EQUIV
+#define GXcopyInverted GR_MODE_COPYINVERTED
+#define GXorInverted GR_MODE_ORINVERTED
+#define GXnand GR_MODE_NAND
+#define GXset GR_MODE_SET
+
+inline void wxNoop() { /* Do nothing */ }
 
 #define XSynchronize(display,sync)
 #define XDefaultRootWindow(d) GR_ROOT_WINDOW_ID
 #define XFreePixmap(d, p) GrDestroyWindow(p)
 #define XFreeCursor(d, c) GrDestroyCursor(c)
+#define XFreeGC(d, gc) GrDestroyGC(gc)
+#define XSetBackground(d, gc, c) GrSetGCBackground(gc, c)
 #define DefaultVisual(d, s) ((Visual*) NULL)
+#define DefaultColormap(d, s) DefaultColormapOfScreen((Screen*) NULL)
+#define XSetFillStyle(d, gc, s) wxNoop()
+#define XSetLineAttributes(d, gc, a, b, c, e) wxNoop()
+#define XSetClipMask(d, gc, m) wxNoop()
+#define XSetTSOrigin(d, gc, x, y) wxNoop()
+#define XFillArc(d, w, gc, x, y, rx, ry, a1, a2) GrArcAngle(w, gc, x, y, rx, ry, a1, a2, GR_PIE)
+#define XDrawArc(d, w, gc, x, y, rx, ry, a1, a2) GrArcAngle(w, gc, x, y, rx, ry, a1, a2, GR_ARC)
+#define XDrawPoint(d, w, gc, x, y) GrPoint(w, gc, x, y)
+#define XFillPolygon(d, w, gc, p, n, s, m) GrFillPoly(w, gc, n, p)
+#define XDrawRectangle(d, w, gc, x, y, width, height) GrRect(w, gc, x, y, width, height)
+#define XSetClipOrigin(d, gc, x, y) GrSetGCClipOrigin(gc, x, y)
+#define XSetRegion(d, gc, r) GrSetGCRegion(gc, r)
+#define XSetTile(d, gc, p) wxNoop()
+#define XSetStipple(d, gc, p) wxNoop()
+#define XSetSubwindowMode(d, gc, mode) wxNoop()
+#define XFreeColormap(d, cmap) wxNoop()
+#define XSetTransientForHint(d, w, p) wxNoop()
+#define XUnionRegion(sr1,sr2,r)        GrUnionRegion(r,sr1,sr2)
+#define XIntersectRegion(sr1,sr2,r)    GrIntersectRegion(r,sr1,sr2)
+#define XEqualRegion(r1, r2) GrEqualRegion(r1, r2)
+#define XEmptyRegion(r) GrEmptyRegion(r)
+#define XOffsetRegion(r, x, y) GrOffsetRegion(r, x, y)
+#define XClipBox(r, rect) GrGetRegionBox(r, rect)
+#define XPointInRegion(r, x, y) GrPointInRegion(r, x, y)
+#define XXorRegion(sr1, sr2, r) GrXorRegion(r, sr1, sr2)
+
 
 /* These defines are wrongly defined in XtoNX.h, IMHO,
  * since they reference a static global.
@@ -163,6 +246,10 @@ typedef int (*XErrorHandler) (         /* WARNING, this type not in Xlib spec */
 #define PointerMotionMask GR_EVENT_MASK_MOUSE_POSITION
 #endif
 
+#define ButtonMotionMask GR_EVENT_MASK_MOUSE_POSITION
+#define KeymapStateMask 0
+#define StructureNotifyMask GR_EVENT_MASK_UPDATE
+
 #ifndef FocusIn
 #define FocusIn GR_EVENT_TYPE_FOCUS_IN
 #define FocusOut GR_EVENT_TYPE_FOCUS_OUT
@@ -177,7 +264,7 @@ extern "C" {
 
 Colormap DefaultColormapOfScreen(Screen* /* screen */) ;
 int XSetGraphicsExposures( Display* /* display */, GC /* gc */, Bool /* graphics_exposures */) ;
-int XWarpPointer( Display* /* display */, Window /* srcW */, Window /* srcW */,
+int XWarpPointer( Display* /* display */, Window /* srcW */, Window /* destW */,
                  int /* srcX */, int /* srcY */,
                  unsigned int /* srcWidth */,
                  unsigned int /* srcHeight */,
@@ -197,7 +284,7 @@ int XCopyPlane(Display* /* display */, Drawable src, Drawable dest, GC gc,
               int dest_x, int dest_y, unsigned long /* plane */) ;
 
 XErrorHandler XSetErrorHandler (XErrorHandler /* handler */);
-Display *XOpenDisplay(const char *name);
+Display *XOpenDisplay(char *name);
 Screen *XScreenOfDisplay(Display* /* display */,
                          int /* screen_number */);
 int DisplayWidth(Display* /* display */, int /* screen */);
@@ -207,6 +294,14 @@ int XAllocColor(Display* /* display */, Colormap /* cmap */,
                 XColor* color);
 int XParseColor(Display* display, Colormap cmap,
                 const char* cname, XColor* color);
+int XDrawLine(Display* display, Window win, GC gc,
+              int x1, int y1, int x2, int y2);
+int XTextExtents( XFontStruct* font, char* s, int len, int* direction,
+        int* ascent, int* descent2, XCharStruct* overall);
+int XPending(Display *d);
+XFontStruct* XLoadQueryFont(Display* display, const char* fontSpec);
+int XFreeFont(Display* display, XFontStruct* fontStruct);
+int XQueryColor(Display* display, Colormap cmap, XColor* color);
 
 #ifdef __cpluplus
 }
index 42a54ddea6efa6237bbab8f0cbe5218cafc8c306..31e5ebfc2f362a942e5b95f81349700646821020 100644 (file)
@@ -73,6 +73,7 @@ bool wxWindowIsVisible(Window win);
 #define XExposeEventGetY(event) event->exposure.y
 #define XExposeEventGetWidth(event) event->exposure.width
 #define XExposeEventGetHeight(event) event->exposure.height
+#define XFontStructGetAscent(f) f->info.baseline
 #else
 #define XEventGetWindow(event) event->xany.window
 #define XConfigureEventGetWidth(event) event->xconfigure.width
@@ -81,6 +82,7 @@ bool wxWindowIsVisible(Window win);
 #define XExposeEventGetY(event) event->xexpose.y
 #define XExposeEventGetWidth(event) event->xexpose.width
 #define XExposeEventGetHeight(event) event->xexpose.height
+#define XFontStructGetAscent(f) f->ascent
 #endif
 
 #endif
index 7cacd7c24d590a23499c81b849834db8729e3925..95b466af9894c7850a6f9eb6be862244226dee7d 100644 (file)
@@ -551,7 +551,9 @@ void wxApp::ProcessXEvent(WXEvent* _event)
                 win->GetClearRegion().Union( XExposeEventGetX(event), XExposeEventGetY(event),
                                               XExposeEventGetWidth(event), XExposeEventGetHeight(event));
                                               
+#if !wxUSE_NANOX
                 if (event->xexpose.count == 0)
+#endif
                 {
                     // Only erase background, paint in idle time.
                     win->SendEraseEvents();
index 68b68bf7b8d773fe70ad28e5ccdf3d48092f1af4..1af88bb2721b7359c1c9742c19dbf48e63bd3a06 100644 (file)
@@ -1245,16 +1245,18 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
 #endif
 
     XSetFont( (Display*) m_display, (GC) m_textGC, xfont->fid );
+#if !wxUSE_NANOX
     if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
-       {
+#endif
+    {
         XDrawString( (Display*) m_display, (Window) m_window, 
-            (GC) m_textGC, x, y + xfont->ascent, text.c_str(), text.Len() );
-       }
+            (GC) m_textGC, x, y + XFontStructGetAscent(xfont), text.c_str(), text.Len() );
+    }
 
 #if 0
     if (m_font.GetUnderlined())
     {
-        wxCoord ul_y = y + font->ascent;
+        wxCoord ul_y = y + XFontStructGetAscent(font);
         if (font->descent > 0) ul_y++;
         gdk_draw_line( m_window, m_textGC, x, ul_y, x + width, ul_y);
     }
@@ -1290,7 +1292,7 @@ void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoor
     int direction, ascent, descent2;
     XCharStruct overall;
 
-    XTextExtents( xfont, string.c_str(), string.Len(), &direction,
+    XTextExtents( xfont, (char*) string.c_str(), string.Len(), &direction,
         &ascent, &descent2, &overall);
 
     if (width)
index d58155d263445fb395781cb707850284c94cbef9..6f6db81d0cc4fa42d4bec15dab9aed602bb2405d 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/motif/font.cpp
+// Name:        src/x11/font.cpp
 // Purpose:     wxFont class
 // Author:      Julian Smart
 // Modified by:
index ccec8d0b601d29e74b27636300310ff5493cc422..73aede11b5767b8080c93854c5b97571cbffb5e8 100644 (file)
@@ -8,60 +8,61 @@
 
 #if wxUSE_NANOX
 
+#include <ctype.h>
+#include <malloc.h>
+#include "wx/defs.h"
 #include "wx/x11/nanox/X11/Xlib.h"
 
 /* Expands to some compatibility functions (see XtoNX.h) */
 
 STATIC_FUNCTIONS
 
-Colormap DefaultColormapOfScreen(Screen* /* screen */)
-{
-    static GR_PALETTE* s_globalColormap = 0;
-    static bool s_init = FALSE;
+static GR_PALETTE* s_globalColormap = 0;
 
-    if (!s_init)
+Colormap DefaultColormapOfScreen(Screen* screen)
+{
+    if (!s_globalColormap)
     {
         s_globalColormap = (GR_PALETTE*) malloc(sizeof(GR_PALETTE));
        
         GrGetSystemPalette(s_globalColormap);
-        s_init = TRUE;
     }
 
     return s_globalColormap;
 }
 
-int XSetGraphicsExposures( Display* /* display */, GC /* gc */, Bool /* graphics_exposures */)
+int XSetGraphicsExposures( Display* display, GC gc, Bool graphics_exposures)
 {
     return Success ;
 }
 
-int XWarpPointer( Display* /* display */, Window /* srcW */, Window /* srcW */,
-                 int /* srcX */, int /* srcY */,
-                 unsigned int /* srcWidth */,
-                 unsigned int /* srcHeight */,
+int XWarpPointer( Display* display, Window srcW, Window destW,
+                 int srcX, int srcY,
+                 unsigned int srcWidth,
+                 unsigned int srcHeight,
                  int destX, int destY)
 {
     GrMoveCursor(destX, destY);
     return Success;
 }
 
-int XSetInputFocus(Display* /* display */, Window focus, int /* revert_to */, Time /* time */)
+int XSetInputFocus(Display* display, Window focus, int revert_to, Time time)
 {
     GrSetFocus(focus);
     return Success;
 }
 
-int XGetInputFocus(Display* /* display */, Window* /* focus_return */, int* /* revert_to_return */)
+int XGetInputFocus(Display* display, Window* focus_return, int* revert_to_return)
 {
     * focus_return = GrGetFocus();
     * revert_to_return = 0;
     return Success;
 }
 
-int XGrabPointer(Display* /* display */, Window /* grab_window */,
-                 Bool /* owner_events */, unsigned int /* event_mask */,
-                 int /* pointer_mode */, int /* keyboard_mode */,
-                 Window /* confine_to */, Cursor /* cursor */, Time /* time */)
+int XGrabPointer(Display* display, Window grab_window,
+                 Bool owner_events, unsigned int event_mask,
+                 int pointer_mode, int keyboard_mode,
+                 Window confine_to, Cursor cursor, Time time)
 {
     /* According to comments in srvevent.c in Nano-X, the pointer
      * is implicitly grabbed when a mouse button is down.
@@ -70,12 +71,12 @@ int XGrabPointer(Display* /* display */, Window /* grab_window */,
     return Success;
 }
 
-int XUngrabPointer(Display /* display */, Time /* time */)
+int XUngrabPointer(Display display, Time time)
 {
     return Success;
 }
 
-int XCopyArea(Display* /* display */, Drawable src, Drawable dest, GC gc,
+int XCopyArea(Display* display, Drawable src, Drawable dest, GC gc,
               int src_x, int src_y, unsigned int width, unsigned int height,
               int dest_x, int dest_y)
 {
@@ -85,9 +86,9 @@ int XCopyArea(Display* /* display */, Drawable src, Drawable dest, GC gc,
     return Success;
 }
 
-int XCopyPlane(Display* /* display */, Drawable src, Drawable dest, GC gc,
+int XCopyPlane(Display* display, Drawable src, Drawable dest, GC gc,
               int src_x, int src_y, unsigned int width, unsigned int height,
-              int dest_x, int dest_y, unsigned long /* plane */)
+              int dest_x, int dest_y, unsigned long plane)
 {
     GrCopyArea(dest, gc, dest_x, dest_y,
                        width, height, src,
@@ -145,7 +146,7 @@ typedef struct {
 
 
 Status XGetWindowAttributes(Display* display, Window w,
-                            XWindowAttributes* window_attributes_return)
+                            XWindowAttributes* window_attributes)
 {
     GR_WINDOW_INFO info;
     GrGetWindowInfo(w, & info);
@@ -158,7 +159,7 @@ Status XGetWindowAttributes(Display* display, Window w,
     window_attributes->depth = 0;
     window_attributes->visual = NULL;
     window_attributes->root = 0;
-    window_attributes->class = info.inputonly ? InputOnly : InputOutput ;
+    window_attributes->_class = info.inputonly ? InputOnly : InputOutput ;
     window_attributes->bit_gravity = 0;
     window_attributes->win_gravity = 0;
     window_attributes->backing_store = 0;
@@ -184,60 +185,140 @@ static void DefaultNanoXErrorHandler(GR_EVENT_ERROR* ep)
     {
         XErrorEvent errEvent;
         errEvent.type = ep->type;
-        errEvent.display = wxGlobalDisplay();
+        errEvent.display = NULL;
         errEvent.resourceid = ep->id;
         errEvent.serial = 0;
         errEvent.error_code = ep->code;
         errEvent.request_code = 0;
         errEvent.minor_code = 0;
-        (*g_ErrorHandler)(wxGlobalDisplay(), & errEvent);
+        (*g_ErrorHandler)(NULL, & errEvent);
     }
 }
 
 XErrorHandler XSetErrorHandler (XErrorHandler handler)
 {
     XErrorHandler oldHandler = g_ErrorHandler;
-    g_errorHandler = handler;
+    g_ErrorHandler = handler;
+    GrSetErrorHandler(DefaultNanoXErrorHandler);
     return oldHandler;
 }
 
-Screen *XScreenOfDisplay(Display*              /* display */,
-                         int /* screen_number */)
+static Screen s_screen;
+Screen *XScreenOfDisplay(Display*              display,
+                         int screen_number)
 {
-    static Screen s_screen;
     /* TODO: fill in the members. See Xlib.h */
     return & s_screen;
 }
 
-int DisplayWidth(Display* /* display */, int /* screen */)
+int DisplayWidth(Display* display, int screen)
 {
     return _display.display_width;
 }
 
-int DisplayHeight(Display* /* display */, int /* screen */)
+int DisplayHeight(Display* display, int screen)
 {
     return _display.display_height;
 }
 
-int DefaultDepth(Display* /* display */, int /* screen */)
+int DefaultDepth(Display* display, int screen)
 {
     return _display.display_bpp;
 }
 
-int XAllocColor(Display* /* display */, Colormap /* cmap */,
+int XAllocColor(Display* display, Colormap cmap,
                 XColor* color)
 {
     GR_PIXELVAL pixel;
-    GrFindColor(color, & pixel);
-    return pixel;
+    GrFindColor(GR_RGB(color->red, color->green, color->blue), & pixel);
+    color->pixel = pixel;
+    return 1;
 }
 
-int XParseColor(Display* /* display */, Colormap /* cmap */,
+int XParseColor(Display* display, Colormap cmap,
                 const char* cname, XColor* color)
 {
     /* TODO */
     return 0;
 }
 
+int XDrawLine(Display* display, Window win, GC gc,
+              int x1, int y1, int x2, int y2)
+{
+    GR_POINT points[2];
+    points[0].x = x1;
+    points[0].y = y1;
+    points[1].x = x2;
+    points[1].y = y2;
+
+    GrDrawLines(win, gc, points, 2);
+    return 1;
+}
+
+int XTextExtents( XFontStruct* font, char* s, int len, int* direction,
+                  int* ascent, int* descent2, XCharStruct* overall)
+{
+    GR_SIZE retwidth, retheight, retbase;
+    GR_GC_ID gc = GrNewGC();
+
+    *ascent = font->info.baseline;
+    *direction = 1; /* ? */
+    *descent2 = 0; /* ? */
+
+    GrSetGCFont(gc, font->fid);
+
+    /* TODO need to set the relevant flags for the character set.
+     * A good trick might be to pass a wxString instead of char*
+     * to this function.
+     */
+    
+    GrGetGCTextSize(gc, s, len, GR_TFASCII, & retwidth,
+                    & retheight, & retbase);
+    if (overall)
+    {
+        overall->width = retwidth;
+        overall->lbearing = 0;
+        overall->rbearing = 0;
+        overall->ascent = *ascent;
+        overall->descent = 0;
+        overall->attributes = 0;
+    }
+
+    GrDestroyGC(gc);
+    
+    return 1;
+}
+
+XFontStruct* XLoadQueryFont(Display* display, const char* fontSpec)
+{
+    /* TODO: map fontSpec to something sensible for Nano-X */
+    char *fontName = NULL;
+    XFontStruct* fontInfo = malloc(sizeof(XFontStruct));
+    fontInfo->fid = GrCreateFont(fontName, 0, 0);
+    GrGetFontInfo(fontInfo->fid, & fontInfo->info);
+    return fontInfo;
+}
+
+int XFreeFont(Display* display, XFontStruct* fontStruct)
+{
+    GrDestroyFont(fontStruct->fid);
+    free(fontStruct);
+    return 1;
+}
+
+int XQueryColor(Display* display, Colormap cmap, XColor* color)
+{
+    /* cmap is a GR_PALETTE */
+    if (color->pixel < cmap->count)
+    {
+        color->red = cmap->palette[color->pixel].r;
+        color->green = cmap->palette[color->pixel].g;
+        color->blue = cmap->palette[color->pixel].b;
+        return 1;
+    }
+    else
+        return 0;
+}
+
 #endif
   /* wxUSE_NANOX */
index eb5cb7bdf1cbcd13d980bd170adafb72b73ae579..8ee782b8e4d1522fdbd82d565fe96aa50065a92a 100644 (file)
@@ -89,6 +89,7 @@ wxPaletteRefData::~wxPaletteRefData()
 
         if (pix_array_n > 0)
         {
+#if !wxUSE_NANOX
             //      XFreeColors(display, cmap, pix_array, pix_array_n, 0);
             // Be careful not to free '0' pixels...
             int i, j;
@@ -97,9 +98,10 @@ wxPaletteRefData::~wxPaletteRefData()
                 if(j > i) XFreeColors(display, cmap, &pix_array[i], j-i, 0);
                 while(j<pix_array_n && pix_array[j]==0) j++;
             }
+#endif
             delete [] pix_array;
         }
-
+        
         if (destroyable)
             XFreeColormap(display, cmap);
 
index 881d442bbc29a4b6d8aa341235957f561c8cb3c0..6f767a6ef66214e1c24716e9f711481f56b07609 100644 (file)
@@ -54,6 +54,9 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     Visual *xvisual = DefaultVisual( xdisplay, xscreen );
     Window xparent = RootWindow( xdisplay, xscreen );
     
+#if wxUSE_NANOX
+    long xattributes_mask = 0;
+#else
     XSetWindowAttributes xattributes;
     
     long xattributes_mask =
@@ -64,7 +67,8 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
     xattributes.override_redirect = True;
     xattributes.save_under = True;
-
+#endif
+    
     Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, 
        0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
     
@@ -83,12 +87,14 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
 
     XSetTransientForHint( xdisplay, xwindow, xparent );
 
+#if !wxUSE_NANOX
     XWMHints wm_hints;
     wm_hints.flags = InputHint | StateHint /* | WindowGroupHint */;
     wm_hints.input = True;
     wm_hints.initial_state = NormalState;
     XSetWMHints( xdisplay, xwindow, &wm_hints);
+#endif
+    
     return TRUE;
 }