adding raster op hook to graphics context (10.4 only, partial XOR/INVERT support)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -37,6 +37,13 @@
|
|||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
|
#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
|
||||||
typedef float CGFloat;
|
typedef float CGFloat;
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef wxMAC_USE_CORE_GRAPHICS_BLEND_MODES
|
||||||
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
|
||||||
|
#define wxMAC_USE_CORE_GRAPHICS_BLEND_MODES 1
|
||||||
|
#else
|
||||||
|
#define wxMAC_USE_CORE_GRAPHICS_BLEND_MODES 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// constants
|
// constants
|
||||||
@@ -161,7 +168,7 @@ public :
|
|||||||
void StrokeLineSegments( CGContextRef ctxRef , const CGPoint pts[] , size_t count )
|
void StrokeLineSegments( CGContextRef ctxRef , const CGPoint pts[] , size_t count )
|
||||||
{
|
{
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
|
||||||
if ( UMAGetSystemVersion() >= 0x1040 )
|
if ( CGContextStrokeLineSegments!=NULL )
|
||||||
{
|
{
|
||||||
CGContextStrokeLineSegments( ctxRef , pts , count );
|
CGContextStrokeLineSegments( ctxRef , pts , count );
|
||||||
}
|
}
|
||||||
@@ -457,7 +464,12 @@ void wxMacCoreGraphicsPenData::Apply( wxGraphicsContext* context )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CGContextSetStrokeColorWithColor( cg , m_color );
|
if ( context->GetLogicalFunction() == wxINVERT || context->GetLogicalFunction() == wxXOR )
|
||||||
|
{
|
||||||
|
CGContextSetRGBStrokeColor( cg , 1.0, 1.0 , 1.0, 1.0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CGContextSetStrokeColorWithColor( cg , m_color );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1133,6 +1145,7 @@ public:
|
|||||||
|
|
||||||
virtual void * GetNativeContext();
|
virtual void * GetNativeContext();
|
||||||
|
|
||||||
|
bool SetLogicalFunction( int function );
|
||||||
//
|
//
|
||||||
// transformation
|
// transformation
|
||||||
//
|
//
|
||||||
@@ -1310,6 +1323,41 @@ void wxMacCoreGraphicsContext::EnsureIsValid()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxMacCoreGraphicsContext::SetLogicalFunction( int function )
|
||||||
|
{
|
||||||
|
if (m_logicalFunction == function)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
EnsureIsValid();
|
||||||
|
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
|
if ( function == wxCOPY )
|
||||||
|
{
|
||||||
|
retval = true;
|
||||||
|
#if wxMAC_USE_CORE_GRAPHICS_BLEND_MODES
|
||||||
|
if ( CGContextSetBlendMode != NULL )
|
||||||
|
{
|
||||||
|
CGContextSetBlendMode( m_cgContext, kCGBlendModeNormal );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if ( function == wxINVERT || function == wxXOR )
|
||||||
|
{
|
||||||
|
#if wxMAC_USE_CORE_GRAPHICS_BLEND_MODES
|
||||||
|
if ( CGContextSetBlendMode != NULL )
|
||||||
|
{
|
||||||
|
// change color to white
|
||||||
|
CGContextSetBlendMode( m_cgContext, kCGBlendModeExclusion );
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retval)
|
||||||
|
m_logicalFunction = function;
|
||||||
|
return retval ;
|
||||||
|
}
|
||||||
|
|
||||||
void wxMacCoreGraphicsContext::Clip( const wxRegion ®ion )
|
void wxMacCoreGraphicsContext::Clip( const wxRegion ®ion )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user