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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.