summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-01-11 16:36:03 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-01-18 11:34:08 +0000
commit17f927ba57984ac22a6f47f58d77cb2d847f3301 (patch)
tree4eec16af39a2cc61b0f66c175e28b9e407a4d8d7
parenta483360f861aa324e8701f483e57792dcab02f23 (diff)
svp: route another drawBitmap variant through cairo
Change-Id: I55c9cc9d5110429d2829a6030a9254d586c0a5c7
-rw-r--r--vcl/headless/svpgdi.cxx38
1 files changed, 23 insertions, 15 deletions
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 492db2189f1f..052badc5a84d 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -1126,24 +1126,32 @@ void SvpSalGraphics::copyBits( const SalTwoRect& rPosAry,
dbgOut( m_aDevice );
}
-void SvpSalGraphics::drawBitmap( const SalTwoRect& rPosAry,
- const SalBitmap& rSalBitmap )
+void SvpSalGraphics::drawBitmap(const SalTwoRect& rTR, const SalBitmap& rSourceBitmap)
{
- if( !m_aDevice.get() )
- return;
+ SourceHelper aSurface(rSourceBitmap);
+ cairo_surface_t* source = aSurface.getSurface();
+ if (!source)
+ {
+ SAL_WARN("vcl.gdi", "unsupported SvpSalGraphics::drawAlphaBitmap case");
+ }
- const SvpSalBitmap& rSrc = static_cast<const SvpSalBitmap&>(rSalBitmap);
- basegfx::B2IBox aSrcRect( rPosAry.mnSrcX, rPosAry.mnSrcY,
- rPosAry.mnSrcX+rPosAry.mnSrcWidth,
- rPosAry.mnSrcY+rPosAry.mnSrcHeight );
- basegfx::B2IBox aDestRect( rPosAry.mnDestX, rPosAry.mnDestY,
- rPosAry.mnDestX+rPosAry.mnDestWidth,
- rPosAry.mnDestY+rPosAry.mnDestHeight );
+ cairo_t* cr = getCairoContext(false);
+ assert(cr && m_aDevice->isTopDown());
+ clipRegion(cr);
+ ApplyPaintMode(cr, m_ePaintMode);
- SvpSalGraphics::ClipUndoHandle aUndo( this );
- if( !isClippedSetup( aDestRect, aUndo ) )
- m_aDevice->drawBitmap( rSrc.getBitmap(), aSrcRect, aDestRect, basebmp::DrawMode::Paint, m_aClipMap );
- dbgOut( m_aDevice );
+ cairo_rectangle(cr, rTR.mnDestX, rTR.mnDestY, rTR.mnDestWidth, rTR.mnDestHeight);
+
+ cairo_rectangle_int_t extents = getFillDamage(cr);
+
+ cairo_clip(cr);
+
+ cairo_translate(cr, rTR.mnDestX, rTR.mnDestY);
+ cairo_scale(cr, (double)(rTR.mnDestWidth)/rTR.mnSrcWidth, ((double)rTR.mnDestHeight)/rTR.mnSrcHeight);
+ cairo_set_source_surface(cr, source, -rTR.mnSrcX, -rTR.mnSrcY);
+ cairo_paint(cr);
+
+ releaseCairoContext(cr, false, extents);
}
void SvpSalGraphics::drawBitmap( const SalTwoRect& rPosAry,