Kaydet (Commit) 7357f6f8 authored tarafından Caolán McNamara's avatar Caolán McNamara

gtk3: alpha rects using cairo

(cherry picked from commit 65d31de7)

Change-Id: I7fdcd6336fdc7ea8149c385a177db91ffaa61c94

stinking ancient cairo impls

Change-Id: I35e826bc78556a912358dfad2fac7c45ca35bfd1
(cherry picked from commit a7a95af7)

WaE: -Werror=unused-parameter on Android

Change-Id: Ie5a4015794350a513c39a60ae650f4626d92e1b8
(cherry picked from commit b28a6372)

error: missing binary operator before token '('

Change-Id: Ieafb13245a11347cbda8a33e49ad618bf85d8a89
(cherry picked from commit 3928a151)

WaE: error: 'CAIRO_VERSION' is not defined

Change-Id: I9e4f0d0af541226089a6295962a91ca09debb418
(cherry picked from commit b51fe01f)

try harder to hide this from android tinderbox

Change-Id: I586fea9f1570b68ed789da8b10a3b46216c42969
(cherry picked from commit f1761903)
üst bb7687b2
...@@ -96,10 +96,89 @@ bool SvpSalGraphics::drawTransformedBitmap( ...@@ -96,10 +96,89 @@ bool SvpSalGraphics::drawTransformedBitmap(
return false; return false;
} }
bool SvpSalGraphics::drawAlphaRect( long /*nX*/, long /*nY*/, long /*nWidth*/, long /*nHeight*/, sal_uInt8 /*nTransparency*/ ) #if ENABLE_CAIRO_CANVAS
namespace
{ {
// TODO(P3) implement alpha blending bool isCairoCompatible(const basebmp::BitmapDeviceSharedPtr &rBuffer)
return false; {
if (!rBuffer)
return false;
if (rBuffer->getScanlineFormat() != basebmp::FORMAT_THIRTYTWO_BIT_TC_MASK_BGRX)
return false;
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
basegfx::B2IVector size = rBuffer->getSize();
sal_Int32 nStride = rBuffer->getScanlineStride();
return (cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, size.getX()) == nStride);
#else
return false;
#endif
}
}
#endif
bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency)
{
bool bRet = false;
(void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
#if ENABLE_CAIRO_CANVAS
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0)
if (m_bUseLineColor || !m_bUseFillColor)
return bRet;
cairo_t* cr = createCairoContext(m_aDevice);
if (!cr)
return bRet;
if (!m_aDevice->isTopDown())
{
cairo_scale(cr, 1, -1.0);
cairo_translate(cr, 0.0, -m_aDevice->getSize().getY());
}
const double fTransparency = (100 - nTransparency) * (1.0/100);
cairo_set_source_rgba(cr, m_aFillColor.getRed()/255.0,
m_aFillColor.getGreen()/255.0,
m_aFillColor.getBlue()/255.0,
fTransparency);
cairo_rectangle(cr, nX, nY, nWidth, nHeight);
cairo_rectangle_int_t extents;
basebmp::IBitmapDeviceDamageTrackerSharedPtr xDamageTracker(m_aDevice->getDamageTracker());
if (xDamageTracker)
{
double x1, y1, x2, y2;
cairo_clip_extents(cr, &x1, &y1, &x2, &y2);
extents.x = x1, extents.y = x2, extents.width = x2-x1, extents.height = y2-y1;
cairo_region_t *region = cairo_region_create_rectangle(&extents);
cairo_fill_extents(cr, &x1, &y1, &x2, &y2);
extents.x = x1, extents.y = x2, extents.width = x2-x1, extents.height = y2-y1;
cairo_region_intersect_rectangle(region, &extents);
cairo_region_get_extents(region, &extents);
cairo_region_destroy(region);
}
cairo_fill(cr);
cairo_surface_flush(cairo_get_target(cr));
cairo_destroy(cr); // unref
if (xDamageTracker)
{
xDamageTracker->damaged(basegfx::B2IBox(extents.x, extents.y, extents.x + extents.width,
extents.y + extents.height));
}
bRet = true;
#endif
#endif
return bRet;
} }
SvpSalGraphics::SvpSalGraphics() : SvpSalGraphics::SvpSalGraphics() :
...@@ -727,32 +806,15 @@ bool SvpSalGraphics::drawEPS( long, long, long, long, void*, sal_uLong ) ...@@ -727,32 +806,15 @@ bool SvpSalGraphics::drawEPS( long, long, long, long, void*, sal_uLong )
return false; return false;
} }
#ifndef IOS
SystemGraphicsData SvpSalGraphics::GetGraphicsData() const
{
return SystemGraphicsData();
}
bool SvpSalGraphics::supportsOperation( OutDevSupportType ) const
{
return false;
}
#endif
#if ENABLE_CAIRO_CANVAS #if ENABLE_CAIRO_CANVAS
cairo_t* SvpSalGraphics::createCairoContext(const basebmp::BitmapDeviceSharedPtr &rBuffer) cairo_t* SvpSalGraphics::createCairoContext(const basebmp::BitmapDeviceSharedPtr &rBuffer)
{ {
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 6, 0) if (!isCairoCompatible(rBuffer))
if (rBuffer->getScanlineFormat() != basebmp::FORMAT_THIRTYTWO_BIT_TC_MASK_BGRX)
return NULL; return NULL;
basegfx::B2IVector size = rBuffer->getSize(); basegfx::B2IVector size = rBuffer->getSize();
sal_Int32 nStride = rBuffer->getScanlineStride(); sal_Int32 nStride = rBuffer->getScanlineStride();
if (cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, size.getX()) != nStride)
return NULL;
basebmp::RawMemorySharedArray data = rBuffer->getBuffer(); basebmp::RawMemorySharedArray data = rBuffer->getBuffer();
cairo_surface_t *target = cairo_surface_t *target =
...@@ -763,9 +825,6 @@ cairo_t* SvpSalGraphics::createCairoContext(const basebmp::BitmapDeviceSharedPtr ...@@ -763,9 +825,6 @@ cairo_t* SvpSalGraphics::createCairoContext(const basebmp::BitmapDeviceSharedPtr
cairo_t* cr = cairo_create(target); cairo_t* cr = cairo_create(target);
cairo_surface_destroy(target); cairo_surface_destroy(target);
return cr; return cr;
#else
return NULL;
#endif
} }
#endif #endif
...@@ -795,4 +854,25 @@ css::uno::Any SvpSalGraphics::GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& /* ...@@ -795,4 +854,25 @@ css::uno::Any SvpSalGraphics::GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& /*
return css::uno::Any(); return css::uno::Any();
} }
#ifndef IOS
SystemGraphicsData SvpSalGraphics::GetGraphicsData() const
{
return SystemGraphicsData();
}
bool SvpSalGraphics::supportsOperation(OutDevSupportType eType) const
{
#if ENABLE_CAIRO_CANVAS
return m_aDrawMode != basebmp::DrawMode_XOR &&
OutDevSupport_TransparentRect == eType &&
isCairoCompatible(m_aDevice);
#else
(void)eType;
return false;
#endif
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment