* at last, transpareny WORKS !!!!!
authorCyril Deguet <asmax@videolan.org>
Wed, 16 Apr 2003 14:38:04 +0000 (14:38 +0000)
committerCyril Deguet <asmax@videolan.org>
Wed, 16 Apr 2003 14:38:04 +0000 (14:38 +0000)
modules/gui/skins/gtk2/gtk2_api.cpp
modules/gui/skins/gtk2/gtk2_bitmap.cpp
modules/gui/skins/gtk2/gtk2_graphics.cpp
modules/gui/skins/gtk2/gtk2_theme.cpp
modules/gui/skins/gtk2/gtk2_window.cpp
modules/gui/skins/src/event.cpp

index bfa17b4..7cb3ebc 100644 (file)
@@ -2,7 +2,7 @@
  * gtk2_api.cpp: Various gtk2-specific functions
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: gtk2_api.cpp,v 1.8 2003/04/15 20:54:58 karibu Exp $
+ * $Id: gtk2_api.cpp,v 1.9 2003/04/16 14:38:04 asmax Exp $
  *
  * Authors: Cyril Deguet  <asmax@videolan.org>
  *
@@ -67,7 +67,7 @@ void OSAPI_PostMessage( Window *win, unsigned int message, unsigned int param1,
 
     if( message == VLC_HIDE )
     {
-        fprintf( stderr, "======= message %i\n", message );
+        fprintf( stderr, "======= message %i %x\n", message, event );
     }
 
     gdk_event_put( (GdkEvent *)event );
index 42f2305..c5978de 100644 (file)
@@ -2,7 +2,7 @@
  * gtk2_bitmap.cpp: GTK2 implementation of the Bitmap class
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: gtk2_bitmap.cpp,v 1.10 2003/04/15 22:16:05 asmax Exp $
+ * $Id: gtk2_bitmap.cpp,v 1.11 2003/04/16 14:38:04 asmax Exp $
  *
  * Authors: Cyril Deguet     <asmax@videolan.org>
  *
@@ -111,7 +111,7 @@ GTK2Bitmap::GTK2Bitmap( intf_thread_t *p_intf, string FileName, int AColor )
     }
 
     Bmp = gdk_pixbuf_add_alpha( Bmp, TRUE, AColor & 0xff, (AColor>>8) & 0xff, 
-            AColor>>16 );
+            (AColor>>16) & 0xff );
     Width = gdk_pixbuf_get_width( Bmp );
     Height = gdk_pixbuf_get_height( Bmp );
 }
@@ -161,10 +161,10 @@ void GTK2Bitmap::DrawBitmap( int x, int y, int w, int h, int xRef, int yRef,
                               Graphics *dest )
 {
     GdkDrawable *destImg = ( (GTK2Graphics *)dest )->GetImage();
-   // GdkGC *destGC = ( (GTK2Graphics *)dest )->GetGC();
+    GdkGC *destGC = ( (GTK2Graphics *)dest )->GetGC();
 
-    gdk_pixbuf_render_to_drawable_alpha( Bmp, destImg, x, y, xRef, yRef, 
-            w, h, GDK_PIXBUF_ALPHA_BILEVEL, 128, GDK_RGB_DITHER_NORMAL, 0, 0);
+    gdk_pixbuf_render_to_drawable( Bmp, destImg, destGC, x, y, xRef, yRef, 
+            w, h, GDK_RGB_DITHER_NORMAL, 0, 0);
 }
 //---------------------------------------------------------------------------
 bool GTK2Bitmap::Hit( int x, int y)
@@ -172,6 +172,7 @@ bool GTK2Bitmap::Hit( int x, int y)
     if( x < 0 || x >= Width || y < 0 || y >= Height )
         return false;
 
+/* FIXME */
     guchar *pixels;
     int rowstride, offset;
     gboolean has_alpha;
index 0071944..d80a573 100644 (file)
@@ -2,7 +2,7 @@
  * gtk2_graphics.cpp: GTK2 implementation of the Graphics and Region classes
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: gtk2_graphics.cpp,v 1.7 2003/04/15 01:19:11 ipkiss Exp $
+ * $Id: gtk2_graphics.cpp,v 1.8 2003/04/16 14:38:04 asmax Exp $
  *
  * Authors: Cyril Deguet     <asmax@videolan.org>
  *
