summaryrefslogtreecommitdiff
path: root/app/bin/csnap.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/csnap.c')
-rw-r--r--app/bin/csnap.c440
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 );
}