]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxCOMPOSITION_INVALID mode and use it to simplify the code.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Jul 2011 10:29:11 +0000 (10:29 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Jul 2011 10:29:11 +0000 (10:29 +0000)
Having an invalid element in wxCompositionMode enum allows to directly return
it from TranslateRasterOp() function instead of needing a separate bool
parameter to indicate that a ROP couldn't be translated.

This also incidentally fixes warnings about possibly uninitialized variables
in optimized g++ builds.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68127 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/graphics.h
interface/wx/graphics.h
src/common/dcgraph.cpp

index d30fd3b7c10845be7f8dd0c7a6d10df87514d8c8..2581044d670372bb78ee8971e6aaa99f1dad8258 100644 (file)
@@ -49,6 +49,7 @@ enum wxCompositionMode
     // classic Porter-Duff compositions
     // http://keithp.com/~keithp/porterduff/p253-porter.pdf
 
+    wxCOMPOSITION_INVALID = -1, /* indicates invalid/unsupported mode */
     wxCOMPOSITION_CLEAR, /* R = 0 */
     wxCOMPOSITION_SOURCE, /* R = S */
     wxCOMPOSITION_OVER, /* R = S + D*(1 - Sa) */
index 55361daecc7b902f01d7af3223cbbeb6e9850585..f43a420e9e233ad7d786a3f332eaa8ebec34aaab 100644 (file)
@@ -241,6 +241,14 @@ enum wxInterpolationQuality
 */
 enum wxCompositionMode
 {
+    /**
+        Indicates invalid or unsupported composition mode.
+
+        This value can't be passed to wxGraphicsContext::SetCompositionMode().
+
+        @since 2.9.2
+     */
+    wxCOMPOSITION_INVALID = -1,
     wxCOMPOSITION_CLEAR, /**< @e R = 0 */
     wxCOMPOSITION_SOURCE, /**< @e R = S */
     wxCOMPOSITION_OVER, /**< @e R = @e S + @e D*(1 - @e Sa) */
index f91a78fd6fc400048af6dea1bf4c86312c44cfd0..8cf95f3f9b3e76ec65d2fe4d9ef8d5dec6c8f61c 100644 (file)
@@ -53,27 +53,26 @@ static inline double DegToRad(double deg)
     return (deg * M_PI) / 180.0;
 }
 
-static bool TranslateRasterOp(wxRasterOperationMode function, wxCompositionMode *op)
+static wxCompositionMode TranslateRasterOp(wxRasterOperationMode function)
 {
     switch ( function )
     {
         case wxCOPY: // src
             // since we are supporting alpha, _OVER is closer to the intention than _SOURCE
             // since the latter would overwrite even when alpha is not set to opaque
-            *op = wxCOMPOSITION_OVER; 
-            break;
+            return wxCOMPOSITION_OVER;
+
         case wxOR:         // src OR dst
-            *op = wxCOMPOSITION_ADD;
-            break;
+            return wxCOMPOSITION_ADD;
+
         case wxNO_OP:      // dst
-            *op = wxCOMPOSITION_DEST; // ignore the source
-            break;
+            return wxCOMPOSITION_DEST; // ignore the source
+
         case wxCLEAR:      // 0
-            *op = wxCOMPOSITION_CLEAR;// clear dst
-            break;
+            return wxCOMPOSITION_CLEAR;// clear dst
+
         case wxXOR:        // src XOR dst
-            *op = wxCOMPOSITION_XOR;
-            break;
+            return wxCOMPOSITION_XOR;
 
         case wxAND:        // src AND dst
         case wxAND_INVERT: // (NOT src) AND dst
@@ -86,10 +85,10 @@ static bool TranslateRasterOp(wxRasterOperationMode function, wxCompositionMode
         case wxOR_REVERSE: // src OR (NOT dst)
         case wxSET:        // 1
         case wxSRC_INVERT: // NOT src
-        default:
-            return false;
+            break;
     }
-    return true;
+
+    return wxCOMPOSITION_INVALID;
 }
 
 //-----------------------------------------------------------------------------
@@ -502,8 +501,8 @@ void wxGCDCImpl::SetLogicalFunction( wxRasterOperationMode function )
 
     m_logicalFunction = function;
 
-    wxCompositionMode mode;
-    m_logicalFunctionSupported = TranslateRasterOp( function, &mode);
+    wxCompositionMode mode = TranslateRasterOp( function );
+    m_logicalFunctionSupported = mode != wxCOMPOSITION_INVALID;
     if (m_logicalFunctionSupported)
         m_logicalFunctionSupported = m_graphicContext->SetCompositionMode(mode);
 
@@ -874,8 +873,8 @@ bool wxGCDCImpl::DoStretchBlit(
     if ( logical_func == wxNO_OP )
         return true;
 
-    wxCompositionMode mode;
-    if ( !TranslateRasterOp(logical_func, &mode) )
+    wxCompositionMode mode = TranslateRasterOp(logical_func);
+    if ( mode == wxCOMPOSITION_INVALID )
     {
         wxFAIL_MSG( wxT("Blitting is not supported with this logical operation.") );
         return false;