]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dcbase.cpp
don't pass 0 time_t to Borland localtime(), it crashes (bug 1704438); also check...
[wxWidgets.git] / src / common / dcbase.cpp
index 1475923953e7e33d1cd7aa74fc276bdb5d394b75..b17d055a636aa8f3ab876d0a2b1cbc086a57a516 100644 (file)
@@ -78,6 +78,42 @@ void wxDCBase::DoDrawCheckMark(wxCoord x1, wxCoord y1,
     CalcBoundingBox(x2, y2);
 }
 
+// ----------------------------------------------------------------------------
+// stubs for functions not implemented in all ports
+// ----------------------------------------------------------------------------
+
+bool
+wxDCBase::DoStretchBlit(wxCoord xdest, wxCoord ydest,
+                        wxCoord dstWidth, wxCoord dstHeight,
+                        wxDC *source,
+                        wxCoord xsrc, wxCoord ysrc,
+                        wxCoord srcWidth, wxCoord srcHeight,
+                        int rop,
+                        bool useMask,
+                        wxCoord xsrcMask,
+                        wxCoord ysrcMask)
+{
+    wxCHECK_MSG( srcWidth && srcHeight && dstWidth && dstHeight, false,
+                 _T("invalid blit size") );
+
+    // emulate the stretching by modifying the DC scale
+    double xscale = (double)srcWidth/dstWidth,
+           yscale = (double)srcHeight/dstHeight;
+
+    double xscaleOld, yscaleOld;
+    GetUserScale(&xscaleOld, &yscaleOld);
+    SetUserScale(xscaleOld/xscale, yscaleOld/yscale);
+
+    bool rc = DoBlit(wxCoord(xdest*xscale), wxCoord(ydest*yscale),
+                     wxCoord(dstWidth*xscale), wxCoord(dstHeight*yscale),
+                     source,
+                     xsrc, ysrc, rop, useMask, xsrcMask, ysrcMask);
+
+    SetUserScale(xscaleOld, yscaleOld);
+
+    return rc;
+}
+
 // ----------------------------------------------------------------------------
 // line/polygons
 // ----------------------------------------------------------------------------
@@ -606,9 +642,9 @@ void wxDCBase::DrawLabel(const wxString& text,
 
     // split the string into lines and draw each of them separately
     wxString curLine;
-    for ( const wxChar *pc = text; ; pc++ )
+    for ( wxString::const_iterator pc = text.begin(); ; ++pc )
     {
-        if ( *pc == _T('\n') || *pc == _T('\0') )
+        if ( *pc == _T('\n') || pc == text.end() )
         {
             int xRealStart = x; // init it here to avoid compielr warnings
 
@@ -646,14 +682,14 @@ void wxDCBase::DrawLabel(const wxString& text,
                 endUnderscore += xRealStart;
             }
 
-            if ( *pc == _T('\0') )
+            if ( pc == text.end() )
                 break;
 
             curLine.clear();
         }
         else // not end of line
         {
-            if ( pc - text.c_str() == indexAccel )
+            if ( pc - text.begin() == indexAccel )
             {
                 // remeber to draw underscore here
                 GetTextExtent(curLine, &startUnderscore, NULL);
@@ -698,6 +734,7 @@ void wxDCBase::DoGradientFillLinear(const wxRect& rect,
 {
     // save old pen
     wxPen oldPen = m_pen;
+    wxBrush oldBrush = m_brush;
 
     wxUint8 nR1 = initialColour.Red();
     wxUint8 nG1 = initialColour.Green();
@@ -733,7 +770,7 @@ void wxDCBase::DoGradientFillLinear(const wxRect& rect,
             else
                 nB = nB1 + (nB2-nB1)*(w-x)/w;
 
-           wxColour colour(nR,nG,nB);
+            wxColour colour(nR,nG,nB);
             SetPen(wxPen(colour, 1, wxSOLID));
             SetBrush(wxBrush(colour));
             if(nDirection == wxEAST)
@@ -770,7 +807,7 @@ void wxDCBase::DoGradientFillLinear(const wxRect& rect,
             else
                 nB = nB1 + (nB2-nB1)*(w-y)/w;
 
-           wxColour colour(nR,nG,nB);
+            wxColour colour(nR,nG,nB);
             SetPen(wxPen(colour, 1, wxSOLID));
             SetBrush(wxBrush(colour));
             if(nDirection == wxNORTH)
@@ -783,6 +820,7 @@ void wxDCBase::DoGradientFillLinear(const wxRect& rect,
     }
 
     SetPen(oldPen);
+    SetBrush(oldBrush);
 }
 
 void wxDCBase::DoGradientFillConcentric(const wxRect& rect,
@@ -1154,4 +1192,4 @@ void wxDCBase::CalculateEllipticPoints( wxList* points,
     } // not iUseAngles
 } // CalculateEllipticPoints
 
-#endif
+#endif // __WXWINCE__