diff options
Diffstat (limited to 'app/bin/csnap.c')
-rw-r--r-- | app/bin/csnap.c | 440 |
1 files changed, 234 insertions, 206 deletions
diff --git a/app/bin/csnap.c b/app/bin/csnap.c index eb58bc4..baf6998 100644 --- a/app/bin/csnap.c +++ b/app/bin/csnap.c @@ -17,28 +17,25 @@ * * 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. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include <math.h> - #include "custom.h" #include "fileio.h" -#include "i18n.h" -#include "messages.h" #include "param.h" #include "track.h" -#include "utility.h" +#include "common-ui.h" -#define bigdot_width 3 +#define bigdot_width 2 +int log_timedrawgrid = 0; /***************************************************************************** * - + * */ -EXPORT long minGridSpacing = 3; +EXPORT long minGridSpacing = 5; #define CROSSTICK #ifdef CROSSTICK @@ -49,17 +46,17 @@ static wDrawBitMap_p cross0_bm; #define DEFAULTGRIDSPACING (1.0) EXPORT void MapGrid( - coOrd orig, - coOrd size, - ANGLE_T angle, - coOrd gridOrig, - ANGLE_T gridAngle, - POS_T Xspacing, - POS_T Yspacing, - int * x0, - int * x1, - int * y0, - int * y1 ) + coOrd orig, + coOrd size, + ANGLE_T angle, + coOrd gridOrig, + ANGLE_T gridAngle, + POS_T Xspacing, + POS_T Yspacing, + int * x0, + int * x1, + int * y0, + int * y1 ) { coOrd p[4], hi, lo; int i; @@ -79,14 +76,18 @@ EXPORT void MapGrid( } hi = lo = p[0]; for (i=1; i<4; i++) { - if (hi.x < p[i].x) + if (hi.x < p[i].x) { hi.x = p[i].x; - if (hi.y < p[i].y) + } + if (hi.y < p[i].y) { hi.y = p[i].y; - if (lo.x > p[i].x) + } + if (lo.x > p[i].x) { lo.x = p[i].x; - if (lo.y > p[i].y) + } + if (lo.y > p[i].y) { lo.y = p[i].y; + } } *x0 = (int)floor( lo.x / Xspacing ); *y0 = (int)floor( lo.y / Yspacing ); @@ -97,54 +98,53 @@ EXPORT void MapGrid( static DIST_T Gdx, Gdy, Ddx, Ddy; static coOrd GDorig; -static wPos_t lborder, bborder; +static wDrawPix_t lborder, bborder; +int nDrawGridPoints = 0; void static DrawGridPoint( - drawCmd_p D, - wDrawColor Color, - coOrd orig, - coOrd * size, - DIST_T dpi, - coOrd p0, - BOOL_T bigdot ) + drawCmd_p D, + wDrawColor Color, + coOrd orig, + coOrd * size, + DIST_T dpi, + coOrd p0, + BOOL_T bigdot ) { - wPos_t x0, y0; + // Map Grid index to Layout pos POS_T x; x = (p0.x*Gdx + p0.y*Gdy) + orig.x; p0.y = (p0.y*Gdx - p0.x*Gdy) + orig.y; p0.x = x; if (size && - ( p0.x < 0.0 || p0.x > size->x || - p0.y < 0.0 || p0.y > size->y ) ) - return; - p0.x -= D->orig.x; - p0.y -= D->orig.y; - x = (p0.x*Ddx + p0.y*Ddy); - p0.y = (p0.y*Ddx - p0.x*Ddy); - p0.x = x; - if ( p0.x < 0.0 || p0.x > D->size.x || - p0.y < 0.0 || p0.y > D->size.y ) + ( p0.x < 0.0 || p0.x > size->x || + p0.y < 0.0 || p0.y > size->y ) ) { return; - x0 = (wPos_t)(p0.x*dpi+0.5) + lborder; - y0 = (wPos_t)(p0.y*dpi+0.5) + bborder; - if ( bigdot ) - wDrawFilledCircle(D->d, x0, y0, (wPos_t)(bigdot_width+0.5)/2, Color, (wDrawOpts)D->funcs->options ); - else - wDrawPoint( D->d, x0, y0, Color, (wDrawOpts)D->funcs->options ); + } + DIST_T r; + nDrawGridPoints++; + if ( bigdot ) { + r = (bigdot_width+0.5)/2 - 0.5; + } else { + r = 0.75; + } + coOrd sz; + sz.x = sz.y = (bigdot?2.5:1.5)/dpi; + p0.x -= 1.0/dpi; + p0.y -= 1.0/dpi; + DrawRectangle( D, p0, sz, Color, DRAW_FILL ); } static void DrawGridLine( - drawCmd_p D, - wDrawColor Color, - coOrd orig, - coOrd * size, - DIST_T dpi, - BOOL_T clip, - coOrd p0, - coOrd p1 ) + drawCmd_p D, + wDrawColor Color, + coOrd orig, + coOrd * size, + DIST_T dpi, + BOOL_T clip, + coOrd p0, + coOrd p1 ) { - wPos_t x0, y0, x1, y1; POS_T x; x = (p0.x*Gdx + p0.y*Gdy) + orig.x; p0.y = (p0.y*Gdx - p0.x*Gdy) + orig.y; @@ -152,45 +152,24 @@ static void DrawGridLine( x = (p1.x*Gdx + p1.y*Gdy) + orig.x; p1.y = (p1.y*Gdx - p1.x*Gdy) + orig.y; p1.x = x; - if (size && clip && !ClipLine( &p0, &p1, zero, 0.0, *size )) - return; - p0.x -= D->orig.x; - p0.y -= D->orig.y; - p1.x -= D->orig.x; - p1.y -= D->orig.y; - x = (p0.x*Ddx + p0.y*Ddy); - p0.y = (p0.y*Ddx - p0.x*Ddy); - p0.x = x; - x = (p1.x*Ddx + p1.y*Ddy); - p1.y = (p1.y*Ddx - p1.x*Ddy); - p1.x = x; - if (clip && !ClipLine( &p0, &p1, zero, 0.0, D->size )) + if (size && clip && !ClipLine( &p0, &p1, zero, 0.0, *size )) { return; - x0 = (wPos_t)(p0.x*dpi+0.5) + lborder; - y0 = (wPos_t)(p0.y*dpi+0.5) + bborder; - x1 = (wPos_t)(p1.x*dpi+0.5) + lborder; - y1 = (wPos_t)(p1.y*dpi+0.5) + bborder; - wDrawLine( D->d, x0, y0, x1, y1, 0, wDrawLineSolid, Color, (wDrawOpts)D->funcs->options ); + } + DrawLine( D, p0, p1, 0, Color ); } -#ifdef WINDOWS -#define WONE (1) -#else -#define WONE (0) -#endif - EXPORT void DrawGrid( - drawCmd_p D, - coOrd * size, - POS_T hMajSpacing, - POS_T vMajSpacing, - long Hdivision, - long Vdivision, - coOrd Gorig, - ANGLE_T Gangle, - wDrawColor Color, - BOOL_T clip ) + drawCmd_p D, + coOrd * size, + POS_T hMajSpacing, + POS_T vMajSpacing, + long Hdivision, + long Vdivision, + coOrd Gorig, + ANGLE_T Gangle, + wDrawColor Color, + BOOL_T clip ) { int hMaj, hMajCnt0, hMajCnt1, vMaj, vMajCnt0, vMajCnt1; coOrd p0, p1; @@ -201,14 +180,21 @@ EXPORT void DrawGrid( POS_T hMajSpacing_dpi, vMajSpacing_dpi; BOOL_T bigdot; - if (hMajSpacing <= 0 && vMajSpacing <= 0) + if (hMajSpacing <= 0 && vMajSpacing <= 0) { return; + } #ifdef CROSSTICK - if (!cross0_bm) - cross0_bm = wDrawBitMapCreate( mainD.d, cross0_width, cross0_height, 2, 2, cross0_bits ); + if (!cross0_bm) { + cross0_bm = wDrawBitMapCreate( mainD.d, cross0_width, cross0_height, 2, 2, + cross0_bits ); + } #endif + unsigned long drawOptions = D->options; + D->options |= DC_ROUND; + unsigned long time0 = wGetTimer(); + nDrawGridPoints = 0; wSetCursor( mainD.d, wCursorWait ); dpi = D->dpi/D->scale; Gdx = cos(D2R(Gangle)); @@ -227,9 +213,9 @@ EXPORT void DrawGrid( vMajSpacing_dpi = vMajSpacing*dpi; MapGrid( D->orig, D->size, D->angle, Gorig, Gangle, - (hMajSpacing>0?hMajSpacing:vMajSpacing), - (vMajSpacing>0?vMajSpacing:hMajSpacing), - &hMajCnt0, &hMajCnt1, &vMajCnt0, &vMajCnt1 ); + (hMajSpacing>0?hMajSpacing:vMajSpacing), + (vMajSpacing>0?vMajSpacing:hMajSpacing), + &hMajCnt0, &hMajCnt1, &vMajCnt0, &vMajCnt1 ); hMinCnt1 = vMinCnt1 = 0; @@ -244,8 +230,9 @@ EXPORT void DrawGrid( } if ( Hdivision > 0 ) { hMinSpacing = hMajSpacing/Hdivision; - if (hMinSpacing*dpi > minGridSpacing) + if (hMinSpacing*dpi > minGridSpacing) { hMinCnt1 = (int)Hdivision; + } } } @@ -260,13 +247,15 @@ EXPORT void DrawGrid( } if ( Vdivision > 0 ) { vMinSpacing = vMajSpacing/Vdivision; - if (vMinSpacing*dpi > minGridSpacing) + if (vMinSpacing*dpi > minGridSpacing) { vMinCnt1 = (int)Vdivision; + } } } - if (hMinCnt1 <= 0 && vMinCnt1 <= 0) + if (hMinCnt1 <= 0 && vMinCnt1 <= 0) { goto done; + } if (hMajSpacing <= 0) { hMinCnt1 = vMinCnt1+1; @@ -313,7 +302,7 @@ EXPORT void DrawGrid( vMinCnt1 = (int)(Vdivision/f); vMinSpacing *= f; } - + bigdot = ( hMinSpacing*dpi > 10 && vMinSpacing*dpi > 10 ); for ( hMaj=hMajCnt0; hMaj<hMajCnt1; hMaj++ ) { for ( vMaj=vMajCnt0; vMaj<vMajCnt1; vMaj++ ) { @@ -326,10 +315,13 @@ EXPORT void DrawGrid( } } } - + done: + D->options = drawOptions; wSetCursor( mainD.d, defaultCursor ); + LOG( log_timedrawgrid, 1, ( "DrawGrid BD = %d, n = %d, time = %lu mS\n", bigdot, + nDrawGridPoints, wGetTimer()-time0 ) ); } @@ -338,8 +330,9 @@ static void DrawBigCross( coOrd pos, ANGLE_T angle ) { coOrd p0, p1; DIST_T d; - if (angleSystem!=ANGLE_POLAR) + if (angleSystem!=ANGLE_POLAR) { angle += 90.0; + } d = max( mainD.size.x, mainD.size.y ); Translate( &p0, pos, angle, d ); Translate( &p1, pos, angle+180, d ); @@ -356,10 +349,10 @@ static void DrawBigCross( coOrd pos, ANGLE_T angle ) EXPORT STATUS_T GridAction( - wAction_t action, - coOrd pos, - coOrd *orig, - DIST_T *angle ) + wAction_t action, + coOrd pos, + coOrd *orig, + DIST_T *angle ) { static coOrd pos0, pos1; @@ -387,8 +380,9 @@ EXPORT STATUS_T GridAction( if ( FindDistance(pos0, pos) > 0.1*mainD.scale ) { pos1 = pos; newAngle = FindAngle( pos0, pos1 ); - if (angleSystem!=ANGLE_POLAR) + if (angleSystem!=ANGLE_POLAR) { newAngle = newAngle-90.0; + } newAngle = NormalizeAngle( floor( newAngle*10.0 ) / 10.0 ); *angle = newAngle; } @@ -416,64 +410,86 @@ EXPORT STATUS_T GridAction( EXPORT wDrawColor snapGridColor; typedef struct { - DIST_T Spacing; - long Division; - long Enable; - } gridData; + DIST_T Spacing; + long Division; + long Enable; +} gridData; typedef struct { - gridData Horz; - gridData Vert; - coOrd Orig; - ANGLE_T Angle; - long Show; - } gridHVData; + gridData Horz; + gridData Vert; + coOrd Orig; + ANGLE_T Angle; + long Show; +} gridHVData; static gridHVData grid = { { 1.0, 0, 1 }, - { 1.0, 0, 1 } }; + { 1.0, 0, 1 } +}; -EXPORT void SnapPos( coOrd * pos ) +EXPORT BOOL_T SnapPos( coOrd * pos ) { coOrd p; DIST_T spacing; - if ( grid.Vert.Enable == FALSE && grid.Horz.Enable == FALSE ) - return; + if ((MyGetKeyState() & WKEY_ALT) != 0) { + return FALSE; + } + if ( grid.Vert.Enable == FALSE && grid.Horz.Enable == FALSE ) { + return FALSE; + } p = *pos; p.x -= grid.Orig.x; p.y -= grid.Orig.y; Rotate( &p, zero, -grid.Angle ); if ( grid.Horz.Enable ) { - if ( grid.Horz.Division > 0 ) + if ( grid.Horz.Division > 0 ) { spacing = grid.Horz.Spacing / grid.Horz.Division; - else + } else { spacing = grid.Horz.Spacing; - if (spacing > 0.001) + } + if (spacing > 0.001) { p.x = floor(p.x/spacing+0.5) * spacing; + } } if ( grid.Vert.Enable ) { - if ( grid.Vert.Division > 0 ) + if ( grid.Vert.Division > 0 ) { spacing = grid.Vert.Spacing / grid.Vert.Division; - else + } else { spacing = grid.Vert.Spacing; - if (spacing > 0.001) + } + if (spacing > 0.001) { p.y = floor(p.y/spacing+0.5) * spacing; + } } REORIGIN1( p, grid.Angle, grid.Orig ); *pos = p; InfoPos( p ); + return TRUE; +} + +EXPORT BOOL_T SnapPosAngle( coOrd * pos, ANGLE_T * angle ) +{ + if ( SnapPos( pos ) ) { + *angle = grid.Angle; + return TRUE; + } + return FALSE; } -static void DrawASnapGrid( gridHVData * gridP, drawCmd_p d, coOrd size, BOOL_T drawDivisions ) +static void DrawASnapGrid( gridHVData * gridP, drawCmd_p d, coOrd size, + BOOL_T drawDivisions ) { - if (gridP->Horz.Spacing <= 0.0 && gridP->Vert.Spacing <= 0.0) + if (gridP->Horz.Spacing <= 0.0 && gridP->Vert.Spacing <= 0.0) { return; - if (gridP->Show == FALSE) + } + if (gridP->Show == FALSE) { return; + } DrawGrid( d, &size, - gridP->Horz.Spacing, gridP->Vert.Spacing, - drawDivisions?gridP->Horz.Division:0, - drawDivisions?gridP->Vert.Division:0, - gridP->Orig, gridP->Angle, snapGridColor, TRUE ); + gridP->Horz.Spacing, gridP->Vert.Spacing, + drawDivisions?gridP->Horz.Division:0, + drawDivisions?gridP->Vert.Division:0, + gridP->Orig, gridP->Angle, snapGridColor, TRUE ); } @@ -498,8 +514,6 @@ static wWin_p gridW; static wMenu_p snapGridPopupM; static wButton_p snapGridEnable_b; static wButton_p snapGridShow_b; -EXPORT wMenuToggle_p snapGridEnableMI; -EXPORT wMenuToggle_p snapGridShowMI; static gridHVData oldGrid; @@ -513,7 +527,7 @@ static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 }; static paramFloatRange_t r0_360 = { 0.0, 360.0, 80 }; static char *gridLabels[] = { "", NULL }; static paramData_t gridPLs[] = { - { PD_MESSAGE, N_("Horz"), NULL, 0, (void*)60 }, + { PD_MESSAGE, N_("Horz"), NULL, 0, I2VP(60) }, #define I_HORZSPACING (1) { PD_FLOAT, &grid.Horz.Spacing, "horzspacing", PDO_DIM, &r0_999999, N_("Spacing") }, #define I_HORZDIVISION (2) @@ -521,7 +535,7 @@ static paramData_t gridPLs[] = { #define I_HORZENABLE (3) #define gridHorzEnableT ((wChoice_p)gridPLs[I_HORZENABLE].control) { PD_TOGGLE, &grid.Horz.Enable, "horzenable", 0, gridLabels, N_("Enable"), BC_HORZ|BC_NOBORDER }, - { PD_MESSAGE, N_("Vert"), NULL, PDO_DLGNEWCOLUMN|PDO_DLGWIDE, (void*)60}, + { PD_MESSAGE, N_("Vert"), NULL, PDO_DLGNEWCOLUMN|PDO_DLGWIDE, I2VP(60) }, #define I_VERTSPACING (5) { PD_FLOAT, &grid.Vert.Spacing, "vertspacing", PDO_DIM, &r0_999999, NULL }, #define I_VERTDIVISION (6) @@ -537,28 +551,29 @@ static paramData_t gridPLs[] = { { PD_FLOAT, &grid.Angle, "origa", PDO_ANGLE, &r0_360, N_("A") }, #define I_SHOW (11) #define gridShowT ((wChoice_p)gridPLs[I_SHOW].control) - { PD_TOGGLE, &grid.Show, "show", PDO_DLGIGNORELABELWIDTH, gridLabels, N_("Show"), BC_HORZ|BC_NOBORDER } }; + { PD_TOGGLE, &grid.Show, "show", PDO_DLGIGNORELABELWIDTH, gridLabels, N_("Show"), BC_HORZ|BC_NOBORDER } +}; -static paramGroup_t gridPG = { "grid", PGO_RECORD, gridPLs, sizeof gridPLs/sizeof gridPLs[0] }; +static paramGroup_t gridPG = { "grid", PGO_RECORD, gridPLs, COUNT( gridPLs ) }; static BOOL_T GridChanged( void ) { return - grid.Horz.Spacing != oldGrid.Horz.Spacing || - grid.Horz.Division != oldGrid.Horz.Division || - grid.Vert.Spacing != oldGrid.Vert.Spacing || - grid.Vert.Division != oldGrid.Vert.Division || - grid.Orig.x != oldGrid.Orig.x || - grid.Orig.y != oldGrid.Orig.y || - grid.Angle != oldGrid.Angle || - grid.Horz.Division != oldGrid.Horz.Division; + grid.Horz.Spacing != oldGrid.Horz.Spacing || + grid.Horz.Division != oldGrid.Horz.Division || + grid.Vert.Spacing != oldGrid.Vert.Spacing || + grid.Vert.Division != oldGrid.Vert.Division || + grid.Orig.x != oldGrid.Orig.x || + grid.Orig.y != oldGrid.Orig.y || + grid.Angle != oldGrid.Angle || + grid.Horz.Division != oldGrid.Horz.Division; } static void RedrawGrid( void ) { if (grid.Show != oldGrid.Show || - GridChanged() ) { + GridChanged() ) { wDrawDelayUpdate( tempD.d, TRUE ); MainRedraw(); // RedrawGrid wDrawDelayUpdate( tempD.d, FALSE ); @@ -566,25 +581,28 @@ static void RedrawGrid( void ) } -static void GridOk( void * junk ) +static void GridOk( void * unused ) { long changes; ParamLoadData( &gridPG ); if ( ( grid.Horz.Enable && grid.Horz.Spacing <= 0.0) || - ( grid.Vert.Enable && grid.Vert.Spacing <= 0.0) ) { + ( grid.Vert.Enable && grid.Vert.Spacing <= 0.0) ) { NoticeMessage( MSG_GRID_ENABLE_SPACE_GTR_0, _("Ok"), NULL ); return; } if ( grid.Horz.Spacing <= 0.0 && - grid.Vert.Spacing <= 0.0 ) + grid.Vert.Spacing <= 0.0 ) { grid.Show = FALSE; + } changes = 0; - if ( GridChanged() ) + if ( GridChanged() ) { changes |= CHANGE_GRID; - if (grid.Show != oldGrid.Show || changes != 0) + } + if (grid.Show != oldGrid.Show || changes != 0) { changes |= CHANGE_MAIN; + } DoChangeNotification( changes ); oldGrid = grid; Reset(); @@ -596,44 +614,55 @@ static void GridButtonUpdate( long mode0 ) long mode1; mode1 = 0; if ( grid.Show && - grid.Horz.Spacing <= 0.0 && - grid.Vert.Spacing <= 0.0 ) { + grid.Horz.Spacing <= 0.0 && + grid.Vert.Spacing <= 0.0 ) { grid.Show = FALSE; - if ( mode0&CHK_SHOW ) + if ( mode0&CHK_SHOW ) { ErrorMessage( MSG_GRID_SHOW_SPACE_GTR_0 ); + } } if ( grid.Horz.Enable && - grid.Horz.Spacing <= 0.0 ) { + grid.Horz.Spacing <= 0.0 ) { grid.Horz.Enable = FALSE; - if ( mode0&CHK_HENABLE ) + if ( mode0&CHK_HENABLE ) { mode1 |= CHK_HENABLE; + } } if ( grid.Vert.Enable && - grid.Vert.Spacing <= 0.0 ) { + grid.Vert.Spacing <= 0.0 ) { grid.Vert.Enable = FALSE; - if ( mode0&CHK_VENABLE ) + if ( mode0&CHK_VENABLE ) { mode1 |= CHK_VENABLE; + } } if ( mode1 && - (mode0&(CHK_HENABLE|CHK_VENABLE)) == mode1 ) + (mode0&(CHK_HENABLE|CHK_VENABLE)) == mode1 ) { ErrorMessage( MSG_GRID_ENABLE_SPACE_GTR_0 ); + } if ( gridShowT && - grid.Show != (wToggleGetValue( gridShowT ) != 0) ) + grid.Show != (wToggleGetValue( gridShowT ) != 0) ) { ParamLoadControl( &gridPG, I_SHOW ); + } if ( gridHorzEnableT && - grid.Horz.Enable != (wToggleGetValue( gridHorzEnableT ) != 0) ) + grid.Horz.Enable != (wToggleGetValue( gridHorzEnableT ) != 0) ) { ParamLoadControl( &gridPG, I_HORZENABLE ); + } if ( gridVertEnableT && - grid.Vert.Enable != (wToggleGetValue( gridVertEnableT ) != 0) ) + grid.Vert.Enable != (wToggleGetValue( gridVertEnableT ) != 0) ) { ParamLoadControl( &gridPG, I_VERTENABLE ); - if (snapGridEnable_b) + } + if (snapGridEnable_b) { wButtonSetBusy( snapGridEnable_b, grid.Horz.Enable||grid.Vert.Enable ); - if (snapGridShow_b) + } + if (snapGridShow_b) { wButtonSetBusy( snapGridShow_b, (wBool_t)grid.Show ); - if (snapGridEnableMI) + } + if (snapGridEnableMI) { wMenuToggleSet( snapGridEnableMI, grid.Horz.Enable||grid.Vert.Enable ); - if (snapGridShowMI) + } + if (snapGridShowMI) { wMenuToggleSet( snapGridShowMI, (wBool_t)grid.Show ); + } if ( mode0&CHK_SHOW ) { RedrawGrid(); @@ -644,19 +673,21 @@ static void GridButtonUpdate( long mode0 ) static void GridChange( long changes ) { - if ( (changes&(CHANGE_GRID|CHANGE_UNITS))==0 ) + if ( (changes&(CHANGE_GRID|CHANGE_UNITS))==0 ) { return; + } GridButtonUpdate( 0 ); - if (gridW==NULL || !wWinIsVisible(gridW)) + if (gridW==NULL || !wWinIsVisible(gridW)) { return; + } ParamLoadControls( &gridPG ); } static void GridDlgUpdate( - paramGroup_p pg, - int inx, - void * valueP ) + paramGroup_p pg, + int inx, + void * valueP ) { switch ( inx ) { case I_HORZENABLE: @@ -678,7 +709,7 @@ static void GridDlgUpdate( static void SnapGridRotate( void * pangle ) { - ANGLE_T angle = (ANGLE_T)(long)pangle; + ANGLE_T angle = (ANGLE_T)VP2L(pangle); wDrawDelayUpdate( tempD.d, TRUE ); grid.Orig = cmdMenuPos; grid.Angle += angle/1000; @@ -690,19 +721,17 @@ static void SnapGridRotate( void * pangle ) EXPORT STATUS_T CmdGrid( - wAction_t action, - coOrd pos ) + wAction_t action, + coOrd pos ) { STATUS_T rc; -#ifdef TIMEDRAWGRID - unsigned long time0, time1, time2; -#endif switch (action) { case C_START: if (gridW == NULL) { - gridW = ParamCreateDialog( &gridPG, MakeWindowTitle(_("Snap Grid")), _("Ok"), GridOk, (paramActionCancelProc)Reset, TRUE, NULL, 0, GridDlgUpdate ); + gridW = ParamCreateDialog( &gridPG, MakeWindowTitle(_("Snap Grid")), _("Ok"), + GridOk, (paramActionCancelProc)Reset, TRUE, NULL, 0, GridDlgUpdate ); } oldGrid = grid; ParamLoadControls( &gridPG ); @@ -724,10 +753,11 @@ EXPORT STATUS_T CmdGrid( case C_CONFIRM: if (GridChanged() || - grid.Show != oldGrid.Show ) + grid.Show != oldGrid.Show ) { return C_ERROR; - else + } else { return C_CONTINUE; + } case C_DOWN: case C_RDOWN: @@ -741,20 +771,10 @@ EXPORT STATUS_T CmdGrid( return rc; case C_UP: case C_RUP: -#ifdef TIMEDRAWGRID - time0 = wGetTimer(); -#endif -#ifdef TIMEDRAWGRID - time1 = wGetTimer(); -#endif rc = GridAction( action, pos, &grid.Orig, &grid.Angle ); ParamLoadControls( &gridPG ); RedrawGrid(); oldGrid = grid; -#ifdef TIMEDRAWGRID - time2 = wGetTimer(); - InfoMessage( "undraw %ld, draw %ld", (long)(time1-time0), (long)(time2-time1) ); -#endif return rc; case C_CMDMENU: @@ -768,7 +788,7 @@ EXPORT STATUS_T CmdGrid( /** - * Initialize the user interface for the grid functions. + * Initialize the user interface for the grid functions. * * \param menu IN pulldown to which the grid function will be added * \return created command button @@ -778,38 +798,46 @@ EXPORT wIndex_t InitGrid( wMenu_p menu ) { ParamRegister( &gridPG ); RegisterChangeNotification( GridChange ); - if ( grid.Horz.Enable && grid.Horz.Spacing <= 0.0 ) + if ( grid.Horz.Enable && grid.Horz.Spacing <= 0.0 ) { grid.Horz.Enable = FALSE; - if ( grid.Vert.Enable && grid.Vert.Spacing <= 0.0 ) + } + if ( grid.Vert.Enable && grid.Vert.Spacing <= 0.0 ) { grid.Vert.Enable = FALSE; + } if ( grid.Horz.Spacing <= 0.0 && - grid.Vert.Spacing <= 0.0 ) + grid.Vert.Spacing <= 0.0 ) { grid.Show = FALSE; + } snapGridPopupM = MenuRegister( "Snap Grid Rotate" ); AddRotateMenu( snapGridPopupM, SnapGridRotate ); GridButtonUpdate( 0 ); - return InitCommand( menu, CmdGrid, N_("Change Grid..."), NULL, LEVEL0, IC_CMDMENU, ACCL_GRIDW ); + log_timedrawgrid = LogFindIndex( "timedrawgrid" ); + return AddMenuButton( menu, CmdGrid, "cmdChange Grid...", N_("Change Grid..."), + NULL, LEVEL0, IC_CMDMENU, ACCL_GRIDW, NULL ); } -EXPORT void SnapGridEnable( void ) +EXPORT void SnapGridEnable( void * unused ) { grid.Vert.Enable = grid.Horz.Enable = !( grid.Vert.Enable || grid.Horz.Enable ); GridButtonUpdate( (CHK_HENABLE|CHK_VENABLE) ); } -EXPORT void SnapGridShow( void ) +EXPORT void SnapGridShow( void * unused ) { grid.Show = !grid.Show; GridButtonUpdate( CHK_SHOW ); } -#include "bitmaps/snapcurs.xbm" -#include "bitmaps/snapvis.xbm" +#include "bitmaps/snap-curs.xpm3" +#include "bitmaps/snap-grid.xpm3" EXPORT void InitSnapGridButtons( void ) { - snapGridEnable_b = AddToolbarButton( "cmdGridEnable", wIconCreateBitMap(snapcurs_width, snapcurs_height, snapcurs_bits, wDrawColorBlack), 0, (addButtonCallBack_t)SnapGridEnable, NULL ); - snapGridShow_b = AddToolbarButton( "cmdGridShow", wIconCreateBitMap(snapvis_width, snapvis_height, snapvis_bits, wDrawColorBlack), IC_MODETRAIN_TOO, (addButtonCallBack_t)SnapGridShow, NULL ); + snapGridEnable_b = AddToolbarButton( "cmdGridEnable", + wIconCreatePixMap(snap_curs_xpm3[iconSize] ), 0, SnapGridEnable, NULL ); + snapGridShow_b = AddToolbarButton( "cmdGridShow", + wIconCreatePixMap(snap_grid_xpm3[iconSize] ), IC_MODETRAIN_TOO, SnapGridShow, + NULL ); } |