]> git.saurik.com Git - wxWidgets.git/commitdiff
The usual amount of trash over my telephone fixed
authorRobert Roebling <robert@roebling.de>
Wed, 13 Jan 1999 00:42:44 +0000 (00:42 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 13 Jan 1999 00:42:44 +0000 (00:42 +0000)
  Horses everywhere

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1390 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

configure
configure.in
samples/image/image.cpp
src/common/image.cpp
src/gtk.inc
src/motif.inc

index b4490d25186a45f6ff35bc1bda0e4794133ebb07..7c5b786ad3c928c45115b31cb2a1e79a78e760aa 100755 (executable)
--- a/configure
+++ b/configure
@@ -6012,7 +6012,7 @@ for ac_dir in $SEARCH_LIB;
   GUI_TK_LINK="$CHECK_LINK $GUI_TK_LINK"
   TOOLKIT=MOTIF
   TOOLKIT_DEF="__WXMOTIF__ -D__LINUX__ -D__UNIX__"
-  WX_LINK=-lwx_motif
+  WX_LINK=-lwx_motif2
   MAKEINCLUDE=../motif.inc
 fi
 
index 419be3c0b66b72a2f1c696becb3814284388d0e6..836dcafd69d6355fd9e3be0d8661c657929747d3 100644 (file)
@@ -1010,7 +1010,7 @@ if test "$wxUSE_MOTIF" = 1; then
   GUI_TK_LINK="$CHECK_LINK $GUI_TK_LINK"
   TOOLKIT=MOTIF
   TOOLKIT_DEF="__WXMOTIF__ -D__LINUX__ -D__UNIX__"
-  WX_LINK=-lwx_motif
+  WX_LINK=-lwx_motif2
   MAKEINCLUDE=../motif.inc
 fi
 
index d944c5c7575d00d3fe48c1880d6962a9e151f29b..382979d4e2f7d1c3fe06144de76fac28299279e7 100644 (file)
@@ -99,23 +99,32 @@ MyCanvas::MyCanvas( wxWindow *parent, const wxWindowID id,
   dir = wxString("../");
 #endif
 
+//#ifdef __WXMOTIF__
+  dir = wxString("../");
+//#endif
+
+#ifndef __WXMOTIF__
   wxImage image( bitmap );
   image.SaveFile( dir + wxString("test.png"), wxBITMAP_TYPE_PNG );
-
+#else
+  wxImage image;
+#endif
+  
   image.LoadFile( dir + wxString("horse.png"), wxBITMAP_TYPE_PNG );
-  image.SetRGB( 0, 0, 250, 0, 0 );
-  image.SetRGB( 1, 0, 100, 100, 100 );
-  image.SetRGB( 2, 0, 250, 250, 250 );
   my_horse = new wxBitmap( image.ConvertToBitmap() );
-
+  
+#ifndef __WXMOTIF__
   image.LoadFile( dir + wxString("test.png"), wxBITMAP_TYPE_PNG );
   my_square = new wxBitmap( image.ConvertToBitmap() );
+#endif
 }
 
 MyCanvas::~MyCanvas()
 {
   delete my_horse;
+#ifndef __WXMOTIF__
   delete my_square;
+#endif
 }
 
 void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
@@ -123,6 +132,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
   wxPaintDC dc( this );
   PrepareDC( dc );
 
+#ifndef __WXMOTIF__
   dc.DrawText( "Loaded image", 30, 100 );
   if (my_square->Ok()) dc.DrawBitmap( *my_square, 30, 120 );
 
@@ -130,7 +140,12 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
   dc.SetBrush( wxBrush( "orange", wxSOLID ) );
   dc.SetPen( *wxWHITE_PEN );
   dc.DrawRectangle( 150, 120, 100, 100 );
+<<<<<<< image.cpp
+#endif
+  
+=======
 
+>>>>>>> 1.11
   if (my_horse->Ok()) dc.DrawBitmap( *my_horse, 30, 240 );
 }
 
index ffe9f71cead1dd5292313a8b6477a2c8d7c90bfb..414ea15c251084dc93be573d7c2c2e85ef996dad 100644 (file)
@@ -28,6 +28,7 @@
 #endif
 #include "wx/filefn.h"
 #include "wx/wfstream.h"
+#include "wx/intl.h"
 
 #ifdef __WXMSW__
 #include <windows.h>
@@ -1584,10 +1585,208 @@ wxImage::wxImage( const wxBitmap &bitmap )
 // TODO
 
 #ifdef __WXMOTIF__
