Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Steve Lhomme
VLC
Commits
2396f46b
Commit
2396f46b
authored
Apr 28, 2003
by
Cyril Deguet
Browse files
* skeleton of X11 skins
parent
a796b89d
Changes
16
Hide whitespace changes
Inline
Side-by-side
modules/gui/skins/x11/x11_api.cpp
0 → 100644
View file @
2396f46b
/*****************************************************************************
* 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
modules/gui/skins/x11/x11_bitmap.cpp
0 → 100644
View file @
2396f46b
/*****************************************************************************
* 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
modules/gui/skins/x11/x11_bitmap.h
0 → 100644
View file @
2396f46b
/*****************************************************************************
* 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
modules/gui/skins/x11/x11_dragdrop.cpp
0 → 100644
View file @
2396f46b
/*****************************************************************************
* 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
modules/gui/skins/x11/x11_dragdrop.h
0 → 100644
View file @
2396f46b
/*****************************************************************************
* 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
modules/gui/skins/x11/x11_event.cpp
0 → 100644
View file @
2396f46b
/*****************************************************************************
* 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 Teulire <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>