File: mylook.h

package info (click to toggle)
afterstep 2.2.12-18.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,184 kB
  • sloc: ansic: 201,695; sh: 5,894; xml: 3,721; makefile: 2,094; perl: 1,558; cpp: 811
file content (428 lines) | stat: -rw-r--r-- 16,296 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
/***********************************************************************
 *
 * afterstep per-screen data include file
 *
 ***********************************************************************/

#ifndef MY_LOOK_HEADER_INCLUDED
#define MY_LOOK_HEADER_INCLUDED

#include "../libAfterImage/asvisual.h"
#include "../libAfterImage/asimage.h"

#ifdef __cplusplus
extern "C" {
#endif

struct MyStyle;
struct ASSupportedHints;
struct MyFrame;
struct ASHashTable;
struct ScreenInfo;

#define ICON_STYLE_FOCUS   "ButtonTitleFocus"
#define ICON_STYLE_STICKY  "ButtonTitleSticky"
#define ICON_STYLE_UNFOCUS "ButtonTitleUnfocus"

#define DEFAULT_OBJ_NAME        "default"
#define ICON_OBJ_PREFIX 	    "icon_"
#define VERTICAL_OBJ_PREFIX 	"vert_"
#define DEFAULT_ICON_OBJ_NAME   ICON_OBJ_PREFIX DEFAULT_OBJ_NAME
#define DEFAULT_VERTICAL 	    VERTICAL_OBJ_PREFIX DEFAULT_OBJ_NAME
#define DEFAULT_ICON_VERTICAL   VERTICAL_OBJ_PREFIX DEFAULT_ICON_OBJ_NAME

/* look file flags */
typedef enum
{
	TxtrMenuItmInd      = (0x01 << 0),
	MenuMiniPixmaps     = (0x01 << 1),
	GradientText        = (0x01 << 2),
	TitlebarNoPush      = (0x01 << 3),
	IconNoBorder        = (0x01 << 4),
	SeparateButtonTitle = (0x01 << 5),    /* icon title is a separate window */
	DecorateFrames      = (0x01 << 6),
	DontDrawBackground	= (0x01 << 7),
	IconsGrowVertically = (0x01 << 8),
	MenuShowUnavailable = (0x01 << 9),
	/* this flags add up to the above set for no-flag options, so we can track
	 what option was specifyed in config */
	LOOK_TitleButtonSpacing = (0x01 << 16),
	LOOK_TitleButtonStyle   = (0x01 << 17),
	LOOK_TitleButtonXOffset = (0x01 << 18),
	LOOK_TitleButtonYOffset = (0x01 << 19),
	LOOK_ResizeMoveGeometry = (0x01 << 20),
	LOOK_StartMenuSortMode  = (0x01 << 21),
	LOOK_DrawMenuBorders    = (0x01 << 22),
	LOOK_ButtonSize         = (0x01 << 23),
	LOOK_RubberBand         = (0x01 << 24),
	LOOK_ShadeAnimationSteps= (0x01 << 25),
	LOOK_TitleTextAlign     = (0x01 << 26)

}LookFlags;

/* this flags can be used to selectively load some parts of Look */
typedef enum
{
  LL_MyStyles 		= (0x01<<0),
  LL_MSMenu 		= (0x01<<1),	/* menu MyStyle pointers */
  LL_MSWindow 		= (0x01<<2),	/* focussed, unfocussed, sticky window styles */

  LL_MenuIcons 		= (0x01<<3),	/* Menu icons: pin-on, arrow, close */

  /* TODO: Titlebuttons - we 'll move them into  MyStyles */
  /* we will translate button numbers from the user input */
  LL_Buttons 		= (0x01<<4),
  /* assorted numerical look parameters */
  LL_SizeWindow 	= (0x01<<5),
  LL_Boundary 		= (0x01<<6),
  LL_Layouts     	= (0x01<<7),
  LL_MenuParams 	= (0x01<<8),
  LL_Icons 			= (0x01<<9),
  LL_Misc 			= (0x01<<10),
  LL_Flags 			= (0x01<<11),

  LL_Balloons 		= (0x01<<12),
  LL_SupportedHints = (0x01<<13),
  LL_DeskBacks  	= (0x01<<14),
  LL_DeskConfigs	= (0x01<<15),
  LL_IconBoxConfig  = (0x01<<16),

  LL_ImageServer    = (0x01<<30),
  /* EVERYTHING !!!!! */
  LL_Everything 	= (0xFFFFFFFF&(~LL_ImageServer))
}
LookLoadFlags;

/**********************************************************************/
/* Desktop configuration : */
/**********************************************************************/
typedef struct MyBackground
{
	unsigned long magic ;
	char 	  *name ;
	enum {
		MB_BackImage = 0,
		MB_BackMyStyle,
		MB_BackCmd
	} type ;
	char      *data ;

	ASGeometry cut;
	ASGeometry scale;
	ARGB32     tint;
	ARGB32     pad_color;
	ASFlagType align_flags;

	int        ref_count ;
	
	char *loaded_im_name ;
	Pixmap loaded_pixmap ;
}MyBackground;

typedef struct MyDesktopConfig
{
	unsigned long magic ;
	int   desk ;
	char *back_name ;
	char *layout_name ;
}MyDesktopConfig;

#define FR_N_Mask           (0x01<<FR_N)
#define FR_E_Mask           (0x01<<FR_E)
#define FR_S_Mask           (0x01<<FR_S)
#define FR_W_Mask           (0x01<<FR_W)
#define FR_NE_Mask          (0x01<<FR_NE)
#define FR_NW_Mask          (0x01<<FR_NW)
#define FR_SE_Mask          (0x01<<FR_SE)
#define FR_SW_Mask          (0x01<<FR_SW)
#define FRAME_PARTS_MASK    (FR_N_Mask|FR_E_Mask|FR_S_Mask|FR_W_Mask| \
							 FR_NE_Mask|FR_NW_Mask|FR_SE_Mask|FR_SW_Mask)

