* at last, transpareny WORKS !!!!!
[vlc.git] / modules / gui / skins / gtk2 / gtk2_graphics.cpp
1 /*****************************************************************************
2  * gtk2_graphics.cpp: GTK2 implementation of the Graphics and Region classes
3  *****************************************************************************
4  * Copyright (C) 2003 VideoLAN
5  * $Id: gtk2_graphics.cpp,v 1.8 2003/04/16 14:38:04 asmax Exp $
6  *
7  * Authors: Cyril Deguet     <asmax@videolan.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
22  * USA.
23  *****************************************************************************/
24
25 #if !defined WIN32
26
27 //--- GTK2 -----------------------------------------------------------------
28 #include <gdk/gdk.h>
29
30 //--- SKIN ------------------------------------------------------------------
31 #include "graphics.h"
32 #include "window.h"
33 #include "os_window.h"
34 #include "gtk2_graphics.h"
35
36 #include <stdio.h>
37
38 //---------------------------------------------------------------------------
39 // GTK2 GRAPHICS
40 //---------------------------------------------------------------------------
41 GTK2Graphics::GTK2Graphics( int w, int h, Window *from ) : Graphics( w, h )
42 {
43 /*    HBITMAP HImage ;
44     Image          = CreateCompatibleDC( NULL );
45     if( from != NULL )
46     {
47         HDC DC = GetWindowDC( ( (GTK2Window *)from )->GetHandle() );
48         HImage = CreateCompatibleBitmap( DC, w, h );
49         ReleaseDC( ( (GTK2Window *)from )->GetHandle(), DC );
50     }
51     else
52     {
53         HImage = CreateCompatibleBitmap( Image, w, h );
54     }
55     SelectObject( Image, HImage );
56     DeleteObject( HImage );*/
57     
58     if( from != NULL )
59     {
60         GdkWindow *fromWnd = ( (GTK2Window *)from )->GetHandle();
61         Image = (GdkDrawable*) gdk_pixmap_new( fromWnd, w, h, -1 );
62         Gc = gdk_gc_new( ( GdkDrawable* )fromWnd );
63     }
64     else
65     {
66         Image = (GdkDrawable*) gdk_pixmap_new( NULL, w, h, 8 );
67         gdk_drawable_set_colormap( Image, gdk_colormap_get_system() );
68         Gc = gdk_gc_new( Image );
69     }
70     
71     // Set the background color to black
72     gdk_draw_rectangle( Image, Gc, TRUE, 0, 0, w, h );
73 }
74 //---------------------------------------------------------------------------
75 GTK2Graphics::~GTK2Graphics()
76 {
77 /*    DeleteDC( Image );*/
78 }
79 //---------------------------------------------------------------------------
80 void GTK2Graphics::CopyFrom( int dx, int dy, int dw, int dh, Graphics *Src,
81                               int sx, int sy, int Flag )
82 {
83 /*    BitBlt( Image, dx, dy, dw, dh, ( (GTK2Graphics *)Src )->GetImageHandle(),
84         sx, sy, Flag );*/
85     gdk_draw_drawable( Image, Gc, (( GTK2Graphics* )Src )->GetImage(),
86             sx, sy, dx, dy, dw, dh );
87 }
88
89 //---------------------------------------------------------------------------
90 /*void GTK2Graphics::CopyTo( Graphics *Dest, int dx, int dy, int dw, int dh,
91                             int sx, int sy, int Flag )
92 {
93     BitBlt( ( (GTK2Graphics *)Dest )->GetImageHandle(), dx, dy, dw, dh, Image,
94         sx, sy, Flag );
95 }*/
96 //---------------------------------------------------------------------------
97 void GTK2Graphics::DrawRect( int x, int y, int w, int h, int color )
98 {
99     gdk_draw_rectangle( Image, Gc, TRUE, x, y, w, h);
100 }
101 //---------------------------------------------------------------------------
102 void GTK2Graphics::SetClipRegion( Region *rgn )
103 {
104 /*    SelectClipRgn( Image, ( (GTK2Region *)rgn )->GetHandle() );*/
105 }
106 //---------------------------------------------------------------------------
107
108
109
110
111 //---------------------------------------------------------------------------
112 // GTK2 REGION
113 //---------------------------------------------------------------------------
114 GTK2Region::GTK2Region()
115 {
116     Rgn = gdk_region_new();
117 }
118 //---------------------------------------------------------------------------
119 GTK2Region::GTK2Region( int x, int y, int w, int h )
120 {
121     GdkRectangle rect;
122     rect.x = x;
123     rect.y = y;
124     rect.width = w;
125     rect.height = h;
126     Rgn = gdk_region_rectangle( &rect );
127 }
128 //---------------------------------------------------------------------------
129 GTK2Region::~GTK2Region()
130 {
131 /*    DeleteObject( Rgn );*/
132 }
133 //---------------------------------------------------------------------------
134 void GTK2Region::AddPoint( int x, int y )
135 {
136 /*    AddRectangle( x, y, x + 1, y + 1 );*/
137 }
138 //---------------------------------------------------------------------------
139 void GTK2Region::AddRectangle( int x, int y, int w, int h )
140 {
141     GdkRectangle rect;
142     rect.x = x;
143     rect.y = y;
144     rect.width = w;
145     rect.height = h;
146     GdkRegion *Buffer = gdk_region_rectangle( &rect );
147     gdk_region_union( Rgn, Buffer );
148 }
149 //---------------------------------------------------------------------------
150 void GTK2Region::AddElipse( int x, int y, int w, int h )
151 {
152 /*    HRGN Buffer;
153     Buffer = CreateEllipticRgn( x, y, x + w, y + h );
154     CombineRgn( Rgn, Buffer, Rgn, 0x2 );
155     DeleteObject( Buffer );*/
156     /*FIXME*/
157 }
158 //---------------------------------------------------------------------------
159 void GTK2Region::Move( int x, int y )
160 {
161 /*    OffsetRgn( Rgn, x, y );*/
162 }
163 //---------------------------------------------------------------------------
164 bool GTK2Region::Hit( int x, int y )
165 {
166     return gdk_region_point_in( Rgn, x, y );
167 }
168 //---------------------------------------------------------------------------
169
170 #endif