diff options
Diffstat (limited to 'app/bin/draw.h')
-rw-r--r-- | app/bin/draw.h | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/app/bin/draw.h b/app/bin/draw.h new file mode 100644 index 0000000..6f9f1ea --- /dev/null +++ b/app/bin/draw.h @@ -0,0 +1,208 @@ +/* + * $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/bin/draw.h,v 1.4 2008-10-11 06:03:06 m_fischer Exp $ + */ + +/* XTrkCad - Model Railroad CAD + * Copyright (C) 2005 Dave Bullis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef DRAW_H +#define DRAW_H + +#define MSG_BASE (1000) +#include "messages.h" + +#define DC_TICKS (1<<1) +#define DC_PRINT (1<<2) +#define DC_NOCLIP (1<<3) +#define DC_QUICK (1<<4) +#define DC_DASH (1<<5) +#define DC_SIMPLE (1<<6) +#define DC_GROUP (1<<7) +#define DC_CENTERLINE (1<<8) +#define DC_SEGTRACK (1<<9) +#define DC_TIES (1<<10) + +typedef struct drawCmd_t * drawCmd_p; + +typedef struct { + long options; + void (*drawLine)( drawCmd_p, coOrd, coOrd, wDrawWidth, wDrawColor ); + void (*drawArc)( drawCmd_p, coOrd, DIST_T, ANGLE_T, ANGLE_T, BOOL_T, wDrawWidth, wDrawColor ); + void (*drawString)( drawCmd_p, coOrd, ANGLE_T, char *, wFont_p, FONTSIZE_T, wDrawColor ); + void (*drawBitMap)( drawCmd_p, coOrd, wDrawBitMap_p, wDrawColor ); + void (*drawFillPoly) (drawCmd_p, int, coOrd *, wDrawColor ); + void (*drawFillCircle) (drawCmd_p, coOrd, DIST_T, wDrawColor ); + } drawFuncs_t; + +typedef void (*drawConvertPix2CoOrd)( drawCmd_p, wPos_t, wPos_t, coOrd * ); +typedef void (*drawConvertCoOrd2Pix)( drawCmd_p, coOrd, wPos_t *, wPos_t * ); +typedef struct drawCmd_t { + wDraw_p d; + drawFuncs_t * funcs; + long options; + DIST_T scale; + ANGLE_T angle; + coOrd orig; + coOrd size; + drawConvertPix2CoOrd Pix2CoOrd; + drawConvertCoOrd2Pix CoOrd2Pix; + FLOAT_T dpi; + } drawCmd_t; + +#define SCALEX(D,X) ((X)/(D).dpi) +#define SCALEY(D,Y) ((Y)/(D).dpi) + +#ifdef WINDOWS +#define LBORDER (33) +#define BBORDER (32) +#else +#define LBORDER (26) +#define BBORDER (27) +#endif +#define RBORDER (9) +#define TBORDER (8) + +#ifdef LATER +#define Pix2CoOrd( D, pos, X, Y ) { \ + pos.x = ((long)(((POS_T)((X)-LBORDER)*pixelBins)/D.dpi))/pixelBins * D.scale + D.orig.x; \ + pos.y = ((long)(((POS_T)((Y)-BBORDER)*pixelBins)/D.dpi))/pixelBins * D.scale + D.orig.y; \ + } +#endif +void Pix2CoOrd( drawCmd_p, wPos_t, wPos_t, coOrd * ); +void CoOrd2Pix( drawCmd_p, coOrd, wPos_t *, wPos_t * ); + +extern BOOL_T inError; +extern DIST_T pixelBins; +extern wWin_p mapW; +extern BOOL_T mapVisible; +extern drawCmd_t mainD; +extern coOrd mainCenter; +extern drawCmd_t mapD; +extern drawCmd_t tempD; +#define RoomSize (mapD.size) +extern coOrd oldMarker; +extern wPos_t closePixels; +#define dragDistance (dragPixels*mainD.scale / mainD.dpi) +extern long dragPixels; +extern long dragTimeout; +extern long autoPan; +extern long minGridSpacing; +extern long drawCount; +extern BOOL_T drawEnable; +extern long currRedraw; + +extern wDrawColor drawColorBlack; +extern wDrawColor drawColorWhite; +extern wDrawColor drawColorRed; +extern wDrawColor drawColorBlue; +extern wDrawColor drawColorGreen; +extern wDrawColor drawColorAqua; +extern wDrawColor drawColorPurple; +extern wDrawColor drawColorGold; +#define wDrawColorBlack drawColorBlack +#define wDrawColorWhite drawColorWhite +#define wDrawColorBlue drawColorBlue + +extern wDrawColor markerColor; +extern wDrawColor borderColor; +extern wDrawColor crossMajorColor; +extern wDrawColor crossMinorColor; +extern wDrawColor snapGridColor; +extern wDrawColor selectedColor; +extern wDrawColor profilePathColor; + +BOOL_T IsClose( DIST_T ); + +drawFuncs_t screenDrawFuncs; +drawFuncs_t tempDrawFuncs; +drawFuncs_t tempSegDrawFuncs; +drawFuncs_t printDrawFuncs; + +#define DrawLine( D, P0, P1, W, C ) (D)->funcs->drawLine( D, P0, P1, W, C ) +#define DrawArc( D, P, R, A0, A1, F, W, C ) (D)->funcs->drawArc( D, P, R, A0, A1, F, W, C ) +#define DrawString( D, P, A, S, FP, FS, C ) (D)->funcs->drawString( D, P, A, S, FP, FS, C ) +#define DrawBitMap( D, P, B, C ) (D)->funcs->drawBitMap( D, P, B, C ) +#define DrawFillPoly( D, N, P, C ) (D)->funcs->drawFillPoly( D, N, P, C ); +#define DrawFillCircle( D, P, R, C ) (D)->funcs->drawFillCircle( D, P, R, C ); + +#define REORIGIN( Q, P, A, O ) { \ + (Q) = (P); \ + REORIGIN1( Q, A, O ) \ + } +#define REORIGIN1( Q, A, O ) { \ + if ( (A) != 0.0 ) \ + Rotate( &(Q), zero, (A) ); \ + (Q).x += (O).x; \ + (Q).y += (O).y; \ + } +#define OFF_D( ORIG, SIZE, LO, HI ) \ + ( (HI).x < (ORIG).x || \ + (LO).x > (ORIG).x+(SIZE).x || \ + (HI).y < (ORIG).y || \ + (LO).y > (ORIG).y+(SIZE).y ) +#define OFF_MAIND( LO, HI ) \ + OFF_D( mainD.orig, mainD.size, LO, HI ) + +void DrawHilight( drawCmd_p, coOrd, coOrd ); +void DrawHilightPolygon( drawCmd_p, coOrd *, int ); +#define BOX_NONE (0) +#define BOX_UNDERLINE (1) +#define BOX_BOX (2) +#define BOX_INVERT (3) +#define BOX_ARROW (4) +#define BOX_BACKGROUND (5) +void DrawBoxedString( int, drawCmd_p, coOrd, char *, wFont_p, wFontSize_t, wDrawColor, ANGLE_T ); +void DrawTextSize2( drawCmd_p, char *, wFont_p, wFontSize_t, BOOL_T, coOrd *, POS_T * ); +void DrawTextSize( drawCmd_p, char *, wFont_p, wFontSize_t, BOOL_T, coOrd * ); +BOOL_T SetRoomSize( coOrd ); +void GetRoomSize( coOrd * ); +void DoRedraw( void ); +void SetMainSize( void ); +void MainRedraw( void ); +void DrawMarkers( void ); +void DrawMapBoundingBox( BOOL_T ); +void DrawTicks( drawCmd_p, coOrd ); +void DrawRuler( drawCmd_p, coOrd, coOrd, DIST_T, int, int, wDrawColor ); +void MainProc( wWin_p, winProcEvent, void * ); +void InitInfoBar( void ); +void DrawInit( int ); +void DoZoomUp( void * ); +void DoZoomDown( void * ); +void DoZoom( DIST_T * ); + +void InitCmdZoom( wMenu_p, wMenu_p ); + +void InfoPos( coOrd ); +void InfoCount( wIndex_t ); +void SetMessage( char * ); + +void InfoSubstituteControls( wControl_p *, char * * ); + +void MapGrid( coOrd, coOrd, ANGLE_T, coOrd, ANGLE_T, POS_T, POS_T, int *, int *, int *, int * ); +void DrawGrid( drawCmd_p, coOrd *, POS_T, POS_T, long, long, coOrd, ANGLE_T, wDrawColor, BOOL_T ); +STATUS_T GridAction( wAction_t, coOrd, coOrd *, DIST_T * ); + +void ResetMouseState( void ); +void FakeDownMouseState( void ); +void GetMousePosition( int *x, int *y ); +void RecordMouse( char *, wAction_t, POS_T, POS_T ); +extern long playbackDelay; +void MovePlaybackCursor( drawCmd_p, wPos_t, wPos_t ); +typedef void (*playbackProc)( wAction_t, coOrd ); +void PlaybackMouse( playbackProc, drawCmd_p, wAction_t, coOrd, wDrawColor ); +#endif |