#define MYFRAME_TITLE_BACK_BTN				0
#define MYFRAME_TITLE_BACK_SPACER			1
#define MYFRAME_TITLE_BACK_TITLE_SPACER		2
#define MYFRAME_TITLE_BACK_INVALID			3
#define MYFRAME_TITLE_SIDE_MASK				0x03  /* ORed values of everything above */  
#define MYFRAME_TITLE_SIDE_BITS				2     /* number of set bits in above mask */		
#define MYFRAME_GetTbarLayoutElem(layout,i)    (((layout)>>((i)*MYFRAME_TITLE_SIDE_BITS))&MYFRAME_TITLE_SIDE_MASK)
#define MYFRAME_SetTbarLayoutElem(layout,i,elem)    (layout = (((layout)&(~(MYFRAME_TITLE_SIDE_MASK<<((i)*MYFRAME_TITLE_SIDE_BITS))))|(((elem)&MYFRAME_TITLE_SIDE_MASK)<<((i)*MYFRAME_TITLE_SIDE_BITS))))

#define MYFRAME_TITLE_SIDE_ELEMS			3     /* number of set bits in above mask */		   
			   
#define MYFRAME_TITLE_BACK_TITLE_LABEL		MYFRAME_TITLE_SIDE_ELEMS


#define MYFRAME_TITLE_BACKS					(MYFRAME_TITLE_SIDE_ELEMS+1+MYFRAME_TITLE_SIDE_ELEMS)

#define MYFRAME_TITLE_BACK_LBTN				MYFRAME_TITLE_BACK_BTN
#define MYFRAME_TITLE_BACK_LSPACER			MYFRAME_TITLE_BACK_SPACER
#define MYFRAME_TITLE_BACK_LTITLE_SPACER	MYFRAME_TITLE_BACK_TITLE_SPACER
#define MYFRAME_TITLE_BACK_LBL				MYFRAME_TITLE_BACK_TITLE_LABEL
#define MYFRAME_TITLE_BACK_LEFT2RIGHT(l) 	(MYFRAME_TITLE_BACKS-1-(l))
#define MYFRAME_TITLE_BACK_RTITLE_SPACER	MYFRAME_TITLE_BACK_LEFT2RIGHT(MYFRAME_TITLE_BACK_TITLE_SPACER)
#define MYFRAME_TITLE_BACK_RSPACER			MYFRAME_TITLE_BACK_LEFT2RIGHT(MYFRAME_TITLE_BACK_SPACER)
#define MYFRAME_TITLE_BACK_RBTN				MYFRAME_TITLE_BACK_LEFT2RIGHT(MYFRAME_TITLE_BACK_BTN)

#define MYFRAME_DEFAULT_TITLE_LAYOUT		0xFFFFFFFF

