1 /* 2 3 Copyright 1989, 1998 The Open Group 4 5 Permission to use, copy, modify, distribute, and sell this software and its 6 documentation for any purpose is hereby granted without fee, provided that 7 the above copyright notice appear in all copies and that both that 8 copyright notice and this permission notice appear in supporting 9 documentation. 10 11 The above copyright notice and this permission notice shall be included 12 in all copies or substantial portions of the Software. 13 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 OTHER DEALINGS IN THE SOFTWARE. 21 22 Except as contained in this notice, the name of The Open Group shall 23 not be used in advertising or otherwise to promote the sale, use or 24 other dealings in this Software without prior written authorization 25 from The Open Group. 26 27 */ 28 29 /* 30 * Author: Davor Matic, MIT X Consortium 31 */ 32 33 34 35 #ifndef _BitmapP_h 36 #define _BitmapP_h 37 38 #define bit int 39 40 #include "Bitmap.h" 41 #include "Requests.h" 42 #include <X11/Xaw/SimpleP.h> 43 44 typedef struct { 45 Atom *targets; 46 Cardinal num_targets; 47 BWRequestRec *requests; 48 Cardinal num_requests; 49 BWRequestRec *request[100]; 50 51 } BitmapClassPart; 52 53 /* Full class record declaration */ 54 typedef struct _BitmapClassRec { 55 CoreClassPart core_class; 56 SimpleClassPart simple_class; 57 BitmapClassPart bitmap_class; 58 } BitmapClassRec; 59 60 extern BitmapClassRec bitmapClassRec; 61 62 typedef void (*EngageProc)(Widget, BWStatus *, XtPointer, int *); 63 typedef void (*TerminateProc)( Widget, BWStatus *, XtPointer); 64 typedef void (*RemoveProc)(Widget w, BWStatus *, XtPointer); 65 66 /**********/ 67 struct _BWRequestRec { 68 char *name; 69 int status_size; 70 EngageProc engage; 71 XtPointer engage_client_data; 72 TerminateProc terminate; 73 XtPointer terminate_client_data; 74 RemoveProc remove; 75 XtPointer remove_client_data; 76 } ; 77 78 typedef struct { 79 Position from_x, from_y, 80 to_x, to_y; 81 } BWArea; 82 83 typedef struct { 84 BWRequestRec *request; 85 XtPointer status; 86 Boolean trap; 87 XtPointer call_data; 88 } BWRequestStack; 89 90 typedef struct { 91 XImage *image, *buffer; 92 XPoint hot; 93 Position at_x, at_y; 94 Boolean fold; 95 Boolean grid; 96 Boolean changed; 97 } BWZoom; 98 99 typedef struct { 100 Boolean own; 101 Boolean limbo; 102 } BWSelection; 103 104 /* New fields for the Bitmap widget record */ 105 typedef struct { 106 /* resources */ 107 Pixel foreground_pixel; 108 Pixel highlight_pixel; 109 Pixel frame_pixel; 110 Pixmap stipple; 111 Boolean stippled; 112 Boolean proportional; 113 Boolean grid; 114 Dimension grid_tolerance; 115 Pixmap dashes; 116 Boolean dashed; 117 Boolean axes; 118 Boolean resize; 119 Dimension margin, squareW, squareH, width, height; 120 XPoint hot; 121 int button_function[5]; 122 String filename, basename; 123 /* private state */ 124 String size; 125 Position horizOffset, vertOffset; 126 XtActionProc notify; 127 BWRequestStack *request_stack; 128 Cardinal cardinal, current; 129 /*Boolean trapping;*/ 130 XImage *image, *buffer, *storage; 131 XPoint buffer_hot; 132 BWArea mark, buffer_mark; 133 GC drawing_gc; 134 GC highlighting_gc; 135 GC frame_gc; 136 GC axes_gc; 137 Boolean changed; 138 Boolean fold; 139 Boolean zooming; 140 BWZoom zoom; 141 XtPointer *value; 142 char status[80]; 143 BWSelection selection; 144 Boolean stipple_change_expose_event; 145 } BitmapPart; 146 147 /* Full instance record declaration */ 148 typedef struct _BitmapRec { 149 CorePart core; 150 SimplePart simple; 151 BitmapPart bitmap; 152 } BitmapRec; 153 154 /* Private functions */ 155 156 #define Length(width, height)\ 157 (((int)(width) + 7) / 8 * (height)) 158 159 #define InBitmapX(BW, x)\ 160 (Position)(min((Position)((Dimension)(max(BW->bitmap.horizOffset,x) -\ 161 BW->bitmap.horizOffset) /\ 162 BW->bitmap.squareW), BW->bitmap.width - 1)) 163 164 #define InBitmapY(BW, y)\ 165 (Position)(min((Position)((Dimension)(max(BW->bitmap.vertOffset, y) -\ 166 BW->bitmap.vertOffset) /\ 167 BW->bitmap.squareH), BW->bitmap.height - 1)) 168 169 #define InWindowX(BW, x)\ 170 (Position) (BW->bitmap.horizOffset + ((x) * BW->bitmap.squareW)) 171 172 #define InWindowY(BW, y)\ 173 (Position) (BW->bitmap.vertOffset + ((y) * BW->bitmap.squareH)) 174 175 #define GetPixmap(BW, image)\ 176 XCreateBitmapFromData(XtDisplay(BW), XtWindow(BW),\ 177 image->data, image->width, image->height) 178 179 180 #define QuerySet(x, y) (((x) != NotSet) && ((y) != NotSet)) 181 182 #define bit int 183 184 #define QueryZero(x, y) (((x) == 0) || ((y) == 0)) 185 186 #define Swap(x, y) {Position t; t = x; x = y; y = t;} 187 188 #define QuerySwap(x, y) if(x > y) Swap(x, y) 189 190 #define QueryInBitmap(BW, x, y)\ 191 (((x) >= 0) && ((x) < BW->bitmap.image->width) &&\ 192 ((y) >= 0) && ((y) < BW->bitmap.image->height)) 193 194 #define Value(BW, button) (BW->bitmap.button_function[button - 1]) 195 196 #define CreateCleanData(length) XtCalloc(length, sizeof(char)) 197 XImage *CreateBitmapImage(BitmapWidget BW, char *data, Dimension width, Dimension height); 198 void DestroyBitmapImage(XImage **image); 199 void TransferImageData(XImage *source, XImage *destination); 200 void CopyImageData(XImage *source, XImage *destination, 201 Position from_x, Position from_y, 202 Position to_x, Position to_y, 203 Position at_x, Position at_y); 204 XImage *GetImage(BitmapWidget BW, Pixmap pixmap); 205 XImage *ConvertToBitmapImage(BitmapWidget BW, XImage *image); 206 XImage *ScaleBitmapImage(BitmapWidget BW, XImage *src, 207 double scale_x, double scale_y); 208 209 extern Boolean DEBUG; 210 211 #endif /* _BitmapP_h */ 212