void LKSurface::DrawTextClip(int x, int y, const TCHAR *text, PixelScalar width) { int len = _tcslen(text); if (len > 0) { #ifdef USE_GDI const RECT rc = {x, 0, x + width, std::numeric_limits<PixelScalar>::max()}; ::ExtTextOut(*this, x, y, ETO_CLIPPED, &rc, text, len, NULL); #else if(_pCanvas) { SubCanvas ClipCanvas(*_pCanvas, {x, 0}, {(unsigned)width, _pCanvas->GetHeight()}); ClipCanvas.DrawText(0,y, text); } #endif } }
void LKSurface::DrawText(int X, int Y, const TCHAR* lpString, RECT* ClipRect) { #ifdef USE_GDI ::ExtTextOut(*this, X, Y,ETO_CLIPPED, ClipRect, lpString, _tcslen(lpString), NULL); #else if(_pCanvas) { if(ClipRect) { SubCanvas ClipCanvas(*_pCanvas, ClipRect->GetOrigin(), ClipRect->GetSize() ); ClipCanvas.DrawText(X-ClipRect->left, Y-ClipRect->top, lpString); } else { _pCanvas->DrawText(X, Y, lpString); } } #endif }
void LKSurface::DrawText(int X, int Y, const TCHAR* lpString, UINT cbCount, RECT* ClipRect) { #ifdef WIN32 ::ExtTextOut(*this, X, Y,ETO_CLIPPED, ClipRect, lpString, cbCount, NULL); #else if(_pCanvas) { if(ClipRect) { SubCanvas ClipCanvas(*_pCanvas, (*ClipRect).GetOrigin(), (*ClipRect).GetSize()); const RasterPoint offset = (*ClipRect).GetOrigin(); ClipCanvas.DrawText(X-offset.x, Y-offset.y, lpString, cbCount); } else { _pCanvas->DrawText(X, Y, lpString, cbCount); } } #endif }
int LKSurface::DrawText(const TCHAR* lpchText, RECT *lpRect, UINT uFormat) { assert(lpRect); #ifdef USE_GDI return ::DrawText(*this, lpchText, _tcslen(lpchText), lpRect, uFormat); #else if(_pCanvas) { if(!(uFormat&(DT_NOCLIP|DT_CALCRECT))) { PixelRect rcText(*lpRect); SubCanvas ClipCanvas(*_pCanvas, rcText.GetOrigin(), rcText.GetSize() ); rcText.Offset(-rcText.left, -rcText.top); ClipCanvas.DrawFormattedText(&rcText, lpchText, uFormat); } else { _pCanvas->DrawFormattedText(lpRect, lpchText, uFormat); } } return false; #endif }