typedef struct MyFrame
{
	unsigned long magic ;
	char      *name;
	ASFlagType   set_parts;
	ASFlagType   parts_mask; /* first 8 bits represent one enabled side/corner each */
	struct icon_t    *parts[FRAME_PARTS];
	char             *part_filenames[FRAME_PARTS];
	char             *title_style_names[BACK_STYLES];
	char             *frame_style_names[BACK_STYLES];
	char             *title_back_filenames[MYFRAME_TITLE_BACKS];
	struct icon_t    *title_backs[MYFRAME_TITLE_BACKS];
	ASGeometry        title_back_slicing[MYFRAME_TITLE_BACKS];
	ASFlagType   set_part_size ;
	unsigned int part_width[FRAME_PARTS];
	unsigned int part_length[FRAME_PARTS];
	ASFlagType   set_part_bevel ;
/* this must not be inline functions !!!! */
#define SetPartFBevelMask(frame,mask)  ((frame)->set_part_bevel |= (mask))
#define SetPartUBevelMask(frame,mask)  ((frame)->set_part_bevel |= ((mask)<<FRAME_PARTS))
#define SetPartSBevelMask(frame,mask)  ((frame)->set_part_bevel |= ((mask)<<(FRAME_PARTS+FRAME_PARTS)))

#define SetPartFBevelSet(frame,part)  ((frame)->set_part_bevel |= (0x01<<(part)))
#define SetPartUBevelSet(frame,part)  ((frame)->set_part_bevel |= ((0x01<<FRAME_PARTS)<<(part)))
#define SetPartSBevelSet(frame,part)  ((frame)->set_part_bevel |= ((0x01<<(FRAME_PARTS+FRAME_PARTS))<<(part)))

#define IsPartFBevelSet(frame,part)  ((frame)->set_part_bevel&(0x01<<(part)))
#define IsPartUBevelSet(frame,part)  ((frame)->set_part_bevel&((0x01<<FRAME_PARTS)<<(part)))
#define IsPartSBevelSet(frame,part)  ((frame)->set_part_bevel&((0x01<<(FRAME_PARTS+FRAME_PARTS))<<(part)))
	ASFlagType   part_fbevel[FRAME_PARTS];
	ASFlagType   part_ubevel[FRAME_PARTS];
	ASFlagType   part_sbevel[FRAME_PARTS];
	ASFlagType   set_part_align ;
	ASFlagType   part_align[FRAME_PARTS];
	ASFlagType   set_title_attr ;
	
	ASGeometry   part_slicing[FRAME_SIDES];
	
#define MYFRAME_TitleFBevelSet      (0x01<<1)
#define MYFRAME_TitleUBevelSet      (0x01<<2)
#define MYFRAME_TitleSBevelSet      (0x01<<3)
#define MYFRAME_TitleBevelSet       (MYFRAME_TitleFBevelSet|MYFRAME_TitleUBevelSet|MYFRAME_TitleSBevelSet)
#define MYFRAME_TitleAlignSet       (0x01<<4)
#define MYFRAME_TitleFCMSet         (0x01<<5)
#define MYFRAME_TitleUCMSet         (0x01<<6)
#define MYFRAME_TitleSCMSet         (0x01<<7)
#define MYFRAME_TitleCMSet          (MYFRAME_TitleFCMSet|MYFRAME_TitleUCMSet|MYFRAME_TitleSCMSet)

#define MYFRAME_TitleBackAlignSet_Start     		(0x01<<8)
#define MYFRAME_TitleBackAlignSet_LBtn  			(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LBTN)
#define MYFRAME_TitleBackAlignSet_LSpacer 		 	(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LSPACER)
#define MYFRAME_TitleBackAlignSet_LTitleSpacer  	(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LTITLE_SPACER)
#define MYFRAME_TitleBackAlignSet_Lbl  				(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LBL)
#define MYFRAME_TitleBackAlignSet_RTitleSpacer     	(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_RTITLE_SPACER)
#define MYFRAME_TitleBackAlignSet_RSpacer  			(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_RSPACER)
#define MYFRAME_TitleBackAlignSet_RBtn  			(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_RBTN)
#define MYFRAME_TitleBackAlignSet_End       		(MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACKS)

#define MYFRAME_CondenseTitlebarSet   	(0x01<<16)
#define MYFRAME_LeftTitlebarLayoutSet   (0x01<<17)
#define MYFRAME_RightTitlebarLayoutSet  (0x01<<18)
#define MYFRAME_LeftBtnAlignSet   		(0x01<<19)
#define MYFRAME_RightBtnAlignSet  		(0x01<<20)

#define MYFRAME_TitleFHueSet         (0x01<<21)
#define MYFRAME_TitleUHueSet         (0x01<<22)
#define MYFRAME_TitleSHueSet         (0x01<<23)
#define MYFRAME_TitleHueSet          (MYFRAME_TitleFHueSet|MYFRAME_TitleUHueSet|MYFRAME_TitleSHueSet)
#define MYFRAME_TitleFSatSet         (0x01<<24)
#define MYFRAME_TitleUSatSet         (0x01<<25)
#define MYFRAME_TitleSSatSet         (0x01<<26)
#define MYFRAME_TitleSatSet          (MYFRAME_TitleFSatSet|MYFRAME_TitleUSatSet|MYFRAME_TitleSSatSet)

#define MYFRAME_TitleHSpacingSet     (0x01<<27)
#define MYFRAME_TitleVSpacingSet     (0x01<<28)

	ASFlagType   title_fbevel, title_ubevel, title_sbevel;
	unsigned int title_fcm, title_ucm, title_scm ;
	int 		 title_fhue, title_uhue, title_shue; 
	unsigned int title_fsat, title_usat, title_ssat;
	ASFlagType   title_align, title_backs_align[MYFRAME_TITLE_BACKS];
	ASGeometry   title_backs_slicing[MYFRAME_TITLE_BACKS];
	ASFlagType   left_btn_align, right_btn_align ;

	ASFlagType   condense_titlebar ;

#define MYFRAME_HOR_MASK    ((0x01<<FR_N)|(0x01<<FR_S))
#define MYFRAME_VERT_MASK   ((0x01<<FR_W)|(0x01<<FR_E))
#define IsSideVertical(side)  ((side) == FR_W || (side)== FR_E)
#define IsFrameCorner(p)   ((p)>=FRAME_SIDES)
#define IsFramePart(f,p)   (get_flags((f)->parts_mask,0x01<<(p))&&((f)->parts[(p)] || (((f)->part_width[(p)] || p >= FRAME_SIDES) && (f)->part_length[(p)])))

	int title_h_spacing, title_v_spacing ;

	unsigned long left_layout, right_layout ;

#define MYFRAME_NOBORDER			(0x01<<0)
#define MYFRAME_INHERIT_DEFAULTS	(0x01<<1)
	ASFlagType flags ;
	ASFlagType set_flags ;

}MyFrame;