+
+#include <Xm/Xm.h>
+#include "wx/utils.h"
+
 wxBitmap wxImage::ConvertToBitmap() const
 {
-  wxFAIL_MSG("Sorry, wxImage::ConvertToBitmap isn't implemented for wxMotif yet.");
-  return wxNullBitmap;
+    wxBitmap bitmap;
+
+    wxCHECK_MSG( Ok(), bitmap, "invalid image" );
+
+    int width = GetWidth();
+    int height = GetHeight();
+
+    bitmap.SetHeight( height );
+    bitmap.SetWidth( width );
+
+    Display *dpy = (Display*) wxGetDisplay();
+    Visual* vis = DefaultVisual( dpy, DefaultScreen( dpy ) );
+    int bpp = DefaultDepth( dpy, DefaultScreen( dpy ) );
+
+    // Create image
+    
+    XImage *data_image = XCreateImage( dpy, vis, bpp, ZPixmap, 0, 0, width, height, 32, 0 );
+    data_image->data = new char[ data_image->bytes_per_line * data_image->height ];
+
+    bitmap.Create( width, height, bpp );
+
+/*
+    // Create mask
+
+    GdkImage *mask_image = (GdkImage*) NULL;
+
+    if (HasMask())
+    {
+        unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
+
+        mask_image =  gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
+
+       wxMask *mask = new wxMask();
+       mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+
+       bitmap.SetMask( mask );
+    }
+*/
+
+//    bitmap.SetDepth( bpp );
+    
+    // Retrieve depth info
+    
+    XVisualInfo vinfo_template;
+    XVisualInfo *vi;
+    
+    vinfo_template.visual = vis;
+    vinfo_template.visualid = XVisualIDFromVisual( vis );
+    vinfo_template.depth = bpp;
+    int nitem = 0;
+    
+    vi = XGetVisualInfo( dpy, VisualIDMask|VisualDepthMask, &vinfo_template, &nitem );
+    
+    if (!vi) 
+    {
+        printf("no visual.\n" );
+        return wxNullBitmap;
+    }
+       
+    if ((bpp == 16) && (vi->red_mask != 0xf800)) bpp = 15;
+    if (bpp < 8) bpp = 8;
+
+    // Render
+
+    enum byte_order { RGB, RBG, BRG, BGR, GRB, GBR };
+    byte_order b_o = RGB;
+
+    if (bpp >= 24)
+    {
+        if ((vi->red_mask > vi->green_mask) && (vi->green_mask > vi->blue_mask))      b_o = RGB;
+        else if ((vi->red_mask > vi->blue_mask) && (vi->blue_mask > vi->green_mask))  b_o = RGB;
+        else if ((vi->blue_mask > vi->red_mask) && (vi->red_mask > vi->green_mask))   b_o = BRG;
+        else if ((vi->blue_mask > vi->green_mask) && (vi->green_mask > vi->red_mask)) b_o = BGR;
+        else if ((vi->green_mask > vi->red_mask) && (vi->red_mask > vi->blue_mask))   b_o = GRB;
+        else if ((vi->green_mask > vi->blue_mask) && (vi->blue_mask > vi->red_mask))  b_o = GBR;
+    }
+
+/*
+    int r_mask = GetMaskRed();
+    int g_mask = GetMaskGreen();
+    int b_mask = GetMaskBlue();
+*/
+
+    unsigned char* data = GetData();
+
+    int index = 0;
+    for (int y = 0; y < height; y++)
+    {
+        for (int x = 0; x < width; x++)
+        {
+            int r = data[index];
+           index++;
+            int g = data[index];
+           index++;
+            int b = data[index];
+           index++;
+
+/*
+           if (HasMask())
+           {
+               if ((r == r_mask) && (b == b_mask) && (g == g_mask))
+                   gdk_image_put_pixel( mask_image, x, y, 1 );
+               else
+                   gdk_image_put_pixel( mask_image, x, y, 0 );
+           }
+*/
+
+           switch (bpp)
+           {
+               case 8:
+               {
+/*
+                    int pixel = -1;
+                   if (wxTheApp->m_colorCube)
+                   {
+                       pixel = wxTheApp->m_colorCube
+                           [ ((r & 0xf8) << 7) + ((g & 0xf8) << 2) + ((b & 0xf8) >> 3) ];                    
+                    }              
+                    else
+                   {
+                       GdkColormap *cmap = gtk_widget_get_default_colormap();
+                        GdkColor *colors = cmap->colors;
+                        int max = 3 * (65536);
+
+                        for (int i = 0; i < cmap->size; i++)
+                        {
+                            int rdiff = (r << 8) - colors[i].red;
+                            int gdiff = (g << 8) - colors[i].green;
+                            int bdiff = (b << 8) - colors[i].blue;
+                            int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
+                            if (sum < max) { pixel = i; max = sum; }
+                       }
+                    }
+
+                   gdk_image_put_pixel( data_image, x, y, pixel );
+*/
+
+                   break;
+               }
+               case 15:
+               {
+                   int pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
+                   XPutPixel( data_image, x, y, pixel );
+                   break;
+               }
+               case 16:
+               {
+                   int pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
+                   XPutPixel( data_image, x, y, pixel );
+                   break;
+               }
+               case 32:
+               case 24:
+               {
+                   int pixel = 0;
+                   switch (b_o)
+                   {
+                       case RGB: pixel = (r << 16) | (g << 8) | b; break;
+                       case RBG: pixel = (r << 16) | (b << 8) | g; break;
+                       case BRG: pixel = (b << 16) | (r << 8) | g; break;
+                       case BGR: pixel = (b << 16) | (g << 8) | r; break;
+                       case GRB: pixel = (g << 16) | (r << 8) | b; break;
+                       case GBR: pixel = (g << 16) | (b << 8) | r; break;
+                   }
+                   XPutPixel( data_image, x, y, pixel );
+               }
+               default: break;
+           }
+        } // for
+    }  // for
+
+    // Blit picture
+
+    XGCValues gcvalues;
+    gcvalues.foreground = BlackPixel( dpy, DefaultScreen( dpy ) );
+    GC gc = XCreateGC( dpy, RootWindow ( dpy, DefaultScreen(dpy) ), GCForeground, &gcvalues );
+    XPutImage( dpy, (Drawable)bitmap.GetPixmap(), gc, data_image, 0, 0, 0, 0, width, height );
+
+    XDestroyImage( data_image );
+    XFreeGC( dpy, gc );
+
+/*
+    // Blit mask
+
+    if (HasMask())
+    {
+        GdkGC *mask_gc = gdk_gc_new( bitmap.GetMask()->GetBitmap() );
+
+        gdk_draw_image( bitmap.GetMask()->GetBitmap(), mask_gc, mask_image, 0, 0, 0, 0, width, height );
+
+        gdk_image_destroy( mask_image );
+        gdk_gc_unref( mask_gc );
+    }
+*/
+
+    return bitmap;
 }
 
 wxImage::wxImage( const wxBitmap &bitmap )
