/**** * * Copyright (c) 1988 by Sun Microsystems, Inc. * @(#)sh_RAS.h 22.1 89/08/10 Copyright 1988 Sun Micro * * RASTER.H - Raster information for user level code (needed by shapes.h). * ****/ #ifndef _SH_CLASS_RAS /* * Raster types (legal values for the RAS_TYPE attribute) * There are several different types of RASTER objects, differing * in where their pixel data comes from. * RAS_MEMORY = the pixel data is in memory. * RAS_SCREEN = the raster is actually part of a frame buffer * (which may or may not be visible on the screen.) It may not * be the whole framebuffer, but just a region. * RAS_CHILD = the pixel data comes from that of the parent raster. */ typedef RASTER (*RAS_type)(); #define RAS_MEMORY sh_RAS_MEMORY #define RAS_SCREEN sh_RAS_SCREEN #define RAS_CHILD sh_RAS_CHILD /* * These will go away soon - obsolete */ #define RAS_TYPE_MEMORY sh_RAS_MEMORY #define RAS_TYPE_SCREEN sh_RAS_SCREEN #define RAS_TYPE_CHILD sh_RAS_CHILD /* * Internal Raster types */ #define RAS_MEM 0 /* memory raster */ #define RAS_SCR 1 /* screen raster */ #define RAS_CHLD_MEM 2 /* child memory raster */ #define RAS_CHLD_SCR 3 /* child screen raster */ extern RASTER sh_RAS_MEMORY(); extern RASTER sh_RAS_SCREEN(); extern RASTER sh_RAS_CHILD(); extern SHAPE sh_Shape_Raster(); extern SHAPE sh_Clip_Raster(); #define Create_Raster(t,n) t(t,n,1) #define Temp_Raster(t,n) t(t,n,0) /* * Raster attributes */ typedef enum { RAS_TYPE, /* type of raster object */ RAS_ORG, /* origin of raster in physical device space */ RAS_DIM, /* dimensions of raster in pixels */ RAS_DEPTH, /* depth of raster */ RAS_AREA_STYLE, /* clip path area style */ RAS_CLIP_PATH, /* current clip path */ RAS_ANTI_ALIAS, /* antialias switch */ RAS_PLANE_ENABLE, /* raster plane enable mask */ RAS_CMAP, /* color map */ RAS_LINEBYTES, /* number of bytes in a scanline */ RAS_DATA, /* the first row of the raster image */ RAS_CURSOR_OVERLAP, /* flag set by client when cursor overlaps raster */ RAS_WIN_GRAB, /* window grabber status */ RAS_WIN_FD, /* Sunview compatibility frame buffer file descrptr */ RAS_VSYNC, /* wait for vertical sync */ } RAS_attr; #define RAS_ATTRS ((int) RAS_WIN_FD) #define RAS_ANTI_ALIAS_ON 1 #define RAS_ANTI_ALIAS_OFF 0 /* * Raster data type formats. * Read_Raster, Write_Raster and Create_Glyph use the RAS_data_type * to determine depth and alignment of incoming user data. */ #define RAS_DEPTH_1 0 #define RAS_DEPTH_8 0x01 #define RAS_DEPTH_32 0x02 #define RAS_DEPTH_FLD_WDTH 0x02 #define RAS_DEPTH_MASK 0x03 #define RAS_ALIGN_8 0x10 #define RAS_ALIGN_16 0x20 #define RAS_ALIGN_32 0x40 #define RAS_OPT_SPEED 0x80 #define RAS_OPT_SPACE 0 typedef Unsgn8 RAS_data_type; /* * RASTER operators. * * RASTER Create_Raster(t, r) create raster * RASTER Temp_Raster(t, r) create temporary raster * Read_Raster(ras, data, opt) read raster into user data area * Write_Raster(ras, data, opt) write raster into user data area * Display_Raster(ras, ctx, m) display raster in context * Store_Raster(ras, ctx) store raster from context * Destroy_Raster(ras) destroy raster object * Get_Raster(ras, attr) get raster attribute * Set_Raster(ras, attr, val) set raster attribute * * Print_Raster(ras) print raster object info * Attach_Raster(ras, ctx) attach raster to context * Path_Raster(ras,path,ctx,o) display path on raster * Color_Raster(ras,col) set foreground color * Clear_Raster(ras,ctx) clear raster * Dispatch_Raster(ras,a,f) set up function dispatch * Glyph_Raster(ras,ctx,..) render glyphs on raster (X11/NeWS) * Image_Raster(rasi, raso, ctx,...) raster image transformations (X11/NeWS) * Points_Raster(ctx, points, npoints) render points on raster (X11/NeWS) */ #define RAS_OP_Destroy 0 #define RAS_OP_Init 1 #define RAS_OP_Get 2 #define RAS_OP_Set 3 #define RAS_OP_Print 4 #define RAS_OP_Read 5 #define RAS_OP_Write 6 #define RAS_OP_Display 7 #define RAS_OP_Store 8 #define RAS_OP_Attach 9 #define RAS_OP_Path 10 #define RAS_OP_Color 11 #define RAS_OP_Clear 12 #define RAS_OP_Dispatch 13 #define RAS_OP_Glyph 14 #define RAS_OP_Image 15 #define RAS_OP_Points 16 #define RAS_OPERS 17 /* Flags for the ras_flags field */ #define RAS_PRIVATEDATA 1 /* set iff the ras_data of a raster is in memory allocated by the client */ #define Clip_Raster(r,c) (((r)->ras_clip_key == (c)->ctx_clip_key) ? \ (r)->ras_clip_shape : sh_Clip_Raster(r,c)) #define Shape_Raster(r) ((r)->ras_shape ? (r)->ras_shape : sh_Shape_Raster(r)) #define Destroy_Raster(r) Destroy_Obj(r) #ifndef SH_MONITOR #define Set_Raster(r,a,v) \ ((void) GetOper_Obj(r,RAS_OP_Set)((RASTER)(r), a, v)) #else /* SH_MONITOR */ #define Set_Raster(r,a,v) \ ((void) GetOper_Obj(r,RAS_OP_Set)((RASTER)sh_Monitor_Set_Raster(r), a, v)) #endif /* SH_MONITOR */ #define Store_Raster(r,c) ((void) GetOper_Obj(r,RAS_OP_Store)(r,c)) #define Read_Raster(r,d,o) ((RASTER) GetOper_Obj(r,RAS_OP_Read)(r,d,o)) #define Write_Raster(r,d,o) ((RASTER) GetOper_Obj(r,RAS_OP_Write)(r,d,o)) #define Display_Raster(r,c,m) \ ((void) GetOper_Obj(c->CTX_RASTER,RAS_OP_Display)(r,c,m)) #define Print_Raster(r) ((void) GetOper_Obj(r,RAS_OP_Print)(r)) #define Attach_Raster(r,c) ((RASTER) GetOper_Obj(r,RAS_OP_Attach)(r,c)) #define Path_Raster(r,p,c,h) ((void) GetOper_Obj(r,RAS_OP_Path)(r,p,c,h)) #define Color_Raster(r,c) ((void) GetOper_Obj(r,RAS_OP_Color)(r,c)) #define Image_Raster(ri,ro,c,d,dt,st,sc,dc,i,t,fr) \ ((RASTER) GetOper_Obj(ri,RAS_OP_Image)(ri,ro,c,d,dt,st,sc,dc,i,(t),fr)) #define Points_Raster(c,p,np) \ ((void) GetOper_Obj(c->CTX_RASTER,RAS_OP_Points)(c,p,np)) #define Clear_Raster(r,c) ((void) GetOper_Obj(r,RAS_OP_Clear)(r,c)) #define Dispatch_Raster(r,a,f) ((void) GetOper_Obj(r,RAS_OP_Dispatch)(r,a,f)) #define Glyph_Raster(r,c,gr,n,o,d,opt) \ ((void) GetOper_Obj(r,RAS_OP_Glyph)(r,c,gr,n,o,d,opt)) /* * Internal RASTER object structure */ struct class_RAS { #include "sh_RAS.ah" }; /* * Get_Raster(ras, attr) * Fast way to access raster attributes. * This macro depends on the "attr" argument being a compile time constant. */ #ifndef SH_MONITOR #define Get_Raster(r,a) CAT(a,get)((RASTER)(r)) #else /* SH_MONITOR */ #define Get_Raster(r,a) CAT(a,get)((RASTER)(sh_Monitor_Get_Raster(r))) #endif /* SH_MONITOR */ #define RAS_TYPEget(r) ((r)->RAS_TYPE) #define RAS_ORGget(r) (&((r)->RAS_ORG)) #define RAS_DIMget(r) (&((r)->RAS_DIM)) #define RAS_DEPTHget(r) ((r)->RAS_DEPTH) #define RAS_ANTI_ALIASget(r) ((r)->RAS_ANTI_ALIAS) #define RAS_PLANE_ENABLEget(r) ((r)->RAS_PLANE_ENABLE) #define RAS_TRANSFORMget(r) ((r)->RAS_TRANSFORM) #define RAS_CMAPget(r) ((r)->RAS_CMAP) #define RAS_CLIP_PATHget(r) ((r)->RAS_CLIP_PATH) #define RAS_AREA_STYLEget(r) ((r)->RAS_AREA_STYLE) #define RAS_CURSOR_OVERLAPget(r) ((r)->RAS_CURSOR_OVERLAP) #define RAS_DATAget(r) ((r)->RAS_DATA) #define RAS_LINEBYTESget(r) ((r)->RAS_LINEBYTES) #define RAS_VSYNCget(r) ((int) GetOper_Obj(r, RAS_OP_Get)(r,RAS_VSYNC)) #define RAS_WIN_FDget(r) ((int) GetOper_Obj(r, RAS_OP_Get)(r,RAS_WIN_FD)) #define RAS_WIN_GRABget(r) ((int) GetOper_Obj(r,RAS_OP_Get)(r,RAS_WIN_GRAB)) #define ras_clip_shapeget(r) ((r)->ras_clip_shape) #define _SH_CLASS_RAS #endif /* _SH_CLASS_RAS */