Kaydet (Commit) f7193472 authored tarafından Miklos Vajna's avatar Miklos Vajna Kaydeden (comit) Andras Timar

tdf#92982 vcl: move Invert() member functions from vcl::Window to OutputDevice

With this, vcl::Cursor will be able to paint to a vcl::RenderContext,
too; not just directly, which is needed for double-buffering.

(cherry picked from commit 09bd5846)

Conflicts:
	include/vcl/window.hxx
	vcl/source/window/window2.cxx

Change-Id: I868f6cd9b08afe59611ef266911a894a26cacedc
Reviewed-on: https://gerrit.libreoffice.org/17401Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst 116f41e6
......@@ -289,6 +289,10 @@ namespace o3tl
template<> struct typed_flags<GetDefaultFontFlags> : is_typed_flags<GetDefaultFontFlags, 0x01> {};
}
// Flags for Invert()
#define INVERT_HIGHLIGHT ((sal_uInt16)0x0001)
#define INVERT_50 ((sal_uInt16)0x0002)
enum OutDevType { OUTDEV_DONTKNOW, OUTDEV_WINDOW, OUTDEV_PRINTER, OUTDEV_VIRDEV };
enum OutDevViewType { OUTDEV_VIEWTYPE_DONTKNOW, OUTDEV_VIEWTYPE_PRINTPREVIEW, OUTDEV_VIEWTYPE_SLIDESHOW };
......@@ -766,6 +770,13 @@ public:
///@}
/** @name Invert functions
*/
///@{
public:
void Invert( const Rectangle& rRect, sal_uInt16 nFlags = 0 );
void Invert( const Polygon& rPoly, sal_uInt16 nFlags = 0 );
///@}
/** @name Line functions
*/
......
......@@ -217,10 +217,6 @@ namespace o3tl
#define PARENTCLIPMODE_CLIP ((sal_uInt16)0x0001)
#define PARENTCLIPMODE_NOCLIP ((sal_uInt16)0x0002)
// Flags for Invert()
#define INVERT_HIGHLIGHT ((sal_uInt16)0x0001)
#define INVERT_50 ((sal_uInt16)0x0002)
// Flags for ShowTracking()
#define SHOWTRACK_SMALL ((sal_uInt16)0x0001)
#define SHOWTRACK_BIG ((sal_uInt16)0x0002)
......@@ -1143,9 +1139,6 @@ public:
virtual void ShowFocus(const Rectangle& rRect);
void HideFocus();
void Invert( const Rectangle& rRect, sal_uInt16 nFlags = 0 );
void Invert( const Polygon& rPoly, sal_uInt16 nFlags = 0 );
// transparent background for selected or checked items in toolboxes etc.
void DrawSelectionBackground( const Rectangle& rRect, sal_uInt16 highlight, bool bChecked, bool bDrawBorder, bool bDrawExtBorderOnly );
// the same, but fills a passed Color with a text color complementing the selection background
......
......@@ -129,6 +129,72 @@ void OutputDevice::DrawRect( const Rectangle& rRect,
mpAlphaVDev->DrawRect( rRect, nHorzRound, nVertRound );
}
void OutputDevice::Invert( const Rectangle& rRect, sal_uInt16 nFlags )
{
if ( !IsDeviceOutputNecessary() )
return;
Rectangle aRect( ImplLogicToDevicePixel( rRect ) );
if ( aRect.IsEmpty() )
return;
aRect.Justify();
// we need a graphics
if ( !mpGraphics )
{
if ( !AcquireGraphics() )
return;
}
if ( mbInitClipRegion )
InitClipRegion();
if ( mbOutputClipped )
return;
SalInvert nSalFlags = 0;
if ( nFlags & INVERT_HIGHLIGHT )
nSalFlags |= SAL_INVERT_HIGHLIGHT;
if ( nFlags & INVERT_50 )
nSalFlags |= SAL_INVERT_50;
mpGraphics->Invert( aRect.Left(), aRect.Top(), aRect.GetWidth(), aRect.GetHeight(), nSalFlags, this );
}
void OutputDevice::Invert( const Polygon& rPoly, sal_uInt16 nFlags )
{
if ( !IsDeviceOutputNecessary() )
return;
sal_uInt16 nPoints = rPoly.GetSize();
if ( nPoints < 2 )
return;
Polygon aPoly( ImplLogicToDevicePixel( rPoly ) );
// we need a graphics
if ( !mpGraphics )
{
if ( !AcquireGraphics() )
return;
}
if ( mbInitClipRegion )
InitClipRegion();
if ( mbOutputClipped )
return;
SalInvert nSalFlags = 0;
if ( nFlags & INVERT_HIGHLIGHT )
nSalFlags |= SAL_INVERT_HIGHLIGHT;
if ( nFlags & INVERT_50 )
nSalFlags |= SAL_INVERT_50;
const SalPoint* pPtAry = reinterpret_cast<const SalPoint*>(aPoly.GetConstPointAry());
mpGraphics->Invert( nPoints, pPtAry, nSalFlags, this );
}
void OutputDevice::DrawCheckered(const Point& rPos, const Size& rSize, sal_uInt32 nLen, Color aStart, Color aEnd)
{
assert(!is_double_buffered_window());
......
......@@ -127,74 +127,6 @@ void Window::HideFocus()
mpWindowImpl->mbInHideFocus = false;
}
void Window::Invert( const Rectangle& rRect, sal_uInt16 nFlags )
{
if ( !IsDeviceOutputNecessary() )
return;
OutputDevice *pOutDev = GetOutDev();
Rectangle aRect( pOutDev->ImplLogicToDevicePixel( rRect ) );
if ( aRect.IsEmpty() )
return;
aRect.Justify();
// we need a graphics
if ( !mpGraphics )
{
if ( !pOutDev->AcquireGraphics() )
return;
}
if ( mbInitClipRegion )
InitClipRegion();
if ( mbOutputClipped )
return;
SalInvert nSalFlags = 0;
if ( nFlags & INVERT_HIGHLIGHT )
nSalFlags |= SAL_INVERT_HIGHLIGHT;
if ( nFlags & INVERT_50 )
nSalFlags |= SAL_INVERT_50;
mpGraphics->Invert( aRect.Left(), aRect.Top(), aRect.GetWidth(), aRect.GetHeight(), nSalFlags, this );
}
void Window::Invert( const Polygon& rPoly, sal_uInt16 nFlags )
{
if ( !IsDeviceOutputNecessary() )
return;
sal_uInt16 nPoints = rPoly.GetSize();
if ( nPoints < 2 )
return;
OutputDevice *pOutDev = GetOutDev();
Polygon aPoly( pOutDev->ImplLogicToDevicePixel( rPoly ) );
// we need a graphics
if ( !mpGraphics )
{
if ( !pOutDev->AcquireGraphics() )
return;
}
if ( mbInitClipRegion )
InitClipRegion();
if ( mbOutputClipped )
return;
SalInvert nSalFlags = 0;
if ( nFlags & INVERT_HIGHLIGHT )
nSalFlags |= SAL_INVERT_HIGHLIGHT;
if ( nFlags & INVERT_50 )
nSalFlags |= SAL_INVERT_50;
const SalPoint* pPtAry = reinterpret_cast<const SalPoint*>(aPoly.GetConstPointAry());
mpGraphics->Invert( nPoints, pPtAry, nSalFlags, this );
}
void Window::ShowTracking( const Rectangle& rRect, sal_uInt16 nFlags )
{
ImplWinData* pWinData = ImplGetWinData();
......
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