1 /*********************************************************************** 2 * 3 * afterstep per-screen data include file 4 * 5 ***********************************************************************/ 6 7 #ifndef MY_LOOK_HEADER_INCLUDED 8 #define MY_LOOK_HEADER_INCLUDED 9 10 #include "../libAfterImage/asvisual.h" 11 #include "../libAfterImage/asimage.h" 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 struct MyStyle; 18 struct ASSupportedHints; 19 struct MyFrame; 20 struct ASHashTable; 21 struct ScreenInfo; 22 23 #define ICON_STYLE_FOCUS "ButtonTitleFocus" 24 #define ICON_STYLE_STICKY "ButtonTitleSticky" 25 #define ICON_STYLE_UNFOCUS "ButtonTitleUnfocus" 26 27 #define DEFAULT_OBJ_NAME "default" 28 #define ICON_OBJ_PREFIX "icon_" 29 #define VERTICAL_OBJ_PREFIX "vert_" 30 #define DEFAULT_ICON_OBJ_NAME ICON_OBJ_PREFIX DEFAULT_OBJ_NAME 31 #define DEFAULT_VERTICAL VERTICAL_OBJ_PREFIX DEFAULT_OBJ_NAME 32 #define DEFAULT_ICON_VERTICAL VERTICAL_OBJ_PREFIX DEFAULT_ICON_OBJ_NAME 33 34 /* look file flags */ 35 typedef enum 36 { 37 TxtrMenuItmInd = (0x01 << 0), 38 MenuMiniPixmaps = (0x01 << 1), 39 GradientText = (0x01 << 2), 40 TitlebarNoPush = (0x01 << 3), 41 IconNoBorder = (0x01 << 4), 42 SeparateButtonTitle = (0x01 << 5), /* icon title is a separate window */ 43 DecorateFrames = (0x01 << 6), 44 DontDrawBackground = (0x01 << 7), 45 IconsGrowVertically = (0x01 << 8), 46 MenuShowUnavailable = (0x01 << 9), 47 /* this flags add up to the above set for no-flag options, so we can track 48 what option was specifyed in config */ 49 LOOK_TitleButtonSpacing = (0x01 << 16), 50 LOOK_TitleButtonStyle = (0x01 << 17), 51 LOOK_TitleButtonXOffset = (0x01 << 18), 52 LOOK_TitleButtonYOffset = (0x01 << 19), 53 LOOK_ResizeMoveGeometry = (0x01 << 20), 54 LOOK_StartMenuSortMode = (0x01 << 21), 55 LOOK_DrawMenuBorders = (0x01 << 22), 56 LOOK_ButtonSize = (0x01 << 23), 57 LOOK_RubberBand = (0x01 << 24), 58 LOOK_ShadeAnimationSteps= (0x01 << 25), 59 LOOK_TitleTextAlign = (0x01 << 26) 60 61 }LookFlags; 62 63 /* this flags can be used to selectively load some parts of Look */ 64 typedef enum 65 { 66 LL_MyStyles = (0x01<<0), 67 LL_MSMenu = (0x01<<1), /* menu MyStyle pointers */ 68 LL_MSWindow = (0x01<<2), /* focussed, unfocussed, sticky window styles */ 69 70 LL_MenuIcons = (0x01<<3), /* Menu icons: pin-on, arrow, close */ 71 72 /* TODO: Titlebuttons - we 'll move them into MyStyles */ 73 /* we will translate button numbers from the user input */ 74 LL_Buttons = (0x01<<4), 75 /* assorted numerical look parameters */ 76 LL_SizeWindow = (0x01<<5), 77 LL_Boundary = (0x01<<6), 78 LL_Layouts = (0x01<<7), 79 LL_MenuParams = (0x01<<8), 80 LL_Icons = (0x01<<9), 81 LL_Misc = (0x01<<10), 82 LL_Flags = (0x01<<11), 83 84 LL_Balloons = (0x01<<12), 85 LL_SupportedHints = (0x01<<13), 86 LL_DeskBacks = (0x01<<14), 87 LL_DeskConfigs = (0x01<<15), 88 LL_IconBoxConfig = (0x01<<16), 89 90 LL_ImageServer = (0x01<<30), 91 /* EVERYTHING !!!!! */ 92 LL_Everything = (0xFFFFFFFF&(~LL_ImageServer)) 93 } 94 LookLoadFlags; 95 96 /**********************************************************************/ 97 /* Desktop configuration : */ 98 /**********************************************************************/ 99 typedef struct MyBackground 100 { 101 unsigned long magic ; 102 char *name ; 103 enum { 104 MB_BackImage = 0, 105 MB_BackMyStyle, 106 MB_BackCmd 107 } type ; 108 char *data ; 109 110 ASGeometry cut; 111 ASGeometry scale; 112 ARGB32 tint; 113 ARGB32 pad_color; 114 ASFlagType align_flags; 115 116 int ref_count ; 117 118 char *loaded_im_name ; 119 Pixmap loaded_pixmap ; 120 }MyBackground; 121 122 typedef struct MyDesktopConfig 123 { 124 unsigned long magic ; 125 int desk ; 126 char *back_name ; 127 char *layout_name ; 128 }MyDesktopConfig; 129 130 #define FR_N_Mask (0x01<<FR_N) 131 #define FR_E_Mask (0x01<<FR_E) 132 #define FR_S_Mask (0x01<<FR_S) 133 #define FR_W_Mask (0x01<<FR_W) 134 #define FR_NE_Mask (0x01<<FR_NE) 135 #define FR_NW_Mask (0x01<<FR_NW) 136 #define FR_SE_Mask (0x01<<FR_SE) 137 #define FR_SW_Mask (0x01<<FR_SW) 138 #define FRAME_PARTS_MASK (FR_N_Mask|FR_E_Mask|FR_S_Mask|FR_W_Mask| \ 139 FR_NE_Mask|FR_NW_Mask|FR_SE_Mask|FR_SW_Mask) 140 141 #define MYFRAME_TITLE_BACK_BTN 0 142 #define MYFRAME_TITLE_BACK_SPACER 1 143 #define MYFRAME_TITLE_BACK_TITLE_SPACER 2 144 #define MYFRAME_TITLE_BACK_INVALID 3 145 #define MYFRAME_TITLE_SIDE_MASK 0x03 /* ORed values of everything above */ 146 #define MYFRAME_TITLE_SIDE_BITS 2 /* number of set bits in above mask */ 147 #define MYFRAME_GetTbarLayoutElem(layout,i) (((layout)>>((i)*MYFRAME_TITLE_SIDE_BITS))&MYFRAME_TITLE_SIDE_MASK) 148 #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)))) 149 150 #define MYFRAME_TITLE_SIDE_ELEMS 3 /* number of set bits in above mask */ 151 152 #define MYFRAME_TITLE_BACK_TITLE_LABEL MYFRAME_TITLE_SIDE_ELEMS 153 154 155 #define MYFRAME_TITLE_BACKS (MYFRAME_TITLE_SIDE_ELEMS+1+MYFRAME_TITLE_SIDE_ELEMS) 156 157 #define MYFRAME_TITLE_BACK_LBTN MYFRAME_TITLE_BACK_BTN 158 #define MYFRAME_TITLE_BACK_LSPACER MYFRAME_TITLE_BACK_SPACER 159 #define MYFRAME_TITLE_BACK_LTITLE_SPACER MYFRAME_TITLE_BACK_TITLE_SPACER 160 #define MYFRAME_TITLE_BACK_LBL MYFRAME_TITLE_BACK_TITLE_LABEL 161 #define MYFRAME_TITLE_BACK_LEFT2RIGHT(l) (MYFRAME_TITLE_BACKS-1-(l)) 162 #define MYFRAME_TITLE_BACK_RTITLE_SPACER MYFRAME_TITLE_BACK_LEFT2RIGHT(MYFRAME_TITLE_BACK_TITLE_SPACER) 163 #define MYFRAME_TITLE_BACK_RSPACER MYFRAME_TITLE_BACK_LEFT2RIGHT(MYFRAME_TITLE_BACK_SPACER) 164 #define MYFRAME_TITLE_BACK_RBTN MYFRAME_TITLE_BACK_LEFT2RIGHT(MYFRAME_TITLE_BACK_BTN) 165 166 #define MYFRAME_DEFAULT_TITLE_LAYOUT 0xFFFFFFFF 167 168 typedef struct MyFrame 169 { 170 unsigned long magic ; 171 char *name; 172 ASFlagType set_parts; 173 ASFlagType parts_mask; /* first 8 bits represent one enabled side/corner each */ 174 struct icon_t *parts[FRAME_PARTS]; 175 char *part_filenames[FRAME_PARTS]; 176 char *title_style_names[BACK_STYLES]; 177 char *frame_style_names[BACK_STYLES]; 178 char *title_back_filenames[MYFRAME_TITLE_BACKS]; 179 struct icon_t *title_backs[MYFRAME_TITLE_BACKS]; 180 ASGeometry title_back_slicing[MYFRAME_TITLE_BACKS]; 181 ASFlagType set_part_size ; 182 unsigned int part_width[FRAME_PARTS]; 183 unsigned int part_length[FRAME_PARTS]; 184 ASFlagType set_part_bevel ; 185 /* this must not be inline functions !!!! */ 186 #define SetPartFBevelMask(frame,mask) ((frame)->set_part_bevel |= (mask)) 187 #define SetPartUBevelMask(frame,mask) ((frame)->set_part_bevel |= ((mask)<<FRAME_PARTS)) 188 #define SetPartSBevelMask(frame,mask) ((frame)->set_part_bevel |= ((mask)<<(FRAME_PARTS+FRAME_PARTS))) 189 190 #define SetPartFBevelSet(frame,part) ((frame)->set_part_bevel |= (0x01<<(part))) 191 #define SetPartUBevelSet(frame,part) ((frame)->set_part_bevel |= ((0x01<<FRAME_PARTS)<<(part))) 192 #define SetPartSBevelSet(frame,part) ((frame)->set_part_bevel |= ((0x01<<(FRAME_PARTS+FRAME_PARTS))<<(part))) 193 194 #define IsPartFBevelSet(frame,part) ((frame)->set_part_bevel&(0x01<<(part))) 195 #define IsPartUBevelSet(frame,part) ((frame)->set_part_bevel&((0x01<<FRAME_PARTS)<<(part))) 196 #define IsPartSBevelSet(frame,part) ((frame)->set_part_bevel&((0x01<<(FRAME_PARTS+FRAME_PARTS))<<(part))) 197 ASFlagType part_fbevel[FRAME_PARTS]; 198 ASFlagType part_ubevel[FRAME_PARTS]; 199 ASFlagType part_sbevel[FRAME_PARTS]; 200 ASFlagType set_part_align ; 201 ASFlagType part_align[FRAME_PARTS]; 202 ASFlagType set_title_attr ; 203 204 ASGeometry part_slicing[FRAME_SIDES]; 205 206 #define MYFRAME_TitleFBevelSet (0x01<<1) 207 #define MYFRAME_TitleUBevelSet (0x01<<2) 208 #define MYFRAME_TitleSBevelSet (0x01<<3) 209 #define MYFRAME_TitleBevelSet (MYFRAME_TitleFBevelSet|MYFRAME_TitleUBevelSet|MYFRAME_TitleSBevelSet) 210 #define MYFRAME_TitleAlignSet (0x01<<4) 211 #define MYFRAME_TitleFCMSet (0x01<<5) 212 #define MYFRAME_TitleUCMSet (0x01<<6) 213 #define MYFRAME_TitleSCMSet (0x01<<7) 214 #define MYFRAME_TitleCMSet (MYFRAME_TitleFCMSet|MYFRAME_TitleUCMSet|MYFRAME_TitleSCMSet) 215 216 #define MYFRAME_TitleBackAlignSet_Start (0x01<<8) 217 #define MYFRAME_TitleBackAlignSet_LBtn (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LBTN) 218 #define MYFRAME_TitleBackAlignSet_LSpacer (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LSPACER) 219 #define MYFRAME_TitleBackAlignSet_LTitleSpacer (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LTITLE_SPACER) 220 #define MYFRAME_TitleBackAlignSet_Lbl (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_LBL) 221 #define MYFRAME_TitleBackAlignSet_RTitleSpacer (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_RTITLE_SPACER) 222 #define MYFRAME_TitleBackAlignSet_RSpacer (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_RSPACER) 223 #define MYFRAME_TitleBackAlignSet_RBtn (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACK_RBTN) 224 #define MYFRAME_TitleBackAlignSet_End (MYFRAME_TitleBackAlignSet_Start<<MYFRAME_TITLE_BACKS) 225 226 #define MYFRAME_CondenseTitlebarSet (0x01<<16) 227 #define MYFRAME_LeftTitlebarLayoutSet (0x01<<17) 228 #define MYFRAME_RightTitlebarLayoutSet (0x01<<18) 229 #define MYFRAME_LeftBtnAlignSet (0x01<<19) 230 #define MYFRAME_RightBtnAlignSet (0x01<<20) 231 232 #define MYFRAME_TitleFHueSet (0x01<<21) 233 #define MYFRAME_TitleUHueSet (0x01<<22) 234 #define MYFRAME_TitleSHueSet (0x01<<23) 235 #define MYFRAME_TitleHueSet (MYFRAME_TitleFHueSet|MYFRAME_TitleUHueSet|MYFRAME_TitleSHueSet) 236 #define MYFRAME_TitleFSatSet (0x01<<24) 237 #define MYFRAME_TitleUSatSet (0x01<<25) 238 #define MYFRAME_TitleSSatSet (0x01<<26) 239 #define MYFRAME_TitleSatSet (MYFRAME_TitleFSatSet|MYFRAME_TitleUSatSet|MYFRAME_TitleSSatSet) 240 241 #define MYFRAME_TitleHSpacingSet (0x01<<27) 242 #define MYFRAME_TitleVSpacingSet (0x01<<28) 243 244 ASFlagType title_fbevel, title_ubevel, title_sbevel; 245 unsigned int title_fcm, title_ucm, title_scm ; 246 int title_fhue, title_uhue, title_shue; 247 unsigned int title_fsat, title_usat, title_ssat; 248 ASFlagType title_align, title_backs_align[MYFRAME_TITLE_BACKS]; 249 ASGeometry title_backs_slicing[MYFRAME_TITLE_BACKS]; 250 ASFlagType left_btn_align, right_btn_align ; 251 252 ASFlagType condense_titlebar ; 253 254 #define MYFRAME_HOR_MASK ((0x01<<FR_N)|(0x01<<FR_S)) 255 #define MYFRAME_VERT_MASK ((0x01<<FR_W)|(0x01<<FR_E)) 256 #define IsSideVertical(side) ((side) == FR_W || (side)== FR_E) 257 #define IsFrameCorner(p) ((p)>=FRAME_SIDES) 258 #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)]))) 259 260 int title_h_spacing, title_v_spacing ; 261 262 unsigned long left_layout, right_layout ; 263 264 #define MYFRAME_NOBORDER (0x01<<0) 265 #define MYFRAME_INHERIT_DEFAULTS (0x01<<1) 266 ASFlagType flags ; 267 ASFlagType set_flags ; 268 269 }MyFrame; 270 271 extern int _as_frame_corner_xref[FRAME_SIDES+1]; 272 #define LeftCorner(side) _as_frame_corner_xref[(side)] 273 #define RightCorner(side) _as_frame_corner_xref[(side)+1] 274 275 276 277 /**********************************************************************/ 278 /* MyLook itself : */ 279 /**********************************************************************/ 280 typedef struct MyLook 281 { 282 unsigned long magic; 283 /* The following two things are mostly used by ASRenderer : */ 284 char *name; /* filename of the look */ 285 int ref_count ; /* number of times referenced */ 286 /* Actuall Look data : */ 287 unsigned long flags; 288 /* the rest of the stuff is related to windows. 289 Window gets values when its first initialized, and then we have 290 to go and update it whenever we move it from one desk to another. 291 */ 292 unsigned short look_id; 293 unsigned short deskback_id_base ; 294 295 /* update mystyle_fix_styles() and InitLook() if you add a style */ 296 struct ASHashTable *styles_list; /* hash of MyStyles by name */ 297 struct ASHashTable *backs_list; /* hash of MyBackgrounds by name */ 298 struct ASHashTable *desk_configs; /* hash of MyDesktopConfig by desk number */ 299 300 unsigned int KillBackgroundThreshold ; /* if WIDTHxHEIGHT of the background image is greater then this value, then 301 * image will be destroyed when there are no windows on the desktop and desktop 302 * is switched */ 303 304 struct MyStyle *MSMenu[MENU_BACK_STYLES]; /* menu MyStyles */ 305 306 /* focussed, unfocussed, sticky window styles */ 307 struct MyStyle *MSWindow[BACK_STYLES]; 308 309 ASGeometry resize_move_geometry; /* position of the size window */ 310 311 char *DefaultIcon; /* Icon to use when no other icons are found */ 312 313 struct icon_t *MenuArrow; 314 315 char *CursorFore, *CursorBack ; 316 317 /* here buttons are mentioned in the same order they are in look and feel file */ 318 MyButton buttons[TITLE_BUTTONS]; 319 /* thes is compiled set of pointers to above buttons : */ 320 unsigned int button_xref[TITLE_BUTTONS]; /* translates button numbering in look and feel into indexes in array */ 321 MyButton *ordered_buttons[TITLE_BUTTONS]; 322 #define DEFAULT_FIRST_RIGHT_BUTTON 5 323 unsigned int button_first_right ; /* index of pointer to the first right button in the above array */ 324 325 326 /* Menu parameters */ 327 #define DRAW_MENU_BORDERS_NONE 0 328 #define DRAW_MENU_BORDERS_ITEM 1 329 #define DRAW_MENU_BORDERS_OVERALL 2 330 #define DRAW_MENU_BORDERS_FOCUSED_ITEM 3 331 #define DRAW_MENU_BORDERS_O_AND_F 4 332 333 int DrawMenuBorders; 334 int StartMenuSortMode; 335 int menu_hcm, menu_icm, menu_scm; /* composition methods */ 336 337 /* Icons parameters */ 338 ASGeometry *configured_icon_areas ; 339 unsigned int configured_icon_areas_num ; 340 unsigned int ButtonWidth, ButtonHeight; 341 unsigned int ButtonIconSpacing; 342 ASFlagType ButtonAlign, ButtonBevel; 343 344 unsigned int minipixmap_width, minipixmap_height ; 345 346 /* misc stuff */ 347 int RubberBand; 348 349 /* these affect window placement : */ 350 /* None of it should be used by placement related functions from this 351 structure - they should consult copies of it stored in ASWindow 352 structure. 353 */ 354 int TitleButtonStyle; /* 0 - afterstep, 1 - WM old, 2 - free hand */ 355 /* array of two elements cos we allow different values for buttons 356 * on the right and on the left :*/ 357 int TitleButtonSpacing[2]; 358 int TitleButtonXOffset[2]; 359 int TitleButtonYOffset[2]; 360 361 /* title bar text alignment */ 362 #define JUSTIFY_CENTER 0 363 #define JUSTIFY_LEFT 1 364 #define JUSTIFY_RIGHT 2 365 int TitleTextAlign; /* alignment of title bar text */ 366 367 struct ASSupportedHints *supported_hints; 368 369 struct ASHashTable *FramesList ;/* hash table of named MyFrames */ 370 char *DefaultFrameName; 371 372 struct ASBalloonLook *balloon_look ; 373 374 ARGB32 desktop_animation_tint ; 375 376 struct ScreenInfo *scr ; /* same as ASDefaultScr if NULL */ 377 378 }MyLook; 379 380 MyFrame *create_myframe(); 381 MyFrame *create_default_myframe(ASFlagType default_title_align); 382 void inherit_myframe( MyFrame *frame, MyFrame *ancestor ); 383 MyFrame *myframe_find( const char *name ); 384 void myframe_load ( MyFrame * frame, struct ASImageManager *imman ); 385 Bool filename2myframe_part (MyFrame *frame, int part, char *filename); 386 Bool myframe_has_parts(const MyFrame *frame, ASFlagType mask); 387 void destroy_myframe( MyFrame **pframe ); 388 void check_myframes_list( MyLook *look ); 389 390 391 char *make_myback_image_name( MyLook *look, char *name ); 392 void check_mybacks_list( MyLook *look ); 393 MyBackground *create_myback( char *name ); 394 MyBackground *add_myback( MyLook *look, MyBackground *back ); 395 void myback_delete( MyBackground **myback, ASImageManager *imman ); 396 397 MyDesktopConfig *create_mydeskconfig( int desk, char *data ); 398 void init_deskconfigs_list( MyLook *look ); 399 void mydeskconfig_delete( MyDesktopConfig **dc ); 400 inline MyDesktopConfig *add_deskconfig_to_list( ASHashTable *list, MyDesktopConfig *dc ); 401 MyDesktopConfig *add_deskconfig( MyLook *look, MyDesktopConfig *dc ); 402 403 ARGB32 get_random_tint_color(); 404 405 406 void mylook_init (MyLook * look, Bool free_resources, unsigned long what_flags /*see LookLoadFlags */ ); 407 MyLook *mylook_create (); 408 void mylook_destroy (MyLook ** look); 409 410 void mylook_set_font_size_var (MyLook * look); 411 412 413 struct MyStyle *mylook_get_style(MyLook *look, const char *name); 414 inline MyBackground *mylook_get_desk_back(MyLook *look, long desk); 415 inline MyBackground *mylook_get_back(MyLook *look, char *name); 416 inline MyDesktopConfig *mylook_get_desk_config(MyLook *look, long desk); 417 418 419 420 /* MyLook : */ 421 void myobj_destroy (ASHashableValue value, void *data); 422 423 #ifdef __cplusplus 424 } 425 #endif 426 427 428 #endif /* MY_LOOK_HEADER_INCLUDED */ 429