extern int    _as_frame_corner_xref[FRAME_SIDES+1];
#define LeftCorner(side)    _as_frame_corner_xref[(side)]
#define RightCorner(side)   _as_frame_corner_xref[(side)+1]



/**********************************************************************/
/* MyLook itself : */
/**********************************************************************/
typedef struct MyLook
{
	unsigned long magic;
	/* The following two things are mostly used by ASRenderer : */
	char         *name;         /* filename of the look */
	int           ref_count ;   /* number of times referenced */
	/* Actuall Look data : */
	unsigned long flags;
	/* the rest of the stuff is related to windows.
		Window gets values when its first initialized, and then we have
		to go and update it whenever we move it from one desk to another.
	*/
	unsigned short look_id;
	unsigned short deskback_id_base ;

	/* update mystyle_fix_styles() and InitLook() if you add a style */
	struct ASHashTable *styles_list;  /* hash of MyStyles by name */
	struct ASHashTable *backs_list;   /* hash of MyBackgrounds   by name */
	struct ASHashTable *desk_configs; /* hash of MyDesktopConfig by desk number */

	unsigned int    KillBackgroundThreshold ; /* if WIDTHxHEIGHT of the background image is greater then this value, then
											   * image will be destroyed when there are no windows on the desktop and desktop
											   * is switched */

	struct MyStyle *MSMenu[MENU_BACK_STYLES]; /* menu MyStyles */

	/* focussed, unfocussed, sticky window styles */
	struct MyStyle *MSWindow[BACK_STYLES];

	ASGeometry resize_move_geometry;  /* position of the size window */

	char *DefaultIcon;      /* Icon to use when no other icons are found */

	struct icon_t *MenuArrow;

	char *CursorFore, *CursorBack ;

	/* here buttons are mentioned in the same order they are in look and feel file */
	MyButton     buttons[TITLE_BUTTONS];
	/* thes is compiled set of pointers to above buttons : */
	unsigned int button_xref[TITLE_BUTTONS];   /* translates button numbering in look and feel into indexes in array */
	MyButton    *ordered_buttons[TITLE_BUTTONS];
#define DEFAULT_FIRST_RIGHT_BUTTON  5
	unsigned int button_first_right ;          /* index of pointer to the first right button in the above array */


	/* Menu parameters */
#define DRAW_MENU_BORDERS_NONE          0
#define DRAW_MENU_BORDERS_ITEM          1
#define DRAW_MENU_BORDERS_OVERALL       2
#define DRAW_MENU_BORDERS_FOCUSED_ITEM  3
#define DRAW_MENU_BORDERS_O_AND_F       4

	int DrawMenuBorders;
	int StartMenuSortMode;
	int menu_hcm, menu_icm, menu_scm;                    /* composition methods */

	/* Icons parameters */
	ASGeometry *configured_icon_areas ;
	unsigned int configured_icon_areas_num ;
	unsigned int ButtonWidth, ButtonHeight;
	unsigned int ButtonIconSpacing;
	ASFlagType   ButtonAlign, ButtonBevel;

	unsigned int minipixmap_width, minipixmap_height ;

	/* misc stuff */
	int RubberBand;

	/* these affect window placement : */
	/* None of it should be used by placement related functions from this
		structure - they should consult copies of it stored in ASWindow
		structure.
	*/
	int TitleButtonStyle;     /* 0 - afterstep, 1 - WM old, 2 - free hand */
	/* array of two elements cos we allow different values for buttons
	 * on the right and on the left :*/
	int TitleButtonSpacing[2];
	int TitleButtonXOffset[2];
	int TitleButtonYOffset[2];

/* title bar text alignment  */
#define JUSTIFY_CENTER 0
#define JUSTIFY_LEFT   1
#define JUSTIFY_RIGHT  2
	int TitleTextAlign;       /* alignment of title bar text */

	struct ASSupportedHints *supported_hints;

	struct ASHashTable *FramesList ;/* hash table of named MyFrames */
	char *DefaultFrameName;

	struct ASBalloonLook *balloon_look ;

	ARGB32	desktop_animation_tint ;

	struct ScreenInfo *scr ;          /* same as ASDefaultScr if NULL */

}MyLook;

