#ifndef _BitmapP_h
#define _BitmapP_h
#define bit int
#include "Bitmap.h"
#include "Requests.h"
#include <X11/Xaw/SimpleP.h>
typedef struct {
Atom *targets;
Cardinal num_targets;
BWRequestRec *requests;
Cardinal num_requests;
BWRequestRec *request[100];
} BitmapClassPart;
typedef struct _BitmapClassRec {
CoreClassPart core_class;
SimpleClassPart simple_class;
BitmapClassPart bitmap_class;
} BitmapClassRec;
extern BitmapClassRec bitmapClassRec;
typedef void (*EngageProc)(Widget, BWStatus *, XtPointer, int *);
typedef void (*TerminateProc)( Widget, BWStatus *, XtPointer);
typedef void (*RemoveProc)(Widget w, BWStatus *, XtPointer);
struct _BWRequestRec {
char *name;
int status_size;
EngageProc engage;
XtPointer engage_client_data;
TerminateProc terminate;
XtPointer terminate_client_data;
RemoveProc remove;
XtPointer remove_client_data;
} ;
typedef struct {
Position from_x, from_y,
to_x, to_y;
} BWArea;
typedef struct {
BWRequestRec *request;
XtPointer status;
Boolean trap;
XtPointer call_data;
} BWRequestStack;
typedef struct {
XImage *image, *buffer;
XPoint hot;
Position at_x, at_y;
Boolean fold;
Boolean grid;
Boolean changed;
} BWZoom;
typedef struct {
Boolean own;
Boolean limbo;
} BWSelection;
typedef struct {
Pixel foreground_pixel;
Pixel highlight_pixel;
Pixel frame_pixel;
Pixmap stipple;
Boolean stippled;
Boolean proportional;
Boolean grid;
Dimension grid_tolerance;
Pixmap dashes;
Boolean dashed;
Boolean axes;
Boolean resize;
Dimension margin, squareW, squareH, width, height;
XPoint hot;
int button_function[5];
String filename, basename;
String size;
Position horizOffset, vertOffset;
XtActionProc notify;
BWRequestStack *request_stack;
Cardinal cardinal, current;
XImage *image, *buffer, *storage;
XPoint buffer_hot;
BWArea mark, buffer_mark;
GC drawing_gc;
GC highlighting_gc;
GC frame_gc;
GC axes_gc;
Boolean changed;
Boolean fold;
Boolean zooming;
BWZoom zoom;
XtPointer *value;
char status[80];
BWSelection selection;
Boolean stipple_change_expose_event;
} BitmapPart;
typedef struct _BitmapRec {
CorePart core;
SimplePart simple;
BitmapPart bitmap;
} BitmapRec;
#define Length(width, height)\
(((int)(width) + 7) / 8 * (height))
#define InBitmapX(BW, x)\
(Position)(min((Position)((Dimension)(max(BW->bitmap.horizOffset,x) -\
BW->bitmap.horizOffset) /\
BW->bitmap.squareW), BW->bitmap.width - 1))
#define InBitmapY(BW, y)\
(Position)(min((Position)((Dimension)(max(BW->bitmap.vertOffset, y) -\
BW->bitmap.vertOffset) /\
BW->bitmap.squareH), BW->bitmap.height - 1))
#define InWindowX(BW, x)\
(Position) (BW->bitmap.horizOffset + ((x) * BW->bitmap.squareW))
#define InWindowY(BW, y)\
(Position) (BW->bitmap.vertOffset + ((y) * BW->bitmap.squareH))
#define GetPixmap(BW, image)\
XCreateBitmapFromData(XtDisplay(BW), XtWindow(BW),\
image->data, image->width, image->height)
#define QuerySet(x, y) (((x) != NotSet) && ((y) != NotSet))
#define bit int
#define QueryZero(x, y) (((x) == 0) || ((y) == 0))
#define Swap(x, y) {Position t; t = x; x = y; y = t;}
#define QuerySwap(x, y) if(x > y) Swap(x, y)
#define QueryInBitmap(BW, x, y)\
(((x) >= 0) && ((x) < BW->bitmap.image->width) &&\
((y) >= 0) && ((y) < BW->bitmap.image->height))
#define Value(BW, button) (BW->bitmap.button_function[button - 1])
#define CreateCleanData(length) XtCalloc(length, sizeof(char))
XImage *CreateBitmapImage(BitmapWidget BW, char *data, Dimension width, Dimension height);
void DestroyBitmapImage(XImage **image);
void TransferImageData(XImage *source, XImage *destination);
void CopyImageData(XImage *source, XImage *destination,
Position from_x, Position from_y,
Position to_x, Position to_y,
Position at_x, Position at_y);
XImage *GetImage(BitmapWidget BW, Pixmap pixmap);
XImage *ConvertToBitmapImage(BitmapWidget BW, XImage *image);
XImage *ScaleBitmapImage(BitmapWidget BW, XImage *src,
double scale_x, double scale_y);
#endif