1/* 2 3Copyright 1989, 1998 The Open Group 4 5Permission to use, copy, modify, distribute, and sell this software and its 6documentation for any purpose is hereby granted without fee, provided that 7the above copyright notice appear in all copies and that both that 8copyright notice and this permission notice appear in supporting 9documentation. 10 11The above copyright notice and this permission notice shall be included 12in all copies or substantial portions of the Software. 13 14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 18OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20OTHER DEALINGS IN THE SOFTWARE. 21 22Except as contained in this notice, the name of The Open Group shall 23not be used in advertising or otherwise to promote the sale, use or 24other dealings in this Software without prior written authorization 25from 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 44typedef 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 */ 54typedef struct _BitmapClassRec { 55 CoreClassPart core_class; 56 SimpleClassPart simple_class; 57 BitmapClassPart bitmap_class; 58} BitmapClassRec; 59 60extern BitmapClassRec bitmapClassRec; 61 62typedef void (*EngageProc)(Widget, BWStatus *, XtPointer, int *); 63typedef void (*TerminateProc)( Widget, BWStatus *, XtPointer); 64typedef void (*RemoveProc)(Widget w, BWStatus *, XtPointer); 65 66/**********/ 67struct _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 78typedef struct { 79 Position from_x, from_y, 80 to_x, to_y; 81} BWArea; 82 83typedef struct { 84 BWRequestRec *request; 85 XtPointer status; 86 Boolean trap; 87 XtPointer call_data; 88} BWRequestStack; 89 90typedef 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 99typedef struct { 100 Boolean own; 101 Boolean limbo; 102} BWSelection; 103 104/* New fields for the Bitmap widget record */ 105typedef 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 _XtString filename; 123 _XtString basename; 124 /* private state */ 125 String size; 126 Position horizOffset, vertOffset; 127 XtActionProc notify; 128 BWRequestStack *request_stack; 129 Cardinal cardinal, current; 130 /*Boolean trapping;*/ 131 XImage *image, *buffer, *storage; 132 XPoint buffer_hot; 133 BWArea mark, buffer_mark; 134 GC drawing_gc; 135 GC highlighting_gc; 136 GC frame_gc; 137 GC axes_gc; 138 Boolean changed; 139 Boolean fold; 140 Boolean zooming; 141 BWZoom zoom; 142 XtPointer *value; 143 char status[80]; 144 BWSelection selection; 145 Boolean stipple_change_expose_event; 146} BitmapPart; 147 148/* Full instance record declaration */ 149typedef struct _BitmapRec { 150 CorePart core; 151 SimplePart simple; 152 BitmapPart bitmap; 153} BitmapRec; 154 155/* Private functions */ 156 157#define Length(width, height)\ 158 (((int)(width) + 7) / 8 * (height)) 159 160#define InBitmapX(BW, x)\ 161 (Position)(min((Position)((Dimension)(max(BW->bitmap.horizOffset,x) -\ 162 BW->bitmap.horizOffset) /\ 163 BW->bitmap.squareW), BW->bitmap.width - 1)) 164 165#define InBitmapY(BW, y)\ 166 (Position)(min((Position)((Dimension)(max(BW->bitmap.vertOffset, y) -\ 167 BW->bitmap.vertOffset) /\ 168 BW->bitmap.squareH), BW->bitmap.height - 1)) 169 170#define InWindowX(BW, x)\ 171 (Position) (BW->bitmap.horizOffset + ((x) * BW->bitmap.squareW)) 172 173#define InWindowY(BW, y)\ 174 (Position) (BW->bitmap.vertOffset + ((y) * BW->bitmap.squareH)) 175 176#define GetPixmap(BW, image)\ 177 XCreateBitmapFromData(XtDisplay(BW), XtWindow(BW),\ 178 image->data, image->width, image->height) 179 180 181#define QuerySet(x, y) (((x) != NotSet) && ((y) != NotSet)) 182 183#define bit int 184 185#define QueryZero(x, y) (((x) == 0) || ((y) == 0)) 186 187#define Swap(x, y) {Position t; t = x; x = y; y = t;} 188 189#define QuerySwap(x, y) if(x > y) Swap(x, y) 190 191#define QueryInBitmap(BW, x, y)\ 192 (((x) >= 0) && ((x) < BW->bitmap.image->width) &&\ 193 ((y) >= 0) && ((y) < BW->bitmap.image->height)) 194 195#define Value(BW, button) (BW->bitmap.button_function[button - 1]) 196 197#define CreateCleanData(length) XtCalloc(length, sizeof(char)) 198XImage *CreateBitmapImage(BitmapWidget BW, char *data, Dimension width, Dimension height); 199void DestroyBitmapImage(XImage **image); 200void TransferImageData(XImage *source, XImage *destination); 201void CopyImageData(XImage *source, XImage *destination, 202 Position from_x, Position from_y, 203 Position to_x, Position to_y, 204 Position at_x, Position at_y); 205XImage *GetImage(BitmapWidget BW, Pixmap pixmap); 206XImage *ConvertToBitmapImage(BitmapWidget BW, XImage *image); 207XImage *ScaleBitmapImage(BitmapWidget BW, XImage *src, 208 double scale_x, double scale_y); 209 210extern Boolean DEBUG; 211 212#endif /* _BitmapP_h */ 213