MyFrame *create_myframe();
MyFrame *create_default_myframe(ASFlagType default_title_align);
void inherit_myframe( MyFrame *frame, MyFrame *ancestor );
MyFrame *myframe_find( const char *name );
void myframe_load ( MyFrame * frame, struct ASImageManager *imman );
Bool filename2myframe_part (MyFrame *frame, int part, char *filename);
Bool myframe_has_parts(const MyFrame *frame, ASFlagType mask);
void destroy_myframe( MyFrame **pframe );
void check_myframes_list( MyLook *look );


char *make_myback_image_name( MyLook *look, char *name );
void check_mybacks_list( MyLook *look );
MyBackground *create_myback( char *name );
MyBackground *add_myback( MyLook *look, MyBackground *back );
void myback_delete( MyBackground **myback, ASImageManager *imman );

MyDesktopConfig *create_mydeskconfig( int desk, char *data );
void init_deskconfigs_list( MyLook *look );
void mydeskconfig_delete( MyDesktopConfig **dc );
MyDesktopConfig *add_deskconfig_to_list( ASHashTable *list, MyDesktopConfig *dc );
MyDesktopConfig *add_deskconfig( MyLook *look, MyDesktopConfig *dc );

ARGB32 get_random_tint_color();


void mylook_init (MyLook * look, Bool free_resources, unsigned long what_flags /*see LookLoadFlags */ );
MyLook *mylook_create ();
void mylook_destroy (MyLook ** look);

void mylook_set_font_size_var (MyLook * look);


struct MyStyle *mylook_get_style(MyLook *look, const char *name);
MyBackground  *mylook_get_desk_back(MyLook *look, long desk);
MyBackground  *mylook_get_back(MyLook *look, char *name);
MyDesktopConfig *mylook_get_desk_config(MyLook *look, long desk);



/* MyLook : */
void myobj_destroy (ASHashableValue value, void *data);

#ifdef __cplusplus
}
#endif


#endif /* MY_LOOK_HEADER_INCLUDED */