changeset 2717:5fa8c079ee3c

fix small xshape bug
author pontscho
date Mon, 05 Nov 2001 17:00:42 +0000
parents 5e10c7239819
children 9c5e64493742
files Gui/bitmap.c Gui/bitmap.h Gui/bitmap/bitmap.c Gui/bitmap/bitmap.h Gui/skin/skin.c
diffstat 5 files changed, 114 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/Gui/bitmap.c	Mon Nov 05 15:47:21 2001 +0000
+++ b/Gui/bitmap.c	Mon Nov 05 17:00:42 2001 +0000
@@ -173,3 +173,52 @@
  Normalize( bf );
  return 0;
 }
+
+void Convert32to1( txSample * in,txSample * out,int adaptivlimit )
+{
+ out->Width=in->Width;
+ out->Height=in->Height;
+ out->BPP=1;
+ out->ImageSize=out->Width * out->Height / 8;
+ dbprintf( 4,"[c1to32] imagesize: %d\n",out->ImageSize );
+ out->Image=(char *)calloc( 1,out->ImageSize );
+ if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
+ {
+  int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0; int nothaveshape = 1;
+  buf=(unsigned long *)in->Image;
+  for ( b=0,i=0;i < out->Width * out->Height;i++ )
+   {
+    if ( buf[i] != adaptivlimit ) tmp=( tmp >> 1 )|128;
+     else { tmp=tmp >> 1; buf[i]=nothaveshape=0; }
+    if ( b++ == 7 ) { out->Image[c++]=tmp; tmp=b=0; }
+   }
+  if ( b ) out->Image[c]=tmp;
+  if ( nothaveshape ) { free( out->Image ); out->Image=NULL; }
+ }
+}
+
+void Convert1to32( txSample * in,txSample * out )
+{
+ if ( in->Image == NULL ) return;
+ out->Width=in->Width;
+ out->Height=in->Height;
+ out->BPP=32;
+ out->ImageSize=out->Width * out->Height * 4;
+ out->Image=(char *)calloc( 1,out->ImageSize );
+ dbprintf( 4,"[c32to1] imagesize: %d\n",out->ImageSize );
+ if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
+ {
+  int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0;
+  buf=(unsigned long *)out->Image;
+  for ( c=0,i=0;i < in->Width * in->Height / 8;i++ )
+   {
+    tmp=in->Image[i];
+    for ( b=0;b<8;b++ )
+     {
+      buf[c]=0;
+      if ( tmp&0x1 ) buf[c]=0xffffffff;
+      c++; tmp=tmp>>1;
+     }
+   }
+ }
+}
--- a/Gui/bitmap.h	Mon Nov 05 15:47:21 2001 +0000
+++ b/Gui/bitmap.h	Mon Nov 05 17:00:42 2001 +0000
@@ -17,5 +17,7 @@
 
 extern int bpRead( char * fname, txSample * bf );
 extern int conv24to32( txSample * bf );
+extern void Convert32to1( txSample * in,txSample * out,int adaptivlimit );
+extern void Convert1to32( txSample * in,txSample * out );
 
 #endif
--- a/Gui/bitmap/bitmap.c	Mon Nov 05 15:47:21 2001 +0000
+++ b/Gui/bitmap/bitmap.c	Mon Nov 05 17:00:42 2001 +0000
@@ -173,3 +173,52 @@
  Normalize( bf );
  return 0;
 }
+
+void Convert32to1( txSample * in,txSample * out,int adaptivlimit )
+{
+ out->Width=in->Width;
+ out->Height=in->Height;
+ out->BPP=1;
+ out->ImageSize=out->Width * out->Height / 8;
+ dbprintf( 4,"[c1to32] imagesize: %d\n",out->ImageSize );
+ out->Image=(char *)calloc( 1,out->ImageSize );
+ if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
+ {
+  int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0; int nothaveshape = 1;
+  buf=(unsigned long *)in->Image;
+  for ( b=0,i=0;i < out->Width * out->Height;i++ )
+   {
+    if ( buf[i] != adaptivlimit ) tmp=( tmp >> 1 )|128;
+     else { tmp=tmp >> 1; buf[i]=nothaveshape=0; }
+    if ( b++ == 7 ) { out->Image[c++]=tmp; tmp=b=0; }
+   }
+  if ( b ) out->Image[c]=tmp;
+  if ( nothaveshape ) { free( out->Image ); out->Image=NULL; }
+ }
+}
+
+void Convert1to32( txSample * in,txSample * out )
+{
+ if ( in->Image == NULL ) return;
+ out->Width=in->Width;
+ out->Height=in->Height;
+ out->BPP=32;
+ out->ImageSize=out->Width * out->Height * 4;
+ out->Image=(char *)calloc( 1,out->ImageSize );
+ dbprintf( 4,"[c32to1] imagesize: %d\n",out->ImageSize );
+ if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
+ {
+  int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0;
+  buf=(unsigned long *)out->Image;
+  for ( c=0,i=0;i < in->Width * in->Height / 8;i++ )
+   {
+    tmp=in->Image[i];
+    for ( b=0;b<8;b++ )
+     {
+      buf[c]=0;
+      if ( tmp&0x1 ) buf[c]=0xffffffff;
+      c++; tmp=tmp>>1;
+     }
+   }
+ }
+}
--- a/Gui/bitmap/bitmap.h	Mon Nov 05 15:47:21 2001 +0000
+++ b/Gui/bitmap/bitmap.h	Mon Nov 05 17:00:42 2001 +0000
@@ -17,5 +17,7 @@
 
 extern int bpRead( char * fname, txSample * bf );
 extern int conv24to32( txSample * bf );
+extern void Convert32to1( txSample * in,txSample * out,int adaptivlimit );
+extern void Convert1to32( txSample * in,txSample * out );
 
 #endif
--- a/Gui/skin/skin.c	Mon Nov 05 15:47:21 2001 +0000
+++ b/Gui/skin/skin.c	Mon Nov 05 17:00:42 2001 +0000
@@ -132,6 +132,7 @@
    defList->main.width=defList->main.Bitmap.Width;
    defList->main.height=defList->main.Bitmap.Height;
    #ifdef HAVE_XSHAPE
+/*
     defList->main.Mask.Width=defList->main.Bitmap.Width;
     defList->main.Mask.Height=defList->main.Bitmap.Height;
     defList->main.Mask.BPP=1;
@@ -148,7 +149,17 @@
        if ( b++ == 7 ) { defList->main.Mask.Image[c++]=tmp; tmp=b=0; }
       }
      if ( b ) defList->main.Mask.Image[c]=tmp;
-     if ( nothaveshape ) { free( defList->main.Mask.Image ); defList->main.Mask.Image=NULL; }
+//     if ( nothaveshape ) { free( defList->main.Mask.Image ); defList->main.Mask.Image=NULL; }
+    }
+*/
+    Convert32to1( &defList->main.Bitmap,&defList->main.Mask,0x00ff00ff );
+    {
+     if ( defList->main.Mask.Image != NULL )
+      {
+       txSample d;
+       Convert1to32( &defList->main.Mask,&d );
+       tgaWriteTexture( "debug.tga",&d );
+      }
     }
     #ifdef DEBUG
      dbprintf( 3,"[skin]  mask: %dx%d\n",defList->main.Mask.Width,defList->main.Mask.Height );