Dim GAL cursor when forced but no interactive tool

This makes it clearer when a tool is active, otherwise interactive tool
effects like auto-pan can come as a surprise when the cursor is forced
to display all the time.
This commit is contained in:
John Beard 2017-03-19 06:00:21 +08:00 committed by Maciej Suminski
parent 78a5185857
commit 01c733bdb5
4 changed files with 36 additions and 7 deletions

View File

@ -969,9 +969,11 @@ void CAIRO_GAL::initCursor()
wxMemoryDC cursorShape( *cursorPixels );
const auto cColor = getCursorColor();
cursorShape.SetBackground( *wxTRANSPARENT_BRUSH );
wxColour color( cursorColor.r * cursorColor.a * 255, cursorColor.g * cursorColor.a * 255,
cursorColor.b * cursorColor.a * 255, 255 );
wxColour color( cColor.r * cColor.a * 255, cColor.g * cColor.a * 255,
cColor.b * cColor.a * 255, 255 );
wxPen pen = wxPen( color );
cursorShape.SetPen( pen );
cursorShape.Clear();
@ -983,15 +985,18 @@ void CAIRO_GAL::initCursor()
void CAIRO_GAL::blitCursor( wxMemoryDC& clientDC )
{
if( !isCursorEnabled )
if( !IsCursorEnabled() )
return;
auto p = ToScreen( cursorPosition );
clientDC.SetPen( *wxWHITE_PEN );
const auto cColor = getCursorColor();
wxColour color( cColor.r * cColor.a * 255, cColor.g * cColor.a * 255,
cColor.b * cColor.a * 255, 255 );
clientDC.SetPen( wxPen( color ) );
clientDC.DrawLine( p.x - cursorSize / 2, p.y, p.x + cursorSize / 2, p.y );
clientDC.DrawLine( p.x, p.y - cursorSize / 2, p.x, p.y + cursorSize / 2 );
}

View File

@ -377,3 +377,18 @@ VECTOR2D GAL::GetGridPoint( const VECTOR2D& aPoint ) const
const int GAL::MIN_DEPTH = -1024;
const int GAL::MAX_DEPTH = 1023;
const int GAL::GRID_DEPTH = MAX_DEPTH - 1;
COLOR4D GAL::getCursorColor() const
{
auto color = cursorColor;
// dim the cursor if it's only on because it was forced
// (this helps to provide a hint for active tools)
if( !isCursorEnabled )
{
color.a = color.a * 0.5;
}
return color;
}

View File

@ -1657,7 +1657,7 @@ void OPENGL_GAL::skipMouseEvent( wxMouseEvent& aEvent )
void OPENGL_GAL::blitCursor()
{
if( !isCursorEnabled )
if( !IsCursorEnabled() )
return;
compositor->SetBuffer( OPENGL_COMPOSITOR::DIRECT_RENDERING );
@ -1666,9 +1666,13 @@ void OPENGL_GAL::blitCursor()
VECTOR2D cursorEnd = cursorPosition + cursorSize / ( 2 * worldScale );
VECTOR2D cursorCenter = ( cursorBegin + cursorEnd ) / 2;
const COLOR4D cColor = getCursorColor();
const COLOR4D color( cColor.r * cColor.a, cColor.g * cColor.a,
cColor.b * cColor.a, 1.0 );
glDisable( GL_TEXTURE_2D );
glLineWidth( 1.0 );
glColor4d( cursorColor.r, cursorColor.g, cursorColor.b, cursorColor.a );
glColor4d( color.r, color.g, color.b, color.a );
glBegin( GL_LINES );
glVertex2d( cursorCenter.x, cursorBegin.y );

View File

@ -1055,6 +1055,11 @@ protected:
/// Depth level on which the grid is drawn
static const int GRID_DEPTH;
/**
* Gets the actual cursor color to draw
*/
COLOR4D getCursorColor() const;
// ---------------
// Settings observer interface
// ---------------