GiveFeedback support, Cursor Extension
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19439 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
7541150812
commit
da804130ba
@ -246,9 +246,10 @@ bool wxDropTarget::GetData()
|
||||
// drag request
|
||||
|
||||
wxDropSource::wxDropSource(wxWindow *win,
|
||||
const wxIcon &iconCopy,
|
||||
const wxIcon &iconMove,
|
||||
const wxIcon &iconNone)
|
||||
const wxCursor &cursorCopy,
|
||||
const wxCursor &cursorMove,
|
||||
const wxCursor &cursorStop)
|
||||
: wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
|
||||
{
|
||||
wxMacEnsureTrackingHandlersInstalled() ;
|
||||
m_window = win;
|
||||
@ -256,9 +257,10 @@ wxDropSource::wxDropSource(wxWindow *win,
|
||||
|
||||
wxDropSource::wxDropSource(wxDataObject& data,
|
||||
wxWindow *win,
|
||||
const wxIcon &iconCopy,
|
||||
const wxIcon &iconMove,
|
||||
const wxIcon &iconNone)
|
||||
const wxCursor &cursorCopy,
|
||||
const wxCursor &cursorMove,
|
||||
const wxCursor &cursorStop)
|
||||
: wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
|
||||
{
|
||||
wxMacEnsureTrackingHandlersInstalled() ;
|
||||
SetData( data );
|
||||
@ -383,6 +385,21 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
|
||||
return wxDragCopy ;
|
||||
}
|
||||
|
||||
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
|
||||
{
|
||||
const wxCursor& cursor = GetCursor(effect);
|
||||
if ( cursor.Ok() )
|
||||
{
|
||||
cursor.MacInstall() ;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool gTrackingGlobalsInstalled = false ;
|
||||
|
||||
// passing the globals via refcon is not needed by the CFM and later architectures anymore
|
||||
@ -464,19 +481,52 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
// this window is entered
|
||||
trackingGlobals->m_currentTargetWindow = win ;
|
||||
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
||||
if ( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
if ( trackingGlobals->m_currentTarget->OnEnter(
|
||||
localx , localy , wxDragCopy ) != wxDragNone )
|
||||
wxDragResult result = wxDragNone ;
|
||||
if ( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
result = trackingGlobals->m_currentTarget->OnEnter(
|
||||
localx , localy , wxDragCopy ) ;
|
||||
}
|
||||
|
||||
if ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
|
||||
{
|
||||
switch( result )
|
||||
{
|
||||
case wxDragCopy :
|
||||
{
|
||||
wxCursor cursor(wxCURSOR_COPY_ARROW) ;
|
||||
cursor.MacInstall() ;
|
||||
}
|
||||
break ;
|
||||
case wxDragMove :
|
||||
{
|
||||
wxCursor cursor(wxCURSOR_ARROW) ;
|
||||
cursor.MacInstall() ;
|
||||
}
|
||||
break ;
|
||||
case wxDragNone :
|
||||
{
|
||||
wxCursor cursor(wxCURSOR_NO_ENTRY) ;
|
||||
cursor.MacInstall() ;
|
||||
}
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( result != wxDragNone )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -246,9 +246,10 @@ bool wxDropTarget::GetData()
|
||||
// drag request
|
||||
|
||||
wxDropSource::wxDropSource(wxWindow *win,
|
||||
const wxIcon &iconCopy,
|
||||
const wxIcon &iconMove,
|
||||
const wxIcon &iconNone)
|
||||
const wxCursor &cursorCopy,
|
||||
const wxCursor &cursorMove,
|
||||
const wxCursor &cursorStop)
|
||||
: wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
|
||||
{
|
||||
wxMacEnsureTrackingHandlersInstalled() ;
|
||||
m_window = win;
|
||||
@ -256,9 +257,10 @@ wxDropSource::wxDropSource(wxWindow *win,
|
||||
|
||||
wxDropSource::wxDropSource(wxDataObject& data,
|
||||
wxWindow *win,
|
||||
const wxIcon &iconCopy,
|
||||
const wxIcon &iconMove,
|
||||
const wxIcon &iconNone)
|
||||
const wxCursor &cursorCopy,
|
||||
const wxCursor &cursorMove,
|
||||
const wxCursor &cursorStop)
|
||||
: wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
|
||||
{
|
||||
wxMacEnsureTrackingHandlersInstalled() ;
|
||||
SetData( data );
|
||||
@ -383,6 +385,21 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
|
||||
return wxDragCopy ;
|
||||
}
|
||||
|
||||
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
|
||||
{
|
||||
const wxCursor& cursor = GetCursor(effect);
|
||||
if ( cursor.Ok() )
|
||||
{
|
||||
cursor.MacInstall() ;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool gTrackingGlobalsInstalled = false ;
|
||||
|
||||
// passing the globals via refcon is not needed by the CFM and later architectures anymore
|
||||
@ -464,19 +481,52 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
|
||||
// this window is entered
|
||||
trackingGlobals->m_currentTargetWindow = win ;
|
||||
trackingGlobals->m_currentTarget = win->GetDropTarget() ;
|
||||
if ( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
if ( trackingGlobals->m_currentTarget->OnEnter(
|
||||
localx , localy , wxDragCopy ) != wxDragNone )
|
||||
wxDragResult result = wxDragNone ;
|
||||
if ( trackingGlobals->m_currentTarget )
|
||||
{
|
||||
trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
|
||||
result = trackingGlobals->m_currentTarget->OnEnter(
|
||||
localx , localy , wxDragCopy ) ;
|
||||
}
|
||||
|
||||
if ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
|
||||
{
|
||||
switch( result )
|
||||
{
|
||||
case wxDragCopy :
|
||||
{
|
||||
wxCursor cursor(wxCURSOR_COPY_ARROW) ;
|
||||
cursor.MacInstall() ;
|
||||
}
|
||||
break ;
|
||||
case wxDragMove :
|
||||
{
|
||||
wxCursor cursor(wxCURSOR_ARROW) ;
|
||||
cursor.MacInstall() ;
|
||||
}
|
||||
break ;
|
||||
case wxDragNone :
|
||||
{
|
||||
wxCursor cursor(wxCURSOR_NO_ENTRY) ;
|
||||
cursor.MacInstall() ;
|
||||
}
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( result != wxDragNone )
|
||||
{
|
||||
int x , y ;
|
||||
x = y = 0 ;
|
||||
win->MacWindowToRootWindow( &x , &y ) ;
|
||||
RgnHandle hiliteRgn = NewRgn() ;
|
||||
SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
|
||||
ShowDragHilite(theDrag, hiliteRgn, true);
|
||||
DisposeRgn( hiliteRgn ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user