* skeleton of X11 skins
authorCyril Deguet <asmax@videolan.org>
Mon, 28 Apr 2003 14:32:57 +0000 (14:32 +0000)
committerCyril Deguet <asmax@videolan.org>
Mon, 28 Apr 2003 14:32:57 +0000 (14:32 +0000)
16 files changed:
modules/gui/skins/x11/x11_api.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_bitmap.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_bitmap.h [new file with mode: 0644]
modules/gui/skins/x11/x11_dragdrop.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_dragdrop.h [new file with mode: 0644]
modules/gui/skins/x11/x11_event.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_event.h [new file with mode: 0644]
modules/gui/skins/x11/x11_font.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_font.h [new file with mode: 0644]
modules/gui/skins/x11/x11_graphics.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_graphics.h [new file with mode: 0644]
modules/gui/skins/x11/x11_run.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_theme.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_theme.h [new file with mode: 0644]
modules/gui/skins/x11/x11_window.cpp [new file with mode: 0644]
modules/gui/skins/x11/x11_window.h [new file with mode: 0644]

diff --git a/modules/gui/skins/x11/x11_api.cpp b/modules/gui/skins/x11/x11_api.cpp
new file mode 100644 (file)
index 0000000..ae8b125
--- /dev/null
@@ -0,0 +1,168 @@
+/*****************************************************************************
+ * x11_api.cpp: Various x11-specific functions
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_api.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet  <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../src/window.h"
+#include "../os_window.h"
+#include "../os_api.h"
+#include "../src/event.h"       // for MAX_PARAM_SIZE
+
+#include <stdio.h>
+
+//---------------------------------------------------------------------------
+// Event API
+//---------------------------------------------------------------------------
+void OSAPI_SendMessage( SkinWindow *win, unsigned int message, unsigned int param1,
+                        long param2 )
+{
+/*    if( win == NULL )
+        SendMessage( NULL, message, param1, param2 );
+    else
+        SendMessage( ( (Win32Window *)win )->GetHandle(), message, param1,
+                     param2 );*/
+}
+//---------------------------------------------------------------------------
+void OSAPI_PostMessage( SkinWindow *win, unsigned int message, unsigned int param1,
+                        long param2 )
+{
+
+/*    GdkEventClient *event = new GdkEventClient;
+    
+    event->type = GDK_CLIENT_EVENT;
+    if( win == NULL )
+        event->window = NULL;
+    else
+        event->window = (( Window )win)->GetHandle();
+    event->send_event = 0;
+    event->message_type = NULL;
+    event->data_format = 32;
+    event->data.l[0] = message;
+    event->data.l[1] = param1;
+    event->data.l[2] = param2;
+
+    gdk_event_put( (GdkEvent *)event );
+
+    delete event;*/
+}
+//---------------------------------------------------------------------------
+
+
+
+
+//---------------------------------------------------------------------------
+// Graphic API
+//---------------------------------------------------------------------------
+int OSAPI_GetNonTransparentColor( int c )
+{
+/*    // Get desktop device context
+    HDC DeskDC = GetWindowDC( GetDesktopWindow() );
+
+    // If color is black or color is same as black wether pixel color depth
+    if( c == 0 || SetPixel( DeskDC, 0, 0, c ) == 0 )
+    {
+        if( GetDeviceCaps( DeskDC, BITSPIXEL ) < 24 )
+            c = RGB(8, 0, 0);
+        else
+            c = RGB(1, 0, 0);
+    }
+    ReleaseDC( GetDesktopWindow(), DeskDC );
+    return c;*/
+}
+//---------------------------------------------------------------------------
+
+
+
+
+//---------------------------------------------------------------------------
+// General
+//---------------------------------------------------------------------------
+int OSAPI_GetTime()
+{
+/*    GTimeVal time;
+    g_get_current_time( &time );
+    return ( time.tv_sec * 1000 + time.tv_usec / 1000 );*/
+}
+//---------------------------------------------------------------------------
+void OSAPI_GetScreenSize( int &w, int &h )
+{
+/*    w = GetSystemMetrics(SM_CXSCREEN);
+    h = GetSystemMetrics(SM_CYSCREEN);*/
+}
+//---------------------------------------------------------------------------
+void OSAPI_GetMousePos( int &x, int &y )
+{
+/*    gdk_window_get_pointer( gdk_get_default_root_window(), &x, &y, NULL );*/
+}
+//---------------------------------------------------------------------------
+string OSAPI_GetWindowTitle( SkinWindow *win )
+{
+/*    return ( (GTK2Window *)win )->GetName();*/
+}
+//---------------------------------------------------------------------------
+bool OSAPI_RmDir( string path )
+{
+/*    WIN32_FIND_DATA find;
+    string File;
+    string FindFiles = path + "\\*.*";
+    HANDLE handle    = FindFirstFile( (char *)FindFiles.c_str(), &find );
+
+    while( handle != INVALID_HANDLE_VALUE )
+    {
+        // If file is neither "." nor ".."
+        if( strcmp( find.cFileName, "." ) && strcmp( find.cFileName, ".." ) )
+        {
+            // Set file name
+            File = path + "\\" + (string)find.cFileName;
+
+            // If file is a directory, delete it recursively
+            if( find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
+            {
+                OSAPI_RmDir( File );
+            }
+            // Else, it is a file so simply delete it
+            else
+            {
+                DeleteFile( (char *)File.c_str() );
+            }
+        }
+
+        // If no more file in directory, exit while
+        if( !FindNextFile( handle, &find ) )
+            break;
+    }
+
+    // Now directory is empty so can be removed
+    FindClose( handle );
+    RemoveDirectory( (char *)path.c_str() );
+
+    return true;*/
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_bitmap.cpp b/modules/gui/skins/x11/x11_bitmap.cpp
new file mode 100644 (file)
index 0000000..7246cd0
--- /dev/null
@@ -0,0 +1,195 @@
+/*****************************************************************************
+ * x11_bitmap.cpp: X11 implementation of the Bitmap class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_bitmap.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *          Emmanuel Puig    <karibu@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../os_api.h"
+#include "../src/graphics.h"
+#include "x11_graphics.h"
+#include "../src/bitmap.h"
+#include "x11_bitmap.h"
+#include "../src/theme.h"
+#include "../os_theme.h"
+#include "../src/skin_common.h"
+
+
+//---------------------------------------------------------------------------
+//   X11Bitmap
+//---------------------------------------------------------------------------
+X11Bitmap::X11Bitmap( intf_thread_t *p_intf, string FileName, int AColor )
+    : Bitmap( p_intf, FileName, AColor )
+{
+    // Find the display
+    display = p_intf->p_sys->display;
+    Window root = DefaultRootWindow( display );
+
+    AlphaColor = AColor;
+
+    // Load the bitmap image
+    int hotspotX, hotspotY;
+    int rc = XReadBitmapFile( display, root, FileName.c_str(),
+                              (unsigned int*)&Width, (unsigned int*)&Height, 
+                              &Bmp, &hotspotX, &hotspotY );
+    if( rc != BitmapSuccess )
+    {
+        if( FileName != "" )
+            msg_Warn( p_intf, "Couldn't load bitmap: %s", FileName.c_str() );
+        Width = 0;
+        Height = 0;
+    }
+/*    else
+    {    
+        Width = gdk_pixbuf_get_width( Bmp );
+        Height = gdk_pixbuf_get_height( Bmp );
+
+        if( AColor != 0 )
+        {
+            // Change black pixels to another color to avoid transparency
+            int rowstride = gdk_pixbuf_get_rowstride( Bmp );
+            guchar *pixel = gdk_pixbuf_get_pixels( Bmp ); 
+            int pix_size = ( gdk_pixbuf_get_has_alpha( Bmp ) ? 4 : 3 );
+            
+            for( int y = 0; y < Height; y++ )
+            {
+                for( int x = 0; x < Width; x++ )
+                {   
+                    guint32 r = pixel[0];
+                    guint32 g = pixel[1]<<8;
+                    guint32 b = pixel[2]<<16;
+                    if( r+g+b == 0 )
+                    {
+                        pixel[2] = 10; // slight blue
+                    }
+                    pixel += pix_size;
+                }
+            }
+        }
+
+        Bmp = gdk_pixbuf_add_alpha( Bmp, TRUE, AColor & 0xff, (AColor>>8) & 0xff, 
+                (AColor>>16) & 0xff );
+    }*/
+}
+//---------------------------------------------------------------------------
+X11Bitmap::X11Bitmap( intf_thread_t *p_intf, Graphics *from, int x, int y,
+    int w, int h, int AColor ) : Bitmap( p_intf, from, x, y, w, h, AColor )
+{
+/*    Width  = w;
+    Height = h;
+    AlphaColor = AColor;
+    HBITMAP HBmp;
+    HDC fromDC = ( (X11Graphics *)from )->GetImageHandle();
+
+    // Create image
+    bmpDC = CreateCompatibleDC( fromDC );
+    HBmp  = CreateCompatibleBitmap( fromDC, Width, Height );
+    SelectObject( bmpDC, HBmp );
+    DeleteObject( HBmp );
+    BitBlt( bmpDC, 0, 0, Width, Height, fromDC, x, y, SRCCOPY );*/
+}
+//---------------------------------------------------------------------------
+X11Bitmap::X11Bitmap( intf_thread_t *p_intf, Bitmap *c )
+    : Bitmap( p_intf, c )
+{
+/*    HBITMAP HBuf;
+
+    // Copy attibutes
+    c->GetSize( Width, Height );
+    AlphaColor = c->GetAlphaColor();
+
+    // Copy bmpDC
+    bmpDC = CreateCompatibleDC( NULL );
+    HBuf  = CreateCompatibleBitmap( bmpDC, Width, Height );
+    SelectObject( bmpDC, HBuf );
+
+    BitBlt( bmpDC, 0, 0, Width, Height, ( (X11Bitmap *)c )->GetBmpDC(),
+            0, 0, SRCCOPY );
+    DeleteObject( HBuf );*/
+}
+//---------------------------------------------------------------------------
+X11Bitmap::~X11Bitmap()
+{
+    XFreePixmap( display, Bmp );
+}
+//---------------------------------------------------------------------------
+void X11Bitmap::DrawBitmap( int x, int y, int w, int h, int xRef, int yRef,
+                              Graphics *dest )
+{
+    if( Bmp )
+    {
+/*        GdkDrawable *destImg = ( (X11Graphics *)dest )->GetImage();
+        GdkGC *destGC = ( (X11Graphics *)dest )->GetGC();
+
+        gdk_pixbuf_render_to_drawable( Bmp, destImg, destGC, x, y, xRef, yRef, 
+                w, h, GDK_RGB_DITHER_NORMAL, 0, 0);*/
+    }
+}
+//---------------------------------------------------------------------------
+bool X11Bitmap::Hit( int x, int y)
+{
+//    unsigned int c = (unsigned int)GetBmpPixel( x, y );
+
+/*    if( c == -1 || c == AlphaColor )
+        return false;
+    else
+        return true;*/
+}
+//---------------------------------------------------------------------------
+int X11Bitmap::GetBmpPixel( int x, int y )
+{
+    if( !Bmp || x < 0 || x >= Width || y < 0 || y >= Height )
+        return -1;
+
+/*    guchar *pixels;
+    int rowstride, offset;
+    gboolean has_alpha;
+
+    rowstride = gdk_pixbuf_get_rowstride( Bmp );
+    pixels    = gdk_pixbuf_get_pixels( Bmp ); 
+    has_alpha = gdk_pixbuf_get_has_alpha( Bmp );
+
+    offset = y * rowstride + ( x * (has_alpha ? 4 : 3) );
+
+    int r = pixels [offset];
+    int g = pixels [offset + 1] << 8;
+    int b = pixels [offset + 2] << 16;
+
+    return r + g + b;*/
+}
+//---------------------------------------------------------------------------
+void X11Bitmap::SetBmpPixel( int x, int y, int color )
+{
+//    SetPixelV( bmpDC, x, y, color );
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_bitmap.h b/modules/gui/skins/x11/x11_bitmap.h
new file mode 100644 (file)
index 0000000..f4096b8
--- /dev/null
@@ -0,0 +1,67 @@
+/*****************************************************************************
+ * x11_bitmap.h: X11 implementation of the Bitmap class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_bitmap.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_X11_BITMAP
+#define VLC_X11_BITMAP
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- GENERAL ---------------------------------------------------------------
+#include <string>
+using namespace std;
+
+//---------------------------------------------------------------------------
+struct intf_thread_t;
+class Bitmap;
+class Graphics;
+
+//---------------------------------------------------------------------------
+class X11Bitmap : public Bitmap
+{
+    private:
+        Display *display;
+        Pixmap Bmp;
+
+    public:
+        // Constructors
+        X11Bitmap( intf_thread_t *p_intf, string FileName, int AColor );
+        X11Bitmap( intf_thread_t *p_intf, Graphics *from, int x, int y,
+                     int w, int h, int AColor );
+        X11Bitmap( intf_thread_t *p_intf, Bitmap *c );
+
+        // Destructor
+        virtual ~X11Bitmap();
+
+        virtual void DrawBitmap( int x, int y, int w, int h, int xRef, int yRef,
+                                 Graphics *dest );
+        virtual bool Hit( int x, int y );
+
+        virtual int  GetBmpPixel( int x, int y );
+        virtual void SetBmpPixel( int x, int y, int color );
+};
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_dragdrop.cpp b/modules/gui/skins/x11/x11_dragdrop.cpp
new file mode 100644 (file)
index 0000000..d86761a
--- /dev/null
@@ -0,0 +1,117 @@
+/*****************************************************************************
+ * x11_dragdrop.cpp: X11 implementation of the drag & drop
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_dragdrop.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../src/event.h"
+#include "../os_api.h"
+#include "x11_dragdrop.h"
+
+
+//---------------------------------------------------------------------------
+X11DropObject::X11DropObject( intf_thread_t *_p_intf )
+{
+    p_intf = _p_intf;
+}
+//---------------------------------------------------------------------------
+X11DropObject::~X11DropObject()
+{
+}
+//---------------------------------------------------------------------------
+#if 0
+void X11DropObject::HandleDropStart( GdkDragContext *context )
+{
+/*    GdkAtom atom = gdk_drag_get_selection( context );
+    
+    guchar *buffer;
+    GdkAtom prop_type;
+    gint prop_format;
+    
+    // Get the owner of the selection
+    GdkWindow *owner = gdk_selection_owner_get( atom ); 
+
+    // Find the possible targets for the selection
+    string target = "";
+    gdk_selection_convert( owner, atom, gdk_atom_intern("TARGETS", FALSE), 
+                           OSAPI_GetTime() );
+    int len = gdk_selection_property_get( owner, &buffer, &prop_type, 
+                                          &prop_format );
+    for( int i = 0; i < len / sizeof(GdkAtom); i++ )
+    {
+        GdkAtom atom = ( (GdkAtom*)buffer )[i];
+        gchar *name = gdk_atom_name( atom );
+        if( name )
+        {
+            string curTarget = name;
+            if( (curTarget == "text/plain" || curTarget == "STRING") )
+            {
+                target = curTarget;
+                break;
+            }
+        }
+    }
+
+    if( target == "" )
+    {
+        msg_Warn( p_intf, "Drag&Drop: target not found\n" );
+    }
+    else
+    {
+        gdk_selection_convert( owner, atom, gdk_atom_intern(target.c_str(), 
+                               FALSE), OSAPI_GetTime() );
+        len = gdk_selection_property_get( owner, &buffer, &prop_type, 
+                                          &prop_format);
+        OSAPI_PostMessage( NULL, VLC_DROP, (unsigned int)buffer, 0 );
+    }
+*/
+/*    // Get number of files that are dropped into vlc
+    int NbFiles = DragQueryFile( (HDROP)HDrop, 0xFFFFFFFF, NULL, 0 );
+
+    // For each dropped files
+    for( int i = 0; i < NbFiles; i++ )
+    {
+        // Get the name of the file
+        int NameLength = DragQueryFile( (HDROP)HDrop, i, NULL, 0 ) + 1;
+        char *FileName = new char[NameLength];
+        DragQueryFile( (HDROP)HDrop, i, FileName, NameLength );
+
+        // The pointer must not be deleted here because it will be deleted
+        // in the VLC specific messages processing function
+        PostMessage( NULL, VLC_DROP, (WPARAM)FileName, 0 );
+    }
+
+    DragFinish( (HDROP)HDrop );
+    
+*/
+  //  gdk_drop_finish( context, TRUE,OSAPI_GetTime() );
+}
+#endif
+#endif
diff --git a/modules/gui/skins/x11/x11_dragdrop.h b/modules/gui/skins/x11/x11_dragdrop.h
new file mode 100644 (file)
index 0000000..9ce484b
--- /dev/null
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * x11_dragdrop.h: X11 implementation of the drag & drop
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_dragdrop.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_SKIN_X11_DRAGDROP
+#define VLC_SKIN_X11_DRAGDROP
+
+//--- X11 -----------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//---------------------------------------------------------------------------
+class X11DropObject
+{
+    private:
+        intf_thread_t *p_intf;
+
+    public:
+       X11DropObject( intf_thread_t *_p_intf );
+       virtual ~X11DropObject();
+
+ //      void HandleDropStart( GdkDragContext *context );
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/modules/gui/skins/x11/x11_event.cpp b/modules/gui/skins/x11/x11_event.cpp
new file mode 100644 (file)
index 0000000..1074f87
--- /dev/null
@@ -0,0 +1,138 @@
+/*****************************************************************************
+ * x11_event.cpp: x11 implementation of the Event class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_event.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *          Emmanuel Puig    <karibu@via.ecp.fr>
+ *          Olivier Teulière <ipkiss@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../os_api.h"
+#include "../src/event.h"
+#include "../os_event.h"
+#include "../src/window.h"
+#include "../os_window.h"
+#include "../src/theme.h"
+#include "../os_theme.h"
+#include "../src/skin_common.h"
+
+
+//---------------------------------------------------------------------------
+//   VLC Event
+//---------------------------------------------------------------------------
+X11Event::X11Event( intf_thread_t *p_intf, string Desc, string shortcut )
+    : Event( p_intf, Desc, shortcut )
+{
+    Wnd = NULL;
+}
+//---------------------------------------------------------------------------
+X11Event::X11Event( intf_thread_t *p_intf, Window wnd, unsigned int msg,
+    unsigned int par1, long par2 ) : Event( p_intf, msg, par1, par2 )
+{
+    Wnd = wnd;
+}
+//---------------------------------------------------------------------------
+X11Event::X11Event( intf_thread_t *p_intf, SkinWindow *win, unsigned int msg,
+    unsigned int par1, long par2 ) : Event( p_intf, msg, par1, par2 )
+{
+//    gWnd = ( (X11Window *)win )->GetHandle();
+}
+//---------------------------------------------------------------------------
+X11Event::~X11Event()
+{
+}
+//---------------------------------------------------------------------------
+bool X11Event::SendEvent()
+{
+/*    if( Message != VLC_NOTHING )
+    {
+        // Find window matching with gwnd
+        list<SkinWindow *>::const_iterator win;
+        for( win = p_intf->p_sys->p_theme->WindowList.begin();
+             win != p_intf->p_sys->p_theme->WindowList.end(); win++ )
+        {
+            // If it is the correct window
+            if( gWnd == ( (X11Window *)(*win) )->GetHandle() )
+            {
+                OSAPI_PostMessage( *win, Message, Param1, Param2 );
+                PostSynchroMessage();
+                return true;
+            }
+        }
+        OSAPI_PostMessage( NULL, Message, Param1, Param2 );
+        return true;
+    }
+*/
+    return false;
+}
+//---------------------------------------------------------------------------
+bool X11Event::IsEqual( Event *evt )
+{
+/*    X11Event *GTKEvt = (X11Event *)evt;
+    return( GTKEvt->GetWindow() == gWnd   && GTKEvt->GetMessage() == Message &&
+            GTKEvt->GetParam1() == Param1 && GTKEvt->GetParam2()  == Param2 );*/
+}
+//---------------------------------------------------------------------------
+void X11Event::CreateOSEvent( string para1, string para2, string para3 )
+{
+    // Find Parameters
+/*    switch( Message )
+    {
+        case WINDOW_MOVE:
+            gWnd = GetWindowFromName( para1 );
+            break;
+
+        case WINDOW_CLOSE:
+            gWnd = GetWindowFromName( para1 );
+            break;
+
+        case WINDOW_OPEN:
+            gWnd = GetWindowFromName( para1 );
+            break;
+
+    }*/
+}
+//---------------------------------------------------------------------------
+Window X11Event::GetWindowFromName( string name )
+{
+/*    X11Window *win = (X11Window *)
+        p_intf->p_sys->p_theme->GetWindow( name );
+
+    if( win == NULL )
+    {
+        return NULL;
+    }
+    else
+    {
+        return win->GetHandle();
+    }*/
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_event.h b/modules/gui/skins/x11/x11_event.h
new file mode 100644 (file)
index 0000000..99db60e
--- /dev/null
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ * x11_event.h: X11 implementation of the Event class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_event.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_SKIN_X11_EVENT
+#define VLC_SKIN_X11_EVENT
+
+//--- GENERAL ---------------------------------------------------------------
+#include <string>
+using namespace std;
+
+//--- X11 ------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//---------------------------------------------------------------------------
+struct intf_thread_t;
+class SkinWindow;
+
+//---------------------------------------------------------------------------
+class X11Event : Event
+{
+    private:
+        Window GetWindowFromName( string name );
+        Window Wnd;
+    public:
+        // Constructor
+        X11Event( intf_thread_t *p_intf, string Desc, string shortcut );
+        X11Event( intf_thread_t *p_intf, Window wnd, unsigned int msg,
+                    unsigned int par1, long par2 );
+        X11Event( intf_thread_t *p_intf, SkinWindow *win, unsigned int msg,
+                    unsigned int par1, long par2 );
+
+        // Destructor
+        virtual ~X11Event();
+
+        // Event sending
+        virtual bool SendEvent();
+
+        // General operations on events
+        virtual void CreateOSEvent( string para1, string para2, string para3 );
+        virtual bool IsEqual( Event *evt );
+
+        // Getters
+        Window GetWindow()    { return Wnd; }
+};
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_font.cpp b/modules/gui/skins/x11/x11_font.cpp
new file mode 100644 (file)
index 0000000..0f98df0
--- /dev/null
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ * x11_font.cpp: X11 implementation of the Font class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_font.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *          Emmanuel Puig    <karibu@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -----------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../src/graphics.h"
+#include "../os_graphics.h"
+#include "../src/font.h"
+#include "../os_font.h"
+
+
+
+//---------------------------------------------------------------------------
+// Font object
+//---------------------------------------------------------------------------
+X11Font::X11Font( intf_thread_t *_p_intf, string fontname, int size,
+    int color, int weight, bool italic, bool underline )
+    : SkinFont( _p_intf, fontname, size, color, weight, italic, underline )
+{
+/*    Context = gdk_pango_context_get();
+    Layout = pango_layout_new( Context );
+
+    // Text properties setting
+    FontDesc    = pango_font_description_new();
+
+    pango_font_description_set_family( FontDesc, fontname.c_str() );
+
+    pango_font_description_set_size( FontDesc, size * PANGO_SCALE );
+
+    if( italic )
+    {
+        pango_font_description_set_style( FontDesc, PANGO_STYLE_ITALIC );
+    }
+    else
+    {
+        pango_font_description_set_style( FontDesc, PANGO_STYLE_NORMAL );
+    }
+
+    pango_font_description_set_weight( FontDesc, (PangoWeight)weight );
+
+    //pango_context_set_font_description( Context, FontDesc );
+    pango_layout_set_font_description( Layout, FontDesc );
+
+    // Set attributes
+    PangoAttrList *attrs = pango_attr_list_new();
+    // FIXME: doesn't work 
+    if( underline )
+    {
+        pango_attr_list_insert( attrs, 
+            pango_attr_underline_new( PANGO_UNDERLINE_SINGLE ) );
+    }
+    pango_layout_set_attributes( Layout, attrs );*/
+}
+//---------------------------------------------------------------------------
+X11Font::~X11Font()
+{
+}
+//---------------------------------------------------------------------------
+void X11Font::AssignFont( Graphics *dest )
+{
+}
+//---------------------------------------------------------------------------
+void X11Font::GetSize( string text, int &w, int &h )
+{
+/*    pango_layout_set_text( Layout, text.c_str(), text.length() );
+    pango_layout_get_pixel_size( Layout, &w, &h );*/
+}
+//---------------------------------------------------------------------------
+void X11Font::GenericPrint( Graphics *dest, string text, int x, int y,
+                                 int w, int h, int align, int color )
+{
+/*    // Set text
+    pango_layout_set_text( Layout, text.c_str(), -1 );
+
+    // Set size
+    pango_layout_set_width( Layout, -1 );
+    int real_w, real_h;
+
+    // Create buffer image
+    Graphics* cov = (Graphics *)new OSGraphics( w, h );
+    cov->CopyFrom( 0, 0, w, h, dest, x, y, SRC_COPY );
+
+    // Get handles
+    GdkDrawable *drawable = ( (X11Graphics *)cov )->GetImage();
+    GdkGC *gc = ( (X11Graphics *)cov )->GetGC();
+
+    // Set width of text
+    pango_layout_set_width( Layout, w * PANGO_SCALE );
+
+    // Set attributes
+    pango_layout_set_alignment( Layout, (PangoAlignment)align );
+    
+    // Avoid transârency for black text
+    if( color == 0 ) color = 10;
+    gdk_rgb_gc_set_foreground( gc, color );
+
+    // Render text on buffer
+    gdk_draw_layout( drawable, gc, 0, 0, Layout );
+
+    // Copy buffer on dest graphics
+    dest->CopyFrom( x, y, w, h, cov, 0, 0, SRC_COPY );
+
+    // Free memory
+    delete (OSGraphics *)cov;*/
+}
+
+//---------------------------------------------------------------------------
+void X11Font::Print( Graphics *dest, string text, int x, int y, int w,
+                       int h, int align )
+{
+    GenericPrint( dest, text, x, y, w, h, align, Color );
+}
+//---------------------------------------------------------------------------
+void X11Font::PrintColor( Graphics *dest, string text, int x, int y, int w,
+                            int h, int align, int color )
+{
+    GenericPrint( dest, text, x, y, w, h, align, color );
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_font.h b/modules/gui/skins/x11/x11_font.h
new file mode 100644 (file)
index 0000000..5d4e3ba
--- /dev/null
@@ -0,0 +1,76 @@
+/*****************************************************************************
+ * x11_font.h: X11 implementation of the Font class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_font.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_SKIN_X11_FONT
+#define VLC_SKIN_X11_FONT
+
+//--- GENERAL ---------------------------------------------------------------
+#include <string>
+using namespace std;
+
+//--- X11 -----------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//---------------------------------------------------------------------------
+struct intf_thread_t;
+class Graphics;
+
+//---------------------------------------------------------------------------
+class X11Font : SkinFont
+{
+    private:
+/*        PangoContext  *Context;
+        PangoLayout   *Layout;
+        PangoFontDescription *FontDesc;*/
+
+        // Assign font to Device Context
+        virtual void AssignFont( Graphics *dest );
+
+        // Helper function
+        virtual void GenericPrint( Graphics *dest, string text, int x, int y,
+                                   int w, int h, int align, int color );
+
+    public:
+        // Constructor
+        X11Font( intf_thread_t *_p_intf, string fontname, int size, int color,
+                   int weight, bool italic, bool underline );
+
+        // Destructor
+        virtual ~X11Font();
+
+        // Get size of text
+        virtual void GetSize( string text, int &w, int &h );
+
+        // Draw text with boundaries
+        virtual void Print( Graphics *dest, string text, int x, int y, int w,
+                            int h, int align );
+
+        virtual void PrintColor( Graphics *dest, string text, int x, int y,
+                                 int w, int h, int align, int color );
+
+};
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_graphics.cpp b/modules/gui/skins/x11/x11_graphics.cpp
new file mode 100644 (file)
index 0000000..7611e56
--- /dev/null
@@ -0,0 +1,186 @@
+/*****************************************************************************
+ * x11_graphics.cpp: X11 implementation of the Graphics and Region classes
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_graphics.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *          Emmanuel Puig    <karibu@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -----------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../src/graphics.h"
+#include "../src/window.h"
+#include "../os_window.h"
+#include "x11_graphics.h"
+
+#include <stdio.h>
+#include <math.h>
+
+//---------------------------------------------------------------------------
+// X11 GRAPHICS
+//---------------------------------------------------------------------------
+X11Graphics::X11Graphics( int w, int h, SkinWindow *from ) : Graphics( w, h )
+{
+/*    if( from != NULL )
+    {
+        GdkWindow *fromWnd = ( (X11Window *)from )->GetHandle();
+        Image = (GdkDrawable*) gdk_pixmap_new( fromWnd, w, h, -1 );
+        Gc = gdk_gc_new( ( GdkDrawable* )fromWnd );
+    }
+    else
+    {
+        // FIXME: 8 -> screen depth
+        Image = (GdkDrawable*) gdk_pixmap_new( NULL, w, h, 16 );
+        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 );*/
+}
+//---------------------------------------------------------------------------
+X11Graphics::~X11Graphics()
+{
+/*    g_object_unref( Gc );
+    g_object_unref( Image );*/
+}
+//---------------------------------------------------------------------------
+void X11Graphics::CopyFrom( int dx, int dy, int dw, int dh, Graphics *Src,
+                              int sx, int sy, int Flag )
+{
+/*    gdk_draw_drawable( Image, Gc, (( X11Graphics* )Src )->GetImage(),
+            sx, sy, dx, dy, dw, dh );*/
+}
+//---------------------------------------------------------------------------
+void X11Graphics::DrawRect( int x, int y, int w, int h, int color )
+{
+/*    gdk_rgb_gc_set_foreground( Gc, color );
+    gdk_draw_rectangle( Image, Gc, TRUE, x, y, w, h);*/
+}
+//---------------------------------------------------------------------------
+void X11Graphics::SetClipRegion( SkinRegion *rgn )
+{
+/*    gdk_gc_set_clip_region( Gc, ( (X11Region *)rgn )->GetHandle() );*/
+}
+//---------------------------------------------------------------------------
+void X11Graphics::ResetClipRegion()
+{
+/*    GdkRectangle rect;
+    rect.x = 0;
+    rect.y = 0;
+    rect.width = Width;
+    rect.height = Height;
+    GdkRegion *rgn = gdk_region_rectangle( &rect );
+    gdk_gc_set_clip_region( Gc, rgn );
+    gdk_region_destroy( rgn );*/
+}
+//---------------------------------------------------------------------------
+
+
+
+//---------------------------------------------------------------------------
+// X11 REGION
+//---------------------------------------------------------------------------
+X11Region::X11Region()
+{
+/*    Rgn = gdk_region_new();*/
+}
+//---------------------------------------------------------------------------
+X11Region::X11Region( int x, int y, int w, int h )
+{
+/*    GdkRectangle rect;
+    rect.x = x;
+    rect.y = y;
+    rect.width = w;
+    rect.height = h;
+    Rgn = gdk_region_rectangle( &rect );*/
+}
+//---------------------------------------------------------------------------
+X11Region::~X11Region()
+{
+/*    gdk_region_destroy( Rgn );*/
+}
+//---------------------------------------------------------------------------
+void X11Region::AddPoint( int x, int y )
+{
+    AddRectangle( x, y, 1, 1 );
+}
+//---------------------------------------------------------------------------
+void X11Region::AddRectangle( int x, int y, int w, int h )
+{
+/*    GdkRectangle rect;
+    rect.x = x;
+    rect.y = y;
+    rect.width = w;
+    rect.height = h;
+    GdkRegion *Buffer = gdk_region_rectangle( &rect );
+    gdk_region_union( Rgn, Buffer );*/
+}
+//---------------------------------------------------------------------------
+void X11Region::AddElipse( int x, int y, int w, int h )
+{
+/*    GdkRegion *Buffer;
+    GdkRectangle rect;
+    rect.height = 1;
+
+    double ex, ey;
+    double a = w / 2;
+    double b = h / 2;
+
+    if( !a || !b )
+        return;
+
+    for( ey = 0; ey < h; ey++ )
+    {
+        // Calculate coords
+        ex = a * sqrt( 1 - ey * ey / ( b * b ) );
+
+        // Upper line
+        rect.x     = (gint)( x + a - ex );
+        rect.y     = (gint)( y + b - ey );
+        rect.width = (gint)( 2 * ex );
+        Buffer = gdk_region_rectangle( &rect );
+        gdk_region_union( Rgn, Buffer );
+        gdk_region_destroy( Buffer );
+
+        // Lower line
+        rect.y = (gint)( y + b + ey );
+        Buffer = gdk_region_rectangle( &rect );
+        gdk_region_union( Rgn, Buffer );
+        gdk_region_destroy( Buffer );
+    }*/
+}
+//---------------------------------------------------------------------------
+void X11Region::Move( int x, int y )
+{
+/*    gdk_region_offset( Rgn, x, y );*/
+}
+//---------------------------------------------------------------------------
+bool X11Region::Hit( int x, int y )
+{
+/*    return gdk_region_point_in( Rgn, x, y );*/
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_graphics.h b/modules/gui/skins/x11/x11_graphics.h
new file mode 100644 (file)
index 0000000..69eae80
--- /dev/null
@@ -0,0 +1,90 @@
+/*****************************************************************************
+ * x11_graphics.h: X11 implementation of the Graphics and Region classes
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_graphics.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@via.ecp.fr>
+ *          Olivier Teulière <ipkiss@via.ecp.fr>
+ *          Emmanuel Puig    <karibu@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_SKIN_X11_GRAPHICS
+#define VLC_SKIN_X11_GRAPHICS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+//---------------------------------------------------------------------------
+class SkinRegion;
+class SkinWindow;
+
+//---------------------------------------------------------------------------
+class X11Graphics : public Graphics
+{
+    protected:
+       /* Drawable *Image;
+        GdkGC *Gc;*/
+
+    public:
+        // Constructor
+        X11Graphics( int w, int h, SkinWindow *from = NULL );
+        // Destructor
+        virtual ~X11Graphics();
+        // Drawing methods
+        virtual void CopyFrom( int dx, int dy, int dw, int dh, Graphics *Src,
+                              int sx, int sy, int Flag );
+        //virtual void CopyTo(  Graphics *Dest, int dx, int dy, int dw, int dh,
+        //                      int sx, int sy, int Flag );
+        virtual void DrawRect( int x, int y, int w, int h, int color );
+
+        // Clipping methods
+        virtual void SetClipRegion( SkinRegion *rgn );
+        virtual void ResetClipRegion();
+
+        // Specific X11 methods
+/*        GdkDrawable *GetImage() { return Image; };
+        GdkGC *GetGC()    { return Gc; };*/
+};
+//---------------------------------------------------------------------------
+class X11Region : public SkinRegion
+{
+    private:
+        Region *Rgn;
+    public:
+        // Constructor
+        X11Region();
+        X11Region( int x, int y, int w, int h );
+        // Destructor
+        ~X11Region();
+        // Modify region
+        virtual void AddPoint( int x, int y );
+        virtual void AddRectangle( int x, int y, int w, int h );
+        virtual void AddElipse( int x, int y, int w, int h );
+        virtual void Move( int x, int y );
+
+        virtual bool Hit( int x, int y );
+
+        // Specific X11 methods
+        Region *GetHandle() { return Rgn; };
+};
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_run.cpp b/modules/gui/skins/x11/x11_run.cpp
new file mode 100644 (file)
index 0000000..26760a9
--- /dev/null
@@ -0,0 +1,277 @@
+/*****************************************************************************
+ * x11_run.cpp:
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_run.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- WWWINDOWS -------------------------------------------------------------
+#include <wx/wx.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../os_api.h"
+#include "../src/event.h"
+#include "../os_event.h"
+#include "../src/banks.h"
+#include "../src/window.h"
+#include "../os_window.h"
+#include "../src/theme.h"
+#include "../os_theme.h"
+#include "../src/skin_common.h"
+#include "../src/vlcproc.h"
+#include "../src/wxdialogs.h"
+
+// include the icon graphic
+#include "share/vlc32x32.xpm"
+
+//---------------------------------------------------------------------------
+class CallBackObjects
+{
+    public:
+        VlcProc *Proc;
+};
+
+//---------------------------------------------------------------------------
+// Specific method
+//---------------------------------------------------------------------------
+bool IsVLCEvent( unsigned int msg );
+int  SkinManage( intf_thread_t *p_intf );
+
+
+//---------------------------------------------------------------------------
+// Local classes declarations.
+//---------------------------------------------------------------------------
+class Instance: public wxApp
+{
+public:
+    Instance();
+    Instance( intf_thread_t *_p_intf, CallBackObjects *callback );
+
+    bool OnInit();
+    OpenDialog *open;
+
+private:
+    intf_thread_t *p_intf;
+    CallBackObjects *callbackobj;
+};
+
+
+//---------------------------------------------------------------------------
+// GTK2 interface
+//---------------------------------------------------------------------------
+/*void GTK2Proc( GdkEvent *event, gpointer data )
+{
+    // Get objects from data
+    CallBackObjects *obj = (CallBackObjects *)data;
+    VlcProc *proc        = obj->Proc;
+
+    // Get pointer to thread info
+    intf_thread_t *p_intf = proc->GetpIntf();
+
+    // Variables
+    unsigned int msg;
+    Event *evt;
+    list<SkinWindow *>::const_iterator win;
+    GdkWindow *gwnd = ((GdkEventAny *)event)->window;
+
+    // Create event to dispatch in windows
+    // Skin event
+    if( event->type == GDK_CLIENT_EVENT )
+    {
+        msg = ( (GdkEventClient *)event )->data.l[0];
+        evt = (Event *)new OSEvent( p_intf, 
+            ((GdkEventAny *)event)->window,
+            msg,
+            ( (GdkEventClient *)event )->data.l[1],
+            ( (GdkEventClient *)event )->data.l[2] );
+    }
+    // System event
+    else
+    {
+        msg = event->type;
+        evt = (Event *)new OSEvent( p_intf,
+            ((GdkEventAny *)event)->window, msg, 0, (long)event );
+    }
+
+    // Process keyboard shortcuts
+    if( msg == GDK_KEY_PRESS )
+    {
+        int KeyModifier = 0;
+        // If key is ALT
+        if( ((GdkEventKey *)event)->state & GDK_MOD1_MASK )
+        {
+            KeyModifier = 1;
+        }
+        // If key is CTRL
+        else if( ((GdkEventKey *)event)->state & GDK_CONTROL_MASK )
+        {
+            KeyModifier = 2;
+        }
+        int key = ((GdkEventKey *)event)->keyval;
+        // Translate into lower case
+        if( key >= 'a' && key <= 'z' )
+        {
+            key -= ('a' - 'A');
+        }
+        if( KeyModifier > 0 )
+            p_intf->p_sys->p_theme->EvtBank->TestShortcut( key , KeyModifier );
+    }
+
+    // Send event
+    else if( IsVLCEvent( msg ) )
+    {
+        if( !proc->EventProc( evt ) )
+        {
+            wxExit();
+            return;      // Exit VLC !
+        }
+    }
+    else if( gwnd == NULL )
+    {
+        for( win = p_intf->p_sys->p_theme->WindowList.begin();
+             win != p_intf->p_sys->p_theme->WindowList.end(); win++ )
+        {
+            (*win)->ProcessEvent( evt );
+        }
+    }
+    else
+    {
+        // Find window matching with gwnd
+        for( win = p_intf->p_sys->p_theme->WindowList.begin();
+             win != p_intf->p_sys->p_theme->WindowList.end(); win++ )
+        {
+            // If it is the correct window
+            if( gwnd == ( (GTK2Window *)(*win) )->GetHandle() )
+            {
+                // Send event and check if processed
+                if( (*win)->ProcessEvent( evt ) )
+                {
+                    delete (OSEvent *)evt;
+                    return;
+                }
+                else
+                {
+                    break;
+                }
+            }
+        }
+    }
+
+    evt->DestructParameters();
+    delete (OSEvent *)evt;
+
+    // Check if vlc is closing
+    proc->IsClosing();
+
+    gtk_main_do_event( event )
+}*/
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+// REFRESH TIMER CALLBACK
+//---------------------------------------------------------------------------
+/*gboolean RefreshTimer( gpointer data )
+{
+    intf_thread_t *p_intf = (intf_thread_t *)data;
+    SkinManage( p_intf );
+    return true;
+}*/
+//---------------------------------------------------------------------------
+
+
+//---------------------------------------------------------------------------
+// Implementation of Instance class
+//---------------------------------------------------------------------------
+Instance::Instance( )
+{
+}
+
+Instance::Instance( intf_thread_t *_p_intf, CallBackObjects *callback )
+{
+    // Initialization
+    p_intf = _p_intf;
+    callbackobj = callback;
+}
+
+IMPLEMENT_APP_NO_MAIN(Instance)
+
+bool Instance::OnInit()
+{
+    // Set event callback. Yes, it's a big hack ;)
+//    gdk_event_handler_set( GTK2Proc, (gpointer)callbackobj, NULL );
+
+    p_intf->p_sys->p_icon = new wxIcon( vlc_xpm );
+    p_intf->p_sys->OpenDlg = new OpenDialog( p_intf, NULL, FILE_ACCESS );
+    p_intf->p_sys->MessagesDlg = new Messages( p_intf, NULL );
+    p_intf->p_sys->SoutDlg = new SoutDialog( p_intf, NULL );
+    p_intf->p_sys->PrefsDlg = new PrefsDialog( p_intf, NULL );
+    p_intf->p_sys->InfoDlg = new FileInfo( p_intf, NULL );
+    
+    // Add timer
+//    g_timeout_add( 200, (GSourceFunc)RefreshTimer, (gpointer)p_intf );
+
+    return TRUE;
+}
+
+
+
+//---------------------------------------------------------------------------
+// GTK2 interface
+//---------------------------------------------------------------------------
+void OSRun( intf_thread_t *p_intf )
+{
+    static char  *p_args[] = { "" };
+
+    // Create VLC event object processing
+    CallBackObjects *callbackobj = new CallBackObjects();
+    callbackobj->Proc = new VlcProc( p_intf );
+
+/*    wxTheApp = new Instance( p_intf, callbackobj );
+
+    wxEntry( 1, p_args );*/
+
+    Display *display = ((OSTheme *)p_intf->p_sys->p_theme)->GetDisplay();
+    
+    // Main event loop
+    while( 1 )
+    {
+        XEvent *event;
+        XNextEvent( display, event );
+        fprintf(stderr,"event %d\n", event->type);
+    }
+    
+    delete callbackobj;
+}
+//---------------------------------------------------------------------------
+bool IsVLCEvent( unsigned int msg )
+{
+    return( msg > VLC_MESSAGE && msg < VLC_WINDOW );
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_theme.cpp b/modules/gui/skins/x11/x11_theme.cpp
new file mode 100644 (file)
index 0000000..0ea25cd
--- /dev/null
@@ -0,0 +1,216 @@
+/*****************************************************************************
+ * x11_theme.cpp: X11 implementation of the Theme class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_theme.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../os_api.h"
+#include "../src/banks.h"
+#include "../src/window.h"
+#include "../os_window.h"
+#include "../src/event.h"
+#include "../os_event.h"
+#include "../src/theme.h"
+#include "../os_theme.h"
+#include "../src/vlcproc.h"
+#include "../src/skin_common.h"
+
+
+//---------------------------------------------------------------------------
+void SkinManage( intf_thread_t *p_intf );
+
+
+//---------------------------------------------------------------------------
+// THEME
+//---------------------------------------------------------------------------
+X11Theme::X11Theme( intf_thread_t *_p_intf ) : Theme( _p_intf )
+{
+    //Initialize values
+    ParentWindow = 0;
+    display = p_intf->p_sys->display;
+}
+
+//---------------------------------------------------------------------------
+X11Theme::~X11Theme()
+{/*
+    // Unregister the window class if needed
+    WNDCLASS wndclass;
+    if( GetClassInfo( hinst, "SkinWindow", &wndclass ) )
+    {
+        UnregisterClass( "SkinWindow", hinst );
+    }
+    if( GetClassInfo( hinst, "ParentWindow", &wndclass ) )
+    {
+        UnregisterClass( "ParentWindow", hinst );
+    }
+
+    // Delete tray icon if exists
+    if( ShowInTray )
+    {
+        Shell_NotifyIcon( NIM_DELETE, &TrayIcon );
+    }
+*/
+    // Destroy parent window
+/*    if( ParentWindow )
+    {
+        gdk_window_destroy( ParentWindow );
+    }*/
+}
+//---------------------------------------------------------------------------
+void X11Theme::OnLoadTheme()
+{
+/*    // The create menu
+    CreateSystemMenu();
+*/
+    // Set the parent window attributes
+/*    GdkWindowAttr attr;
+    attr.title = "VLC Media Player";
+    attr.event_mask = GDK_ALL_EVENTS_MASK;
+    attr.x = 0;
+    attr.y = 0;
+    attr.width = 0;
+    attr.height = 0;
+    attr.window_type = GDK_WINDOW_TOPLEVEL;
+    attr.wclass = GDK_INPUT_ONLY;
+    attr.override_redirect = FALSE;
+    
+    gint mask = GDK_WA_TITLE|GDK_WA_X|GDK_WA_Y|GDK_WA_NOREDIR;
+    
+    // Create the parent window
+    ParentWindow = gdk_window_new( NULL, &attr, mask);
+    if( !ParentWindow )
+    {
+        msg_Err( p_intf, "gdk_window_new failed" );
+        return;
+    }*/
+
+/*    Window root = DefaultRootWindow( display );
+    ParentWindow = XCreateSimpleWindow( display, root, 0, 0, 100, 100, 0, 0, 0 );
+    XSelectInput( display, ParentWindow, ExposureMask|
+            KeyPressMask|KeyReleaseMask|ButtonPressMask|PointerMotionMask|
+            PointerMotionHintMask| EnterWindowMask|LeaveWindowMask);
+
+    XMapRaised( display, ParentWindow );
+    XFlush( display );*/
+}
+//---------------------------------------------------------------------------
+void X11Theme::AddSystemMenu( string name, Event *event )
+{/*
+    if( name == "SEPARATOR" )
+    {
+        AppendMenu( SysMenu, MF_SEPARATOR, 0, NULL );
+    }
+    else
+    {
+        AppendMenu( SysMenu, MF_STRING, (unsigned int)event,
+                    (char *)name.c_str() );
+    }*/
+}
+//---------------------------------------------------------------------------
+void X11Theme::ChangeClientWindowName( string name )
+{/*
+    SetWindowText( ParentWindow, name.c_str() );*/
+}
+//---------------------------------------------------------------------------
+void X11Theme::AddWindow( string name, int x, int y, bool visible,
+    int fadetime, int alpha, int movealpha, bool dragdrop )
+{
+/*    GdkWindowAttr attr;
+    attr.title = (gchar *)name.c_str();
+    attr.event_mask = GDK_ALL_EVENTS_MASK;
+    attr.width = 0;
+    attr.height = 0;
+    attr.window_type = GDK_WINDOW_TOPLEVEL;
+    attr.wclass = GDK_INPUT_OUTPUT;
+    attr.override_redirect = FALSE;
+
+    gint mask = GDK_WA_NOREDIR;
+
+    // Create the window
+    GdkWindow *gwnd = gdk_window_new( NULL, &attr, mask );
+    if( !gwnd )
+    {
+        msg_Err( p_intf, "gdk_window_new failed" );
+        return;
+    }
+
+    gdk_window_set_decorations( gwnd, (GdkWMDecoration)0 );
+
+    gdk_window_show( gwnd );*/
+
+    Window root = DefaultRootWindow( display );
+    Window wnd = XCreateSimpleWindow( display, root, 0, 0, 200, 100, 0, 0, 0 );
+    XSelectInput( display, wnd, ExposureMask|
+            KeyPressMask|KeyReleaseMask|ButtonPressMask|PointerMotionMask|
+            PointerMotionHintMask| EnterWindowMask|LeaveWindowMask);
+
+    XMapRaised( display, wnd );
+    XFlush( display );
+
+    WindowList.push_back( (SkinWindow *)new OSWindow( p_intf, wnd, x, y, visible,
+        fadetime, alpha, movealpha, dragdrop, name ) ) ;
+}
+//---------------------------------------------------------------------------
+void X11Theme::ChangeTray()
+{/*
+    if( ShowInTray )
+    {
+        Shell_NotifyIcon( NIM_DELETE, &TrayIcon );
+        ShowInTray = false;
+    }
+    else
+    {
+        Shell_NotifyIcon( NIM_ADD, &TrayIcon );
+        ShowInTray = true;
+    }*/
+}
+//---------------------------------------------------------------------------
+void X11Theme::ChangeTaskbar()
+{/*
+    if( ShowInTaskbar )
+    {
+        ShowWindow( ParentWindow, SW_HIDE );
+        SetWindowLongPtr( ParentWindow, GWL_EXSTYLE,
+                          WS_EX_LAYERED|WS_EX_TOOLWINDOW );
+        ShowWindow( ParentWindow, SW_SHOW );
+        ShowInTaskbar = false;
+    }
+    else
+    {
+        ShowWindow( ParentWindow, SW_HIDE );
+        SetWindowLongPtr( ParentWindow, GWL_EXSTYLE,
+                          WS_EX_LAYERED|WS_EX_APPWINDOW );
+        ShowWindow( ParentWindow, SW_SHOW );
+        ShowInTaskbar = true;
+    }*/
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_theme.h b/modules/gui/skins/x11/x11_theme.h
new file mode 100644 (file)
index 0000000..68e8caa
--- /dev/null
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * x11_theme.h: X11 implementation of the Theme class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_theme.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_SKIN_X11_THEME
+#define VLC_SKIN_X11_THEME
+
+//--- GENERAL ---------------------------------------------------------------
+#include <string>
+using namespace std;
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//---------------------------------------------------------------------------
+struct intf_thread_t;
+class SkinWindow;
+class EventBank;
+class BitmapBank;
+class FontBank;
+
+//---------------------------------------------------------------------------
+class X11Theme : public Theme
+{
+    protected:
+        // Handles
+        Display *display;
+        Window ParentWindow;
+/*
+        // System tray icon
+        NOTIFYICONDATA TrayIcon;
+        HMENU SysMenu;
+*/
+    public:
+        // Constructor
+        X11Theme( intf_thread_t *_p_intf );
+        virtual void OnLoadTheme();
+
+        // Destructor
+        virtual ~X11Theme();
+
+        // Specific methods
+        Display * GetDisplay()   { return display; }
+        Window GetParentWindow() { return ParentWindow; }
+
+        // !!!
+        virtual void AddWindow( string name, int x, int y, bool visible,
+            int fadetime, int alpha, int movealpha, bool dragdrop );
+        virtual void ChangeClientWindowName( string name );
+
+        // Taskbar && system tray
+        virtual void AddSystemMenu( string name, Event *event );
+        virtual void ChangeTray();
+        virtual void ChangeTaskbar();
+//        HMENU GetSysMenu() { return SysMenu; }
+};
+//---------------------------------------------------------------------------
+
+
+#endif
+
diff --git a/modules/gui/skins/x11/x11_window.cpp b/modules/gui/skins/x11/x11_window.cpp
new file mode 100644 (file)
index 0000000..90850a8
--- /dev/null
@@ -0,0 +1,382 @@
+/*****************************************************************************
+ * x11_window.cpp: X11 implementation of the Window class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_window.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+#ifdef X11_SKINS
+
+//--- GENERAL ---------------------------------------------------------------
+//#include <math.h>
+
+//--- VLC -------------------------------------------------------------------
+#include <vlc/intf.h>
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//--- SKIN ------------------------------------------------------------------
+#include "../os_api.h"
+#include "../src/anchor.h"
+#include "../controls/generic.h"
+#include "../src/window.h"
+#include "../os_window.h"
+#include "../src/event.h"
+#include "../os_event.h"
+#include "../src/graphics.h"
+#include "../os_graphics.h"
+#include "../src/skin_common.h"
+#include "../src/theme.h"
+
+
+//---------------------------------------------------------------------------
+// Skinable Window
+//---------------------------------------------------------------------------
+X11Window::X11Window( intf_thread_t *p_intf, Window wnd, int x, int y,
+    bool visible, int transition, int normalalpha, int movealpha,
+    bool dragdrop, string name )
+    : SkinWindow( p_intf, x, y, visible, transition, normalalpha, movealpha,
+              dragdrop )
+{
+    // Set handles
+    Wnd           = wnd;
+//    gc = gdk_gc_new( gwnd );
+
+    Name        = name;
+
+    LButtonDown = false;
+    RButtonDown = false;
+
+    // Removing fading effect
+    Transition  = 0;
+/*
+    // Set position parameters
+    CursorPos    = new POINT;
+    WindowPos    = new POINT;
+
+    // Create Tool Tip Window
+    ToolTipWindow = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
+        WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
+        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+        hWnd, 0, GetModuleHandle( NULL ), 0);
+
+    // Create Tool Tip infos
+    ToolTipInfo.cbSize = sizeof(TOOLINFO);
+    ToolTipInfo.uFlags = TTF_SUBCLASS|TTF_IDISHWND;
+    ToolTipInfo.hwnd = hWnd;
+    ToolTipInfo.hinst = GetModuleHandle( NULL );
+    ToolTipInfo.uId = (unsigned int)hWnd;
+    ToolTipInfo.lpszText = NULL;
+    ToolTipInfo.rect.left = ToolTipInfo.rect.top = 0;
+        ToolTipInfo.rect.right = ToolTipInfo.rect.bottom = 0;
+
+    SendMessage( ToolTipWindow, TTM_ADDTOOL, 0,
+                    (LPARAM)(LPTOOLINFO) &ToolTipInfo );
+*/
+    if( DragDrop )
+    {
+        // register the listview as a drop target
+        DropObject = new X11DropObject( p_intf );
+    //    gdk_window_register_dnd( gwnd );
+    }
+
+    // Create Tool Tip window
+/*    GdkWindowAttr attr;
+    attr.event_mask = GDK_ALL_EVENTS_MASK;
+    attr.width = 100;
+    attr.height = 100;
+    attr.window_type = GDK_WINDOW_CHILD;
+    attr.wclass = GDK_INPUT_OUTPUT;
+    gint mask = 0;
+    ToolTipWindow = gdk_window_new( gwnd, &attr, mask);*/
+
+}
+//---------------------------------------------------------------------------
+X11Window::~X11Window()
+{
+/*    delete CursorPos;
+    delete WindowPos;
+
+    if( hWnd != NULL )
+    {
+        DestroyWindow( hWnd );
+    }
+    if( ToolTipWindow != NULL )
+    {
+        DestroyWindow( ToolTipWindow );
+    }
+    if( DragDrop )
+    {
+        // Remove the listview from the list of drop targets
+        RevokeDragDrop( hWnd );
+        DropTarget->Release();
+        // Uninitialize the OLE library
+        OleUninitialize();
+    }*/
+ /*   if( gWnd )
+    {
+        gdk_window_destroy( gWnd );
+    }*/
+}
+//---------------------------------------------------------------------------
+void X11Window::OSShow( bool show )
+{
+    if( show )
+    {
+/*        gdk_window_show( gWnd );
+        gdk_window_move( gWnd, Left, Top );*/
+    }
+    else
+    {
+/*        gdk_window_hide( gWnd );*/
+    }
+}
+//---------------------------------------------------------------------------
+bool X11Window::ProcessOSEvent( Event *evt )
+{
+    unsigned int msg = evt->GetMessage();
+    unsigned int p1  = evt->GetParam1();
+    int          p2  = evt->GetParam2();
+/*
+    switch( msg )
+    {
+        case GDK_EXPOSE:
+            RefreshFromImage( 0, 0, Width, Height );
+            return true;
+        case GDK_MOTION_NOTIFY:
+            if( LButtonDown )
+                MouseMove( (int)( (GdkEventButton *)p2 )->x,
+                           (int)( (GdkEventButton *)p2 )->y, 1 );
+            else if( RButtonDown )
+                MouseMove( (int)( (GdkEventButton *)p2 )->x,
+                           (int)( (GdkEventButton *)p2 )->y, 2 );
+            else
+                MouseMove( (int)( (GdkEventButton *)p2 )->x,
+                           (int)( (GdkEventButton *)p2 )->y, 0 );
+            gdk_window_get_pointer( gWnd, 0, 0, 0 );
+            return true;
+
+
+        case GDK_BUTTON_PRESS:
+            // Raise all the windows
+            for( list<SkinWindow *>::const_iterator win = 
+                    p_intf->p_sys->p_theme->WindowList.begin();
+                    win != p_intf->p_sys->p_theme->WindowList.end(); win++ )
+            {
+                gdk_window_raise( ( (X11Window *)(*win) )->GetHandle() );
+            }
+          
+            switch( ( (GdkEventButton *)p2 )->button )
+            {
+                case 1:
+                    // Left button
+                    LButtonDown = true;
+                    MouseDown( (int)( (GdkEventButton *)p2 )->x,
+                               (int)( (GdkEventButton *)p2 )->y, 1 );
+                    break;
+
+                case 3:
+                    // Right button
+                    RButtonDown = true;
+                    MouseDown( (int)( (GdkEventButton *)p2 )->x,
+                               (int)( (GdkEventButton *)p2 )->y, 2 );
+                    break;
+
+                default:
+                    break;
+            }
+            return true;
+
+        case GDK_BUTTON_RELEASE:
+            switch( ( (GdkEventButton *)p2 )->button )
+            {
+                case 1:
+                    // Left button
+                    LButtonDown = false;
+                    MouseUp( (int)( (GdkEventButton *)p2 )->x,
+                             (int)( (GdkEventButton *)p2 )->y, 1 );
+                    break;
+
+                case 3:
+                    // Right button
+                    RButtonDown = false;
+                    MouseUp( (int)( (GdkEventButton *)p2 )->x,
+                             (int)( (GdkEventButton *)p2 )->y, 2 );
+                    break;
+
+                default:
+                    break;
+            }
+            return true;
+
+        case GDK_LEAVE_NOTIFY:
+            OSAPI_PostMessage( this, WINDOW_LEAVE, 0, 0 );
+            return true;
+
+        case GDK_2BUTTON_PRESS:
+            MouseDblClick( (int)( (GdkEventButton *)p2 )->x,
+                           (int)( (GdkEventButton *)p2 )->y, 1 );
+            return true;
+
+        case GDK_DROP_START:
+            DropObject->HandleDropStart( ( (GdkEventDND *)p2 )->context );
+            return true;
+
+        case GDK_SCROLL:
+            switch( ( (GdkEventScroll *)p2 )->direction )
+            {
+                case GDK_SCROLL_UP:
+                    MouseScroll( ( (GdkEventScroll *)p2 )->x,
+                                 ( (GdkEventScroll *)p2 )->y,
+                                 MOUSE_SCROLL_UP);
+                    break;
+                case GDK_SCROLL_DOWN:
+                    MouseScroll( ( (GdkEventScroll *)p2 )->x,
+                                 ( (GdkEventScroll *)p2 )->y,
+                                 MOUSE_SCROLL_DOWN);
+                    break;
+            }
+            return true;
+
+        default:
+            return false;
+    }*/
+}
+//---------------------------------------------------------------------------
+void X11Window::SetTransparency( int Value )
+{
+/*    if( Value > -1 )
+        Alpha = Value;
+    SetLayeredWindowAttributes( hWnd, 0, Alpha, LWA_ALPHA | LWA_COLORKEY );
+    UpdateWindow( hWnd );*/
+}
+//---------------------------------------------------------------------------
+void X11Window::RefreshFromImage( int x, int y, int w, int h )
+{
+    // Initialize painting
+/*    HDC DC = GetWindowDC( hWnd );
+
+    // Draw image on window
+    BitBlt( DC, x, y, w, h, ( (X11Graphics *)Image )->GetImageHandle(),
+            x, y, SRCCOPY );
+
+    // Release window device context
+    ReleaseDC( hWnd, DC );
+
+*/ 
+/*    GdkDrawable *drawable = (( X11Graphics* )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 );
+
+    // Mask for transparency
+    GdkRegion *region = gdk_region_new();
+    for( int line = 0; line < Height; line++ )
+    {
+        int start = 0, end = 0;
+        while( start < Width )
+        {
+            while( start < Width && gdk_image_get_pixel( image, start, line ) == 0 )
+            {
+                start++;
+            } 
+            end = start;
+            while( end < Width && 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 );
+            start = end + 1;
+        }
+    }
+    gdk_window_shape_combine_region( gWnd, region, 0, 0 );
+    gdk_region_destroy( region );*/
+}
+//---------------------------------------------------------------------------
+void X11Window::WindowManualMove()
+{
+    // Get mouse cursor position
+    int x, y;
+    OSAPI_GetMousePos( x, y );
+
+    // Move window and chek for magnetism
+    p_intf->p_sys->p_theme->MoveSkinMagnet( this,
+        WindowX + x - CursorX, WindowY + y - CursorY );
+
+}
+//---------------------------------------------------------------------------
+void X11Window::WindowManualMoveInit()
+{
+/*    gdk_window_get_pointer( gdk_get_default_root_window(), &CursorX, &CursorY,
+                            NULL );*/
+    WindowX = Left;
+    WindowY = Top;
+}
+//---------------------------------------------------------------------------
+void X11Window::Move( int left, int top )
+{
+    Left = left;
+    Top  = top;
+/*   gdk_window_move( gWnd, left, top );*/
+}
+//---------------------------------------------------------------------------
+void X11Window::Size( int width, int height )
+{
+    Width  = width;
+    Height = height;
+/*    gdk_window_resize( gWnd, width, height );*/
+}
+//---------------------------------------------------------------------------
+void X11Window::ChangeToolTipText( string text )
+{
+/*    if( text == "none" )
+    {
+        if( ToolTipText != "none" )
+        {
+            ToolTipText = "none";
+            ToolTipInfo.lpszText = NULL;
+            SendMessage( ToolTipWindow, TTM_ACTIVATE, 0 , 0 );
+        }
+    }
+    else
+    {
+        if( text != ToolTipText )
+        {
+            ToolTipText = text;
+            ToolTipInfo.lpszText = (char *)ToolTipText.c_str();
+            SendMessage( ToolTipWindow, TTM_ACTIVATE, 1 , 0 );
+            SendMessage( ToolTipWindow, TTM_UPDATETIPTEXT, 0,
+                             (LPARAM)(LPTOOLINFO)&ToolTipInfo );
+        }
+    }
+*/
+}
+//---------------------------------------------------------------------------
+
+#endif
diff --git a/modules/gui/skins/x11/x11_window.h b/modules/gui/skins/x11/x11_window.h
new file mode 100644 (file)
index 0000000..f2f37b4
--- /dev/null
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ * x11_window.h: X11 implementation of the Window class
+ *****************************************************************************
+ * Copyright (C) 2003 VideoLAN
+ * $Id: x11_window.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ *
+ * Authors: Cyril Deguet     <asmax@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
+ * USA.
+ *****************************************************************************/
+
+
+#ifndef VLC_SKIN_X11_WIN
+#define VLC_SKIN_X11_WIN
+
+//--- X11 -------------------------------------------------------------------
+#include <X11/Xlib.h>
+
+//---------------------------------------------------------------------------
+class Graphics;
+class Event;
+
+//---------------------------------------------------------------------------
+class X11Window : public SkinWindow
+{
+    private:
+        // General parameters
+        Window Wnd;
+//        GdkGC *gc;
+        int CursorX;
+        int CursorY;
+        int WindowX;
+        int WindowY;
+        string Name;
+
+        // Drag&Drop
+        X11DropObject *DropObject;
+
+        // Tooltip texts
+        Window ToolTipWindow;
+//        TOOLINFO ToolTipInfo;
+
+        // Left button down
+        bool LButtonDown;
+        bool RButtonDown;
+
+    public:
+        // Cosntructors
+        X11Window( intf_thread_t *_p_intf, Window wnd, int x, int y,
+            bool visible, int transition, int normalalpha, int movealpha,
+            bool dragdrop, string name );
+
+        // Destructors
+        virtual ~X11Window();
+
+        // Event processing
+        virtual bool ProcessOSEvent( Event *evt );
+
+        // Window graphic aspect
+        virtual void OSShow( bool show );
+        virtual void RefreshFromImage( int x, int y, int w, int h );
+        virtual void SetTransparency( int Value = -1 );
+        virtual void WindowManualMove();
+        virtual void WindowManualMoveInit();
+
+        // Window methods
+        virtual void Move( int left, int top );
+        virtual void Size( int width, int height );
+
+        // Specific gtk2 methods
+        Window GetHandle() { return Wnd; };
+
+        // Tooltip texts
+        virtual void ChangeToolTipText( string text );
+
+        // Getters
+        string GetName() { return Name; }
+};
+//---------------------------------------------------------------------------
+
+#endif