mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-28 07:58:08 +01:00
Add ability to scroll dialogs by dragging. Works only on
touchscreens, and has no sense of momentum.
This commit is contained in:
parent
eb5ee8431b
commit
e4977e2c5f
2 changed files with 36 additions and 7 deletions
|
@ -33,22 +33,23 @@
|
||||||
|
|
||||||
static XP_Bool ceDoDlgScroll( CeDlgHdr* dlgHdr, WPARAM wParam );
|
static XP_Bool ceDoDlgScroll( CeDlgHdr* dlgHdr, WPARAM wParam );
|
||||||
static void ceDoDlgFocusScroll( CeDlgHdr* dlgHdr, HWND nextCtrl );
|
static void ceDoDlgFocusScroll( CeDlgHdr* dlgHdr, HWND nextCtrl );
|
||||||
|
static void adjustScrollPos( HWND hDlg, XP_S16 vertChange );
|
||||||
|
|
||||||
void
|
void
|
||||||
ceSetDlgItemText( HWND hDlg, XP_U16 id, const XP_UCHAR* buf )
|
ceSetDlgItemText( HWND hDlg, XP_U16 id, const XP_UCHAR* str )
|
||||||
{
|
{
|
||||||
wchar_t widebuf[BUF_SIZE];
|
wchar_t widebuf[BUF_SIZE];
|
||||||
XP_U16 len;
|
XP_U16 len;
|
||||||
|
|
||||||
XP_ASSERT( buf != NULL );
|
XP_ASSERT( str != NULL );
|
||||||
|
|
||||||
len = (XP_U16)XP_STRLEN( buf );
|
len = (XP_U16)XP_STRLEN( str );
|
||||||
|
|
||||||
if ( len >= BUF_SIZE ) {
|
if ( len >= VSIZE(widebuf) ) {
|
||||||
len = BUF_SIZE - 1;
|
len = VSIZE(widebuf) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, buf, len, widebuf, len );
|
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, str, len, widebuf, len );
|
||||||
widebuf[len] = 0;
|
widebuf[len] = 0;
|
||||||
SendDlgItemMessage( hDlg, id, WM_SETTEXT, 0, (long)widebuf );
|
SendDlgItemMessage( hDlg, id, WM_SETTEXT, 0, (long)widebuf );
|
||||||
} /* ceSetDlgItemText */
|
} /* ceSetDlgItemText */
|
||||||
|
@ -448,6 +449,18 @@ editHasFocus( void )
|
||||||
} /* editHasFocus */
|
} /* editHasFocus */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
scrollForMove( CeDlgHdr* dlgHdr, XP_U16 newY )
|
||||||
|
{
|
||||||
|
if ( dlgHdr->penDown ) {
|
||||||
|
XP_LOGF( "%s(%d)", __func__, newY );
|
||||||
|
XP_S16 vertChange = dlgHdr->prevY - newY;
|
||||||
|
dlgHdr->prevY = newY;
|
||||||
|
adjustScrollPos( dlgHdr->hDlg, vertChange );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XP_Bool
|
XP_Bool
|
||||||
ceDoDlgHandle( CeDlgHdr* dlgHdr, UINT message, WPARAM wParam, LPARAM lParam )
|
ceDoDlgHandle( CeDlgHdr* dlgHdr, UINT message, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
|
@ -473,6 +486,20 @@ ceDoDlgHandle( CeDlgHdr* dlgHdr, UINT message, WPARAM wParam, LPARAM lParam )
|
||||||
handled = ceDoDlgScroll( dlgHdr, wParam );
|
handled = ceDoDlgScroll( dlgHdr, wParam );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
dlgHdr->penDown = XP_TRUE;
|
||||||
|
dlgHdr->prevY = HIWORD(lParam);
|
||||||
|
handled = XP_TRUE;
|
||||||
|
break;
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
scrollForMove( dlgHdr, HIWORD(lParam) );
|
||||||
|
handled = XP_TRUE;
|
||||||
|
break;
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
dlgHdr->penDown = XP_FALSE;
|
||||||
|
handled = XP_TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
if ( BN_SETFOCUS == HIWORD(wParam) ) {
|
if ( BN_SETFOCUS == HIWORD(wParam) ) {
|
||||||
ceDoDlgFocusScroll( dlgHdr, (HWND)lParam );
|
ceDoDlgFocusScroll( dlgHdr, (HWND)lParam );
|
||||||
|
@ -483,7 +510,7 @@ ceDoDlgHandle( CeDlgHdr* dlgHdr, UINT message, WPARAM wParam, LPARAM lParam )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return handled;
|
return handled;
|
||||||
}
|
} /* ceDoDlgHandle */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setScrollPos( HWND hDlg, XP_S16 newPos )
|
setScrollPos( HWND hDlg, XP_S16 newPos )
|
||||||
|
|
|
@ -74,6 +74,8 @@ typedef struct CeDlgHdr {
|
||||||
/* Below this line is private to ceutil.c */
|
/* Below this line is private to ceutil.c */
|
||||||
DlgStateTask doWhat;
|
DlgStateTask doWhat;
|
||||||
XP_U16 nPage;
|
XP_U16 nPage;
|
||||||
|
XP_U16 prevY;
|
||||||
|
XP_Bool penDown;
|
||||||
} CeDlgHdr;
|
} CeDlgHdr;
|
||||||
void ceDlgSetup( CeDlgHdr* dlgHdr, HWND hDlg, DlgStateTask doWhat );
|
void ceDlgSetup( CeDlgHdr* dlgHdr, HWND hDlg, DlgStateTask doWhat );
|
||||||
void ceDlgComboShowHide( CeDlgHdr* dlgHdr, XP_U16 baseId );
|
void ceDlgComboShowHide( CeDlgHdr* dlgHdr, XP_U16 baseId );
|
||||||
|
|
Loading…
Add table
Reference in a new issue