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
|
#ifndef CANVAS_H_HEADER
#define CANVAS_H_HEADER
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(DEBUG_ALLOCS) && defined(DEBUG_TRACE)
#define TRACE_update_canvas_display
#define TRACE_render_astbar
#endif
/* define that if you want all geometry being updated just before setting shape*/
#undef STRICT_GEOMETRY
struct MyStyle ;
struct ASImage;
struct icon_t;
struct button_t;
struct ASImageManager;
struct ASBalloon;
struct ASVector;
struct ASGrid;
typedef struct ASCanvas
{
#define CANVAS_DIRTY (0x01<<0)
#define CANVAS_OUT_OF_SYNC (0x01<<1)
#define CANVAS_MASK_OUT_OF_SYNC (0x01<<2)
#define CANVAS_CONFIG_INVALID (0x01<<3)
#define CANVAS_MAPPED (0x01<<4)
/* these are not really a states but rather flags : */
#define CANVAS_CONTAINER (0x01<<16) /* user drawn - should not maintain our canvas Pixmap,
* also should monitor chnages in user defined shape,
* and update mask pixmap accordingly */
#define CANVAS_FORCE_MASK (0x01<<18) /* forces rendering of the canvas mask even if MyStyle is not shaped */
#define CANVAS_SHAPE_SET (0x01<<19) /* */
#define IsCanvasShaped(pc) get_flags((pc)->state,CANVAS_SHAPE_SET)
ASFlagType state ;
Window w;
int root_x, root_y;
unsigned short width, height ;
unsigned int bw ;
Pixmap saved_canvas ;
struct ASVector *saved_shape ;
/* these two are shortcuts to above values */
Pixmap canvas;
struct ASVector *shape; /* vector of XRectangles */
/* 32 bytes */
}ASCanvas;
/* synonim for backporting of parts of as-devel */
#define ASWidget ASCanvas
#define AS_WIDGET_SCREEN(c) (ASDefaultScr)
#define AS_WIDGET_WINDOW(c) ((c)?(c)->w:None)
#define AS_WIDGET_X(c) ((c)?(int)(c)->root_x:0)
#define AS_WIDGET_Y(c) ((c)?(int)(c)->root_y:0)
#define AS_WIDGET_WIDTH(c) ((c)?(int)(c)->width:0)
#define AS_WIDGET_HEIGHT(c) ((c)?(int)(c)->height:0)
#define AS_WIDGET_BW(c) ((c)?(int)(c)->bw:0)
#define AS_WIDGET_FEEL(c) (&(ASDefaultScr->Feel))
#define AS_WIDGET_LOOK(c) (&(ASDefaultScr->Look))
ASCanvas* create_ascanvas(Window w);
ASCanvas* create_ascanvas_container (Window w);
void destroy_ascanvas( ASCanvas **pcanvas );
#define CANVAS_X_CHANGED (0x01<<0)
#define CANVAS_Y_CHANGED (0x01<<1)
#define CANVAS_MOVED (CANVAS_X_CHANGED|CANVAS_Y_CHANGED)
#define CANVAS_WIDTH_CHANGED (0x01<<2)
#define CANVAS_HEIGHT_CHANGED (0x01<<3)
#define CANVAS_RESIZED (CANVAS_WIDTH_CHANGED|CANVAS_HEIGHT_CHANGED)
ASFlagType handle_canvas_config( ASCanvas *canvas ); /* Returns True if moved/resized */
Bool get_canvas_position( ASCanvas *pc, Window *pparent, int *px, int *py, unsigned int *pbw );
void clear_canvas_shape (ASCanvas * pc, Bool force_for_container);
void invalidate_canvas_config( ASCanvas *canvas );
Bool get_current_canvas_size( ASCanvas * pc, unsigned int *pwidth, unsigned int *pheight );
Bool get_current_canvas_geometry( ASCanvas * pc, int *px, int *py, unsigned int *pwidth, unsigned int *pheight, unsigned int *pbw );
Pixmap get_canvas_canvas( ASCanvas *pc );
Pixmap get_canvas_mask( ASCanvas *pc );
Bool draw_canvas_image( ASCanvas *pc, struct ASImage *im, int x, int y );
void fill_canvas_mask (ASCanvas * pc, int win_x, int win_y, int width, int height);
Bool draw_canvas_mask (ASCanvas * pc, ASImage * im, int x, int y);
#ifdef TRACE_update_canvas_display
void trace_update_canvas_display (ASCanvas * pc, const char *file, int line);
#define update_canvas_display(p) trace_update_canvas_display((p),__FILE__,__LINE__)
#else
void update_canvas_display( ASCanvas *pc );
#endif
void update_canvas_display_mask (ASCanvas * pc, Bool force);
Bool save_canvas( ASCanvas *pc );
Bool swap_save_canvas( ASCanvas *pc );
void invalidate_canvas_save( ASCanvas *pc );
Bool restore_canvas( ASCanvas *pc );
Bool check_canvas_shaped( ASCanvas *pc);
Bool refresh_container_shape( ASCanvas *pc );
Bool combine_canvas_shape (ASCanvas *parent, ASCanvas *child );
Bool combine_canvas_shape_at_geom (ASCanvas *parent, ASCanvas *child, int child_x, int child_y, int child_w, int child_h, int child_bw );
Bool combine_canvas_shape_at (ASCanvas *parent, ASCanvas *child, int child_x, int child_y );
ASFlagType resize_canvas( ASCanvas *pc, unsigned int width, unsigned int height );
void move_canvas (ASCanvas * pc, int x, int y);
ASFlagType moveresize_canvas (ASCanvas * pc, int x, int y, unsigned int width, unsigned int height);
ASFlagType configure_canvas (ASCanvas * pc, int x, int y, unsigned int width, unsigned int height, ASFlagType mask );
void map_canvas_window( ASCanvas *pc, Bool raised );
void unmap_canvas_window( ASCanvas *pc );
void reparent_canvas_window( ASCanvas *pc, Window dst, int x, int y );
void quietly_reparent_canvas( ASCanvas *pc, Window dst, long event_mask, Bool use_root_pos, Window below );
Bool is_canvas_needs_redraw( ASCanvas *pc );
Bool is_canvas_dirty( ASCanvas *pc );
void add_canvas_grid( struct ASGrid *grid, ASCanvas *canvas, int outer_gravity, int inner_gravity, Bool absolute);
void set_root_clip_area( ASCanvas *canvas );
void send_canvas_configure_notify(ASCanvas *parent, ASCanvas *canvas);
#ifdef __cplusplus
}
#endif
#endif
|