mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-05 20:45:49 +01:00
Hide crosshairs once drag leaves the initial cell UNLESS a tile is
being dragged
This commit is contained in:
parent
b77d529099
commit
e42dd971cb
1 changed files with 34 additions and 23 deletions
|
@ -41,10 +41,11 @@ static void setLimitsFrom( const BoardCtxt* board, BdHintLimits* limits );
|
|||
#endif
|
||||
|
||||
#ifdef XWFEATURE_CROSSHAIRS
|
||||
static XP_Bool crosshairs_set( BoardCtxt* board, XP_S16 col, XP_S16 row );
|
||||
static XP_Bool crosshairs_set( BoardCtxt* board, XP_S16 col, XP_S16 row,
|
||||
XP_Bool clearOnMove );
|
||||
static void crosshairs_clear( BoardCtxt* board );
|
||||
#else
|
||||
# define crosshairs_set( board, col, row ) XP_FALSE;
|
||||
# define crosshairs_set( board, col, row, com ) XP_FALSE;
|
||||
# define crosshairs_clear( board )
|
||||
#endif
|
||||
|
||||
|
@ -96,7 +97,7 @@ ddStartBoard( BoardCtxt* board, XP_U16 xx, XP_U16 yy )
|
|||
XP_ASSERT( found );
|
||||
#ifdef XWFEATURE_CROSSHAIRS
|
||||
if ( !board->hideCrosshairs ) {
|
||||
(void)crosshairs_set( board, col, row );
|
||||
(void)crosshairs_set( board, col, row, XP_FALSE );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -493,7 +494,8 @@ dragDropContinueImpl( BoardCtxt* board, XP_U16 xx, XP_U16 yy,
|
|||
#ifdef XWFEATURE_CROSSHAIRS
|
||||
if ( !board->hideCrosshairs ) {
|
||||
draw = crosshairs_set( board, newInfo.u.board.col,
|
||||
newInfo.u.board.row );
|
||||
newInfo.u.board.row,
|
||||
DT_TILE != ds->dtype );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -693,29 +695,38 @@ dragDropInCrosshairs( const BoardCtxt* board, XP_U16 col, XP_U16 row,
|
|||
} /* dragDropInCrosshairs */
|
||||
|
||||
static XP_Bool
|
||||
crosshairs_set( BoardCtxt* board, XP_S16 col, XP_S16 row )
|
||||
crosshairs_set( BoardCtxt* board, XP_S16 col, XP_S16 row, XP_Bool clearOnMove )
|
||||
{
|
||||
XP_Bool changed = XP_FALSE;
|
||||
XP_Bool changed;
|
||||
DragState* ds = &board->dragState;
|
||||
if ( ds->crosshairs.col != col ) {
|
||||
if ( ds->crosshairs.col >= 0 ) {
|
||||
invalCol( board, ds->crosshairs.col );
|
||||
}
|
||||
if ( col >= 0 ) {
|
||||
invalCol( board, col );
|
||||
}
|
||||
ds->crosshairs.col = col;
|
||||
|
||||
XP_Bool colMoving = ds->crosshairs.col != col;
|
||||
XP_Bool rowMoving = ds->crosshairs.row != row;
|
||||
if ( clearOnMove && (colMoving || rowMoving) ) {
|
||||
changed = XP_TRUE;
|
||||
}
|
||||
if ( ds->crosshairs.row != row ) {
|
||||
if ( ds->crosshairs.row >= 0 ) {
|
||||
invalRow( board, ds->crosshairs.row );
|
||||
crosshairs_clear( board );
|
||||
} else {
|
||||
changed = XP_FALSE;
|
||||
if ( colMoving ) {
|
||||
if ( ds->crosshairs.col >= 0 ) {
|
||||
invalCol( board, ds->crosshairs.col );
|
||||
}
|
||||
if ( col >= 0 ) {
|
||||
invalCol( board, col );
|
||||
}
|
||||
ds->crosshairs.col = col;
|
||||
changed = XP_TRUE;
|
||||
}
|
||||
if ( row >= 0 ) {
|
||||
invalRow( board, row );
|
||||
if ( rowMoving ) {
|
||||
if ( ds->crosshairs.row >= 0 ) {
|
||||
invalRow( board, ds->crosshairs.row );
|
||||
}
|
||||
if ( row >= 0 ) {
|
||||
invalRow( board, row );
|
||||
}
|
||||
ds->crosshairs.row = row;
|
||||
changed = XP_TRUE;
|
||||
}
|
||||
ds->crosshairs.row = row;
|
||||
changed = XP_TRUE;
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
@ -723,7 +734,7 @@ crosshairs_set( BoardCtxt* board, XP_S16 col, XP_S16 row )
|
|||
static void
|
||||
crosshairs_clear( BoardCtxt* board )
|
||||
{
|
||||
crosshairs_set( board, -1, -1 );
|
||||
crosshairs_set( board, -1, -1, XP_FALSE );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue