Re: gui - skin engine
"Sascha Sommer" <[email protected]>
| Newsgroups | gmane.comp.video.mplayer.g2.devel |
|---|---|
| Message-ID | <007a01c33baf$1852c8e0$656354d9@oemcomputer> |
> Hi, > > Just checked the skin cvs of gmplayer, and there are a lot of nice skins. agree ;) > It makes me wonder if we will support g1 skins in g2, or the g2 gui will > have a new skin format? I think it would be better to extend the existing one, if there are things to extend at all. Another skin format will only bring incompatiblity, without having real advantages. > If we keep g1 format (maybe extend) then there should be a common, > multiplatform skin loader/renderer library. If it's well written, then > it's split to platform-independent and dependent parts. > Ie there could be skin renderer/interface modules for Xlib, gtk, qt, win32 > etc. Afaik Faust already proted teh g1 skin loader to win32, dunno how much > it differs from the linux code. > My skinloader is currently only one file and not all info is loaded (fonts etc.). The main difference is that the G1 skinloader stores the images in png format, while I am converting them to desktop pixelformat to speedup rendering later. I also do not load already existing images twice. Attached is the header for reference. Maybe you can find some usefull design ideas there. What are your ideas for the next layer? Make it already platform dependant or implement some window manager like abstraction layer? If we design it well even gui rendering inside the video window (think of fbdev and vesa) should be no big deal. Sascha _______________________________________________ MPlayer-G2-dev mailing list [email protected] http://mplayerhq.hu/mailman/listinfo/mplayer-g2-dev
skinload.h
(application/octet-stream, 5 KB)
#ifndef _SKINLOAD_H
#define _SKINLOAD_H
typedef struct {
char* name; /*image name*/
int size; /*image data size in bytes*/
unsigned int width; /*image width*/
unsigned int height; /*image height*/
char* data; /*pointer to image data*/
} image;
typedef struct {
int id; /*widget id*/
int type; /*widget type*/
int window; /*the window it belongs to*/
// ---
int x,y; /*x and y position the button*/
int wx,wy; /* x and y postion of the widget*/
int width,height; /* width and height of the button*/
int wwidth,wheight; /* width and height of the widget*/
// ---
// ---
int msg,msg2;
int pressed,tmp;
int key,key2;
int phases;
float value;
image* bitmap[2]; /*Associated image(s) in imagepool*/
// ---
int fontid;
int align;
char * label;
// ---
int event;
} widget;
typedef struct {
char* name;
int decoration;
int type;
widget* base;
int backgroundcolor[3];
void* priv;
} window;
typedef struct skin_t skin_t;
struct skin_t{
char* name; /*skin name*/
char* skindir;
int widgetcount; /*number of widgets*/
int lastusedid; /*which widget id was used last*/
widget** widgets; /*widget handle*/
int imagecount; /*number of images*/
int desktopbpp; /*image format of those images*/
image** images; /*image handle*/
int windowcount; /*number of windows*/
window** windows;
int verbose; /*verbosity for loading this skin*/
void (*freeskin)(skin_t*skin);
void (*addwidget)(skin_t* skin,window *win,const char*desc);
void (*removewidget)(skin_t*skin,int id);
char* (*geteventname)(int event);
image* (*pngRead)( skin_t* skin, unsigned char * fname);
};
extern skin_t* loadskin(char*skindir,char* name,int desktopbpp,int verbosity);
// --- Widget types ---
#define tyBase 1
#define tyButton 2
#define tyHpotmeter 3
#define tyVpotmeter 4
#define tyPotmeter 5
#define tyMenu 6
// --- Window types ---
#define wiMain 1
#define wiSub 2
#define wiMenu 3
#define wiPlaybar 4
// --- User events ------
#define evNone 0
#define evPlay 1
#define evStop 2
#define evPause 3
#define evPrev 6
#define evNext 7
#define evLoad 8
#define evEqualizer 9
#define evPlayList 10
#define evIconify 11
#define evAbout 12
#define evLoadPlay 13
#define evPreferences 14
#define evSkinBrowser 15
#define evPlaySwitchToPause 16
#define evPauseSwitchToPlay 17
#define evBackward10sec 18
#define evForward10sec 19
#define evBackward1min 20
#define evForward1min 21
#define evBackward10min 22
#define evForward10min 23
#define evNormalSize 24
#define evDoubleSize 25
#define evFullScreen 26
#define evSetMoviePosition 27
#define evSetVolume 28
#define evSetBalance 29
#define evMute 30
#define evIncVolume 31
#define evDecVolume 32
#define evIncAudioBufDelay 33
#define evDecAudioBufDelay 34
#define evIncBalance 35
#define evDecBalance 36
#define evHelp 37
#define evLoadSubtitle 38
#define evDropSubtitle 43
#define evPlayDVD 39
#define evPlayVCD 40
#define evPlayNetwork 41
#define evLoadAudioFile 42
#define evSetAspect 44
#define evSetAudio 45
#define evSetVideo 46
#define evDropFile 47
#define evExit 1000
// --- General events ---
#define evFileLoaded 5000
#define evHideMouseCursor 5001
#define evMessageBox 5002
#define evGeneralTimer 5003
#define evGtkIsOk 5004
#define evShowPopUpMenu 5005
#define evHidePopUpMenu 5006
#define evSetDVDAudio 5007
#define evSetDVDSubtitle 5008
#define evSetDVDTitle 5009
#define evSetDVDChapter 5010
#define evSubtitleLoaded 5011
#define evSetVCDTrack 5012
#define evSetURL 5013
#define evFName 7000
#define evMovieTime 7001
#define evRedraw 7002
#define evHideWindow 7003
#define evShowWindow 7004
#define evFirstLoad 7005
#endif