]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/xpm/macx.c
fixed bug in mouse handling
[wxWidgets.git] / src / mac / xpm / macx.c
index 3f83af3ac88224e631d552871d27d6eb90751d75..22368ffac0f306c47a230c75693aeaec45f56006 100644 (file)
@@ -33,7 +33,7 @@
 *  Revised 4/96                                                               *
 \*****************************************************************************/
 
-#include "xpmi.h"
+#include "XpmI.h"
 //#include "macx.h"
 #include "simx.h"
 
@@ -58,6 +58,7 @@ AllocXImage (
                        
                
                        NewGWorld( &img->gworldptr , depth , &rect , NULL , NULL , 0 ) ;
+                       LockPixels( GetGWorldPixMap( img->gworldptr ) ) ;
                        if (img->gworldptr == NULL)
                        {
                        XDestroyImage (img);
@@ -67,346 +68,3 @@ AllocXImage (
     
     return img;
 }
-
-/*
-
-static struct RastPort *
-AllocRastPort (unsigned int, unsigned int, unsigned int);
-static void
-FreeRastPort (struct RastPort *, unsigned int,unsigned int);
-
-
-static struct RastPort *
-AllocRastPort (
-    unsigned int   width,
-    unsigned int   height,
-    unsigned int   depth)
-{
-    struct RastPort  *rp;
-    
-    rp = XpmMalloc (sizeof (*rp));
-    if (rp != NULL)
-    {
-       InitRastPort (rp);
-       if (GfxBase->LibNode.lib_Version >= 39)
-       {
-           rp->BitMap = AllocBitMap (width, height, depth, BMF_CLEAR, NULL);
-           if (rp->BitMap == NULL)
-           {
-               FreeRastPort (rp, width, height);
-               return NULL;
-           }
-       }
-       else
-       {
-           unsigned int   i;
-           
-           rp->BitMap = XpmMalloc (sizeof (*rp->BitMap));
-           if (rp->BitMap == NULL)
-           {
-               FreeRastPort (rp, width, height);
-               return NULL;
-           }
-           
-           InitBitMap (rp->BitMap, depth, width, height);
-           for (i = 0; i < depth; ++i)
-               rp->BitMap->Planes[i] = NULL;
-           for (i = 0; i < depth; ++i)
-           {
-               rp->BitMap->Planes[i] = (PLANEPTR)AllocRaster (width, height);
-               if (rp->BitMap->Planes[i] == NULL)
-               {
-                   FreeRastPort (rp, width, height);
-                   return NULL;
-               }
-           }
-       }
-    }
-    
-    return rp;
-}
-
-
-static void
-FreeRastPort (
-    struct RastPort  *rp,
-    unsigned int      width,
-    unsigned int      height)
-{
-    if (rp != NULL)
-    {
-       if (rp->BitMap != NULL)
-       {
-           WaitBlit ();
-           if (GfxBase->LibNode.lib_Version >= 39)
-               FreeBitMap (rp->BitMap);
-           else
-           {
-               unsigned int   i;
-               
-               for (i = 0; i < rp->BitMap->Depth; ++i)
-               {
-                   if (rp->BitMap->Planes[i] != NULL)
-                       FreeRaster (rp->BitMap->Planes[i], width, height);
-               }
-               XpmFree (rp->BitMap);
-           }
-       }
-       XpmFree (rp);
-    }
-}
-
-
-XImage *
-AllocXImage (
-    unsigned int   width,
-    unsigned int   height,
-    unsigned int   depth)
-{
-    XImage  *img;
-    
-    img = XpmMalloc (sizeof (*img));
-    if (img != NULL)
-    {
-       img->width = width;
-       img->height = height;
-       img->rp = AllocRastPort (img->width, img->height, depth);
-       if (img->rp == NULL)
-       {
-           FreeXImage (img);
-           return NULL;
-       }
-    }
-    
-    return img;
-}
-
-
-int
-FreeXImage (
-    XImage  *ximage)
-{
-    if (ximage != NULL)
-    {
-       FreeRastPort (ximage->rp, ximage->width, ximage->height);
-       XpmFree (ximage);
-    }
-    
-    return Success;
-}
-
-
-int
-XPutPixel (
-    XImage         *ximage,
-    int             x,
-    int             y,
-    unsigned long   pixel)
-{
-    SetAPen (ximage->rp, pixel);
-    WritePixel (ximage->rp, x, y);
-    
-    return Success;
-}
-
-
-Status
-AllocBestPen (
-    Colormap        colormap,
-    XColor         *screen_in_out,
-    unsigned long   precision,
-    Bool            fail_if_bad)
-{
-    if (GfxBase->LibNode.lib_Version >= 39)
-    {
-       unsigned long   r, g, b;
-       
-       r = screen_in_out->red * 0x00010001;
-       g = screen_in_out->green * 0x00010001;
-       b = screen_in_out->blue * 0x00010001;
-       screen_in_out->pixel = ObtainBestPen (colormap, r, g, b,
-                                             OBP_Precision, precision,
-                                             OBP_FailIfBad, fail_if_bad,
-                                             TAG_DONE);
-       if (screen_in_out->pixel == -1)
-           return False;
-       
-       QueryColor (colormap, screen_in_out);
-    }
-    else
-    {
-       XColor   nearest, trial;
-       long     nearest_delta, trial_delta;
-       int      num_cells, i;
-       
-       num_cells = colormap->Count;
-       nearest.pixel = 0;
-       QueryColor (colormap, &nearest);
-       nearest_delta = ((((screen_in_out->red >> 8) - (nearest.red >> 8))
-                         * ((screen_in_out->red >> 8) - (nearest.red >> 8)))
-                        +
-                        (((screen_in_out->green >> 8) - (nearest.green >> 8))
-                         * ((screen_in_out->green >> 8) - (nearest.green >> 8)))
-                        +
-                        (((screen_in_out->blue >> 8) - (nearest.blue >> 8))
-                         * ((screen_in_out->blue >> 8) - (nearest.blue >> 8))));
-       for (i = 1; i < num_cells; i++)
-       {
-       // precision and fail_if_bad is ignored under pre V39 
-           trial.pixel = i;
-           QueryColor (colormap, &trial);
-           trial_delta = ((((screen_in_out->red >> 8) - (trial.red >> 8))
-                           * ((screen_in_out->red >> 8) - (trial.red >> 8)))
-                          +
-                          (((screen_in_out->green >> 8) - (trial.green >> 8))
-                           * ((screen_in_out->green >> 8) - (trial.green >> 8)))
-                          +
-                          (((screen_in_out->blue >> 8) - (trial.blue >> 8))
-                           * ((screen_in_out->blue >> 8) - (trial.blue >> 8))));
-           if (trial_delta < nearest_delta)
-           {
-               nearest = trial;
-               nearest_delta = trial_delta;
-           }
-       }
-       screen_in_out->pixel = nearest.pixel;
-       screen_in_out->red = nearest.red;
-       screen_in_out->green = nearest.green;
-       screen_in_out->blue = nearest.blue;
-    }
-    
-    return True;
-}
-
-
-int
-FreePens (
-    Colormap        colormap,
-    unsigned long  *pixels,
-    int             npixels)
-{
-    if (GfxBase->LibNode.lib_Version >= 39)
-    {
-       int   i;
-       
-       for (i = 0; i < npixels; i++)
-           ReleasePen (colormap, pixels[i]);
-    }
-    
-    return Success;
-}
-
-
-Status
-ParseColor (
-    char    *spec,
-    XColor  *exact_def_return)
-{
-    int spec_length;
-    
-    if (spec == 0)
-       return False;
-    
-    spec_length = strlen(spec);
-    if (spec[0] == '#')
-    {
-       int hexlen;
-       char hexstr[10];
-       
-       hexlen = (spec_length - 1) / 3;
-       if (hexlen < 1 || hexlen > 4 || hexlen * 3 != spec_length - 1)
-           return False;
-       
-       hexstr[hexlen] = '\0';
-       strncpy (hexstr, spec + 1, hexlen);
-       exact_def_return->red = strtoul (hexstr, NULL, 16) << (16 - 4*hexlen);
-       strncpy (hexstr, spec + 1 + hexlen, hexlen);
-       exact_def_return->green = strtoul (hexstr, NULL, 16) << (16 - 4*hexlen);
-       strncpy (hexstr, spec + 1 + 2 * hexlen, hexlen);
-       exact_def_return->blue = strtoul (hexstr, NULL, 16) << (16 - 4*hexlen);
-       
-       return True;
-    }
-    else
-    {
-       FILE  *rgbf;
-       int    items, red, green, blue;
-       char   line[512], name[512];
-       Bool   success = False;
-       
-       rgbf = fopen ("LIBS:rgb.txt", "r");
-       if (rgbf == NULL)
-           return False;
-       
-       while (fgets(line, sizeof (line), rgbf) && !success)
-       {
-           items = sscanf (line, "%d %d %d %[^\n]\n",
-                           &red, &green, &blue, name);
-           if (items != 4)
-               continue;
-           
-           if (red < 0 || red > 0xFF
-               || green < 0 || green > 0xFF
-               || blue < 0 || blue > 0xFF)
-           {
-               continue;
-           }
-           
-           if (0 == xpmstrcasecmp (spec, name))
-           {
-               exact_def_return->red = red * 0x0101;
-               exact_def_return->green = green * 0x0101;
-               exact_def_return->blue = blue * 0x0101;
-               success = True;
-           }
-       }
-       fclose (rgbf);
-       
-       return success;
-    }
-}
-
-
-int
-QueryColor (
-    Colormap   colormap,
-    XColor    *def_in_out)
-{
-    if (GfxBase->LibNode.lib_Version >= 39)
-    {
-       unsigned long   rgb[3];
-       
-       GetRGB32 (colormap, def_in_out->pixel, 1, rgb);
-       def_in_out->red = rgb[0] >> 16;
-       def_in_out->green = rgb[1] >> 16;
-       def_in_out->blue = rgb[2] >> 16;
-    }
-    else
-    {
-       unsigned short   rgb;
-       
-       rgb = GetRGB4 (colormap, def_in_out->pixel);
-       def_in_out->red = ((rgb >> 8) & 0xF) * 0x1111;
-       def_in_out->green = ((rgb >> 4) & 0xF) * 0x1111;
-       def_in_out->blue = (rgb & 0xF) * 0x1111;
-    }
-    
-    return Success;
-}
-
-
-int
-QueryColors (
-    Colormap   colormap,
-    XColor    *defs_in_out,
-    int        ncolors)
-{
-    int   i;
-    
-    for (i = 0; i < ncolors; i++)
-       QueryColor (colormap, &defs_in_out[i]);
-    
-    return Success;
-}
-
-*/