[Libreoffice-commits] core.git: Branch 'feature/screenshotannotation' - cui/source
Armin Le Grand
Armin.Le.Grand at cib.de
Sat Aug 27 00:55:23 UTC 2016
Rebased ref, commits from common ancestor:
commit 3fd40763973eb02019a7ffe67f7c10511624b73d
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date: Fri Aug 26 16:26:34 2016 +0200
screenshot: fixup some details for screenshot dlg
Edge-rounding and linewidth for selection/cursor, default
filename for save dialog. Code cosmetics.
Change-Id: I8a76d68f4f3070458ec4ba51a81bb046057218ab
diff --git a/cui/source/dialogs/screenshotannotationdlg.cxx b/cui/source/dialogs/screenshotannotationdlg.cxx
index aad891f..e2a9b4c 100644
--- a/cui/source/dialogs/screenshotannotationdlg.cxx
+++ b/cui/source/dialogs/screenshotannotationdlg.cxx
@@ -29,6 +29,14 @@
#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
#include <vcl/pngwrite.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <tools/urlobj.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/salgtype.hxx>
+#include <vcl/virdev.hxx>
+#include <vcl/vclmedit.hxx>
+#include <vcl/button.hxx>
+#include <svtools/optionsdrawinglayer.hxx>
using namespace com::sun::star;
@@ -247,8 +255,7 @@ ScreenshotAnnotationDlg_Impl::~ScreenshotAnnotationDlg_Impl()
IMPL_LINK_TYPED(ScreenshotAnnotationDlg_Impl, saveButtonHandler, Button*, pButton, void)
{
- // suppress compiler warning
- (*pButton);
+ (void)pButton;
// 'save screenshot...' pressed, offer to save maParentDialogBitmap
// as PNG image, use *.id file name as screenshot file name offering
@@ -272,7 +279,7 @@ IMPL_LINK_TYPED(ScreenshotAnnotationDlg_Impl, saveButtonHandler, Button*, pButto
uno::Reference< uno::XComponentContext > xContext = cppu::defaultBootstrap_InitialComponentContext();
const uno::Reference< ui::dialogs::XFilePicker3 > xFilePicker =
- ui::dialogs::FilePicker::createWithMode(xContext, ui::dialogs::TemplateDescription::FILESAVE_SIMPLE);
+ ui::dialogs::FilePicker::createWithMode(xContext, ui::dialogs::TemplateDescription::FILESAVE_AUTOEXTENSION);
xFilePicker->setTitle(maSaveAsText);
@@ -281,9 +288,10 @@ IMPL_LINK_TYPED(ScreenshotAnnotationDlg_Impl, saveButtonHandler, Button*, pButto
xFilePicker->setDisplayDirectory(maLastFolderURL);
}
- xFilePicker->appendFilter("*.png", "*.PNG");
+ xFilePicker->appendFilter("*.png", "*.png");
xFilePicker->setCurrentFilter("*.png");
- xFilePicker->setDefaultName(OStringToOUString(aDerivedFileName, RTL_TEXTENCODING_UTF8)); // +".png");
+ xFilePicker->setDefaultName(OStringToOUString(aDerivedFileName, RTL_TEXTENCODING_UTF8));
+ xFilePicker->setMultiSelectionMode(sal_False);
if (xFilePicker->execute() == ui::dialogs::ExecutableDialogResults::OK)
{
@@ -338,10 +346,8 @@ ControlDataEntry* ScreenshotAnnotationDlg_Impl::CheckHit(const basegfx::B2IPoint
{
ControlDataEntry* pRetval = nullptr;
- for (auto aCandidate = maAllChildren.begin(); aCandidate != maAllChildren.end(); aCandidate++)
+ for (auto&& rCandidate : maAllChildren)
{
- ControlDataEntry& rCandidate = *aCandidate;
-
if (rCandidate.getB2IRange().isInside(rPosition))
{
if (pRetval)
@@ -370,26 +376,34 @@ void ScreenshotAnnotationDlg_Impl::PaintControlDataEntry(
{
if (mpPicture && mpVirtualBufferDevice)
{
- const basegfx::B2IRange& rRange = rEntry.getB2IRange();
- static double fRelativeEdgeRadius(0.1);
- basegfx::B2DRange aB2DRange(rRange);
-
- // grow one pixel to be a little bit outside
- aB2DRange.grow(1);
-
+ basegfx::B2DRange aB2DRange(rEntry.getB2IRange());
+
+ // grow in pixels to be a little bit 'outside'. This also
+ // ensures that getWidth()/getHeight() ain't 0.0 (see division below)
+ static double fGrowTopLeft(1.5);
+ static double fGrowBottomRight(0.5);
+ aB2DRange.expand(aB2DRange.getMinimum() - basegfx::B2DPoint(fGrowTopLeft, fGrowTopLeft));
+ aB2DRange.expand(aB2DRange.getMaximum() + basegfx::B2DPoint(fGrowBottomRight, fGrowBottomRight));
+
+ // edge rounding in pixel. Need to convert, value for
+ // createPolygonFromRect is relative [0.0 .. 1.0]
+ static double fEdgeRoundPixel(8.0);
const basegfx::B2DPolygon aPolygon(
basegfx::tools::createPolygonFromRect(
aB2DRange,
- fRelativeEdgeRadius,
- fRelativeEdgeRadius));
+ fEdgeRoundPixel / aB2DRange.getWidth(),
+ fEdgeRoundPixel / aB2DRange.getHeight()));
+
mpVirtualBufferDevice->SetLineColor(rColor);
+ // try to use transparency
if (!mpVirtualBufferDevice->DrawPolyLineDirect(
aPolygon,
fLineWidth,
fTransparency,
basegfx::B2DLineJoin::Round))
{
+ // no transparency, draw without
mpVirtualBufferDevice->DrawPolyLine(
aPolygon,
fLineWidth,
@@ -423,10 +437,11 @@ void ScreenshotAnnotationDlg_Impl::RepaintToBuffer(
Point(0, 0),
bUseDimmed ? maDimmedDialogBitmap : maParentDialogBitmap);
- // get various options - sorry, no SvtOptionsDrawinglayer in vcl
- const Color aHilightColor(Application::GetSettings().GetStyleSettings().GetHighlightColor());
- const bool bIsAntiAliasing(true);
- const double fTransparence(0.4);
+ // get various options
+ const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer;
+ const Color aHilightColor(aSvtOptionsDrawinglayer.getHilightColor());
+ const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() * 0.01);
+ const bool bIsAntiAliasing(aSvtOptionsDrawinglayer.IsAntiAliasing());
const AntialiasingFlags nOldAA(mpVirtualBufferDevice->GetAntialiasing());
if (bIsAntiAliasing)
@@ -435,15 +450,17 @@ void ScreenshotAnnotationDlg_Impl::RepaintToBuffer(
}
// paint selected entries
- for (auto candidate = maSelected.begin(); candidate != maSelected.end(); candidate++)
+ for (auto&& rCandidate : maSelected)
{
- PaintControlDataEntry(**candidate, Color(COL_LIGHTRED), 3.0);
+ static double fLineWidthEntries(5.0);
+ PaintControlDataEntry(*rCandidate, Color(COL_LIGHTRED), fLineWidthEntries, fTransparence * 0.2);
}
// paint hilighted entry
if (mpHilighted && bPaintHilight)
{
- PaintControlDataEntry(*mpHilighted, aHilightColor, 5.0, fTransparence);
+ static double fLineWidthHilight(7.0);
+ PaintControlDataEntry(*mpHilighted, aHilightColor, fLineWidthHilight, fTransparence);
}
if (bIsAntiAliasing)
More information about the Libreoffice-commits
mailing list