include/vcl/rendercontext/DrawImageFlags.hxx | 3 ++- offapi/com/sun/star/awt/ImageDrawMode.idl | 6 ++++++ vcl/source/image/Image.cxx | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-)
New commits: commit daa8f9a930a97aa712bcf609a3390b89054b8de4 Author: Dan Williams <[email protected]> AuthorDate: Thu Jan 8 13:27:52 2026 -0600 Commit: Dan Williams <[email protected]> CommitDate: Wed Feb 25 16:40:50 2026 +0100 vcl: add DrawImageFlags::Invert and implement during Image drawing Inverts an image after applying other transformations. Change-Id: I05f31dc1d9be9c8ed72ee0e52d42133c081a2d74 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196872 Tested-by: Jenkins Reviewed-by: Dan Williams <[email protected]> diff --git a/include/vcl/rendercontext/DrawImageFlags.hxx b/include/vcl/rendercontext/DrawImageFlags.hxx index 535ba74162b1..01dcca1d2dd7 100644 --- a/include/vcl/rendercontext/DrawImageFlags.hxx +++ b/include/vcl/rendercontext/DrawImageFlags.hxx @@ -30,10 +30,11 @@ enum class DrawImageFlags Deactive = 0x0004, // 0x0008 is unused, SemiTransparent = 0x0010, + Invert = 0x0020, }; namespace o3tl { -template <> struct typed_flags<DrawImageFlags> : is_typed_flags<DrawImageFlags, 0x001f> +template <> struct typed_flags<DrawImageFlags> : is_typed_flags<DrawImageFlags, 0x003f> { }; } diff --git a/offapi/com/sun/star/awt/ImageDrawMode.idl b/offapi/com/sun/star/awt/ImageDrawMode.idl index 40001b8bb31f..5c17ae1c158a 100644 --- a/offapi/com/sun/star/awt/ImageDrawMode.idl +++ b/offapi/com/sun/star/awt/ImageDrawMode.idl @@ -47,6 +47,12 @@ constants ImageDrawMode /** the image is drawn semi-transparent. */ const short SEMITRANSPARENT = 0x0010; + + /** the image is drawn inverted after all other mode transformations. + + @since LibreOffice 26.8 + */ + const short INVERT = 0x0020; }; }; }; }; }; diff --git a/vcl/source/image/Image.cxx b/vcl/source/image/Image.cxx index 28506ecf459b..db6219718252 100644 --- a/vcl/source/image/Image.cxx +++ b/vcl/source/image/Image.cxx @@ -135,7 +135,7 @@ void Image::Draw(OutputDevice* pOutDev, const Point& rPos, DrawImageFlags nStyle if (!(nStyle & DrawImageFlags::Disable) && (nStyle & (DrawImageFlags::Highlight | DrawImageFlags::Deactive | - DrawImageFlags::SemiTransparent))) + DrawImageFlags::SemiTransparent | DrawImageFlags::Invert))) { if (nStyle & (DrawImageFlags::Highlight | DrawImageFlags::Deactive)) { @@ -165,6 +165,9 @@ void Image::Draw(OutputDevice* pOutDev, const Point& rPos, DrawImageFlags nStyle } aRenderBmp = std::move(aTempBitmap); } + + if (nStyle & DrawImageFlags::Invert) + aRenderBmp.Adjust(0, 0, 0, 0, 0, 0, true, false); } pOutDev->DrawBitmap(rPos, aOutSize, aRenderBmp);