@@ -67,6 +67,9 @@ GTK2Graphics::GTK2Graphics( int w, int h, Window *from ) : Graphics( w, h )
         gdk_drawable_set_colormap( Image, gdk_colormap_get_system() );
         Gc = gdk_gc_new( Image );
     }
+    
+    // Set the background color to black
+    gdk_draw_rectangle( Image, Gc, TRUE, 0, 0, w, h );
 }
 //---------------------------------------------------------------------------
 GTK2Graphics::~GTK2Graphics()
index fafb865..e28b81e 100644 (file)
@@ -2,7 +2,7 @@
  * gtk2_theme.cpp: GTK2 implementation of the Theme class
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: gtk2_theme.cpp,v 1.12 2003/04/15 20:33:58 karibu Exp $
+ * $Id: gtk2_theme.cpp,v 1.13 2003/04/16 14:38:04 asmax Exp $
  *
  * Authors: Cyril Deguet     <asmax@videolan.org>
  *
@@ -260,6 +260,8 @@ void GTK2Theme::AddWindow( string name, int x, int y, bool visible,
         return;
     }
 
+    GdkColor black = {0, 0, 0, 0};
+
     gdk_window_show( gwnd );
 
     WindowList.push_back( (Window *)new OSWindow( p_intf, gwnd, x, y, visible,
index 1bc862f..6a03718 100644 (file)
@@ -2,7 +2,7 @@
  * gtk2_window.cpp: GTK2 implementation of the Window class
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: gtk2_window.cpp,v 1.15 2003/04/15 20:33:58 karibu Exp $
+ * $Id: gtk2_window.cpp,v 1.16 2003/04/16 14:38:04 asmax Exp $
  *
  * Authors: Cyril Deguet     <asmax@videolan.org>
  *
@@ -262,10 +262,37 @@ void GTK2Window::RefreshFromImage( int x, int y, int w, int h )
     // Release window device context
     ReleaseDC( hWnd, DC );
 
-*/
+*/ 
+    GdkDrawable *drawable = (( GTK2Graphics* )Image )->GetImage();
+    GdkImage *image = gdk_drawable_get_image( drawable, 0, 0, Width, Height );
+    
+    gdk_draw_drawable( gWnd, gc, drawable, x, y, x, y, w, h );
 
-    gdk_draw_drawable( gWnd, gc, (( GTK2Graphics* )Image )->GetImage(),
-            x, y, x, y, w, h );
+    // Mask for transparency
+    GdkRegion *region = gdk_region_new();
+    for( int line = 0; line < Height; line++ )
+    {
+        int start = 0;
+        while( gdk_image_get_pixel( image, start, line ) == 0 && start < Width-1)
+        {
+            start++;
+        } 
+        int end = Width - 1;
+        while( end >=0 && gdk_image_get_pixel( image, end, line ) == 0)
+        {
+            end--;
+        }
+        GdkRectangle rect;
+        rect.x = start;
+        rect.y = line;
+        rect.width = end - start + 1;
+        rect.height = 1;
+        GdkRegion *rectReg = gdk_region_rectangle( &rect );
+        gdk_region_union( region, rectReg );
+        gdk_region_destroy( rectReg );
+    }
+    gdk_window_shape_combine_region( gWnd, region, 0, 0 );
+    gdk_region_destroy( region );
 }
 //---------------------------------------------------------------------------
 void GTK2Window::WindowManualMove()
index a7c22f7..793244d 100644 (file)
@@ -2,7 +2,7 @@
  * event.cpp: Event class
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: event.cpp,v 1.8 2003/04/14 22:29:06 gbazin Exp $
+ * $Id: event.cpp,v 1.9 2003/04/16 14:38:04 asmax Exp $
  *
  * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
  *          Emmanuel Puig    <karibu@via.ecp.fr>
@@ -103,7 +103,9 @@ void Event::PostTextMessage( string text )
 {
     char *txt = new char[text.size()+1];
     strcpy( txt, text.c_str() );
-    OSAPI_PostMessage( NULL, CTRL_SET_TEXT, (unsigned int)this, (long)txt );
+   // OSAPI_PostMessage( NULL, CTRL_SET_TEXT, (unsigned int)this, (long)txt );
+/* FIXME */   
+   fprintf(stderr, "posttext %s\n", text.c_str());
 }
 //---------------------------------------------------------------------------
 unsigned int Event::GetMessageType( string Desc )