index 07acc7f521659cd56934b2c4c8d599d4e9543c6e..8984fd7809590accbd0f6f68945c8fdb5c6eafdb 100644 (file)
@@ -8,7 +8,6 @@ LIB_MINOR=1
 
 # define library sources
 
-
 LIB_CPP_SRC=\
 \
  common/cmndata.cpp \
index 7230b8c036324fa927db6e8e9adf1f268b58a18c..b5dc5568313a9e7a524e4106399638517d1c893f 100644 (file)
@@ -24,6 +24,7 @@ LIB_CPP_SRC=\
  common/gdicmn.cpp \
  common/hash.cpp \
  common/helpbase.cpp \
+ common/image.cpp \
  common/intl.cpp \
  common/ipcbase.cpp \
  common/layout.cpp \
@@ -156,35 +157,4 @@ LIB_C_SRC=\
 \
  motif/xmcombo/xmcombo.c \
 \
- common/extended.c \
-\
- png/png.c \
- png/pngset.c \
- png/pngget.c \
- png/pngrutil.c \
- png/pngtrans.c \
- png/pngwutil.c \
- png/pngread.c \
- png/pngrio.c \
- png/pngwio.c \
- png/pngwrite.c \
- png/pngrtran.c \
- png/pngwtran.c \
- png/pngmem.c \
- png/pngerror.c \
- png/pngpread.c \
-\
- zlib/adler32.c \
- zlib/compress.c \
- zlib/crc32.c \
- zlib/gzio.c \
- zlib/uncompr.c \
- zlib/deflate.c \
- zlib/trees.c \
- zlib/zutil.c \
- zlib/inflate.c \
- zlib/infblock.c \
- zlib/inftrees.c \
- zlib/infcodes.c \
- zlib/infutil.c \
- zlib/inffast.c \
+ common/extended.c
\ No newline at end of file