summaryrefslogtreecommitdiff
path: root/cui/source/dialogs/cuigrfflt.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-09-17 16:53:23 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-09-19 15:51:43 +0200
commit3a87fb18241e803f7ebffedfc59648782f560f4e (patch)
treee1cc8c272375d892947327a2c9882303897dd8bd /cui/source/dialogs/cuigrfflt.cxx
parent088af44063c3e2d1d0e7744a9f9bd7b37ff58a75 (diff)
weld GraphicFilterEmboss
Change-Id: Ic3c816ddd7d5df9c5ced14600fffd6ca59f0096e Reviewed-on: https://gerrit.libreoffice.org/60594 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'cui/source/dialogs/cuigrfflt.cxx')
-rw-r--r--cui/source/dialogs/cuigrfflt.cxx163
1 files changed, 135 insertions, 28 deletions
diff --git a/cui/source/dialogs/cuigrfflt.cxx b/cui/source/dialogs/cuigrfflt.cxx
index e9f84d1789ef..f8f2b76bc4a5 100644
--- a/cui/source/dialogs/cuigrfflt.cxx
+++ b/cui/source/dialogs/cuigrfflt.cxx
@@ -79,7 +79,6 @@ void GraphicPreviewWindow::SetPreview(const Graphic& rGraphic)
Invalidate();
}
-
void GraphicPreviewWindow::ScaleImageToFit()
{
if (!mpOrigGraphic)
@@ -125,13 +124,105 @@ void GraphicPreviewWindow::ScaleImageToFit()
maModifyHdl.Call(nullptr);
}
-
void GraphicPreviewWindow::Resize()
{
Control::Resize();
ScaleImageToFit();
}
+CuiGraphicPreviewWindow::CuiGraphicPreviewWindow()
+ : mpOrigGraphic(nullptr)
+ , mfScaleX(0.0)
+ , mfScaleY(0.0)
+{
+}
+
+void CuiGraphicPreviewWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
+{
+ CustomWidgetController::SetDrawingArea(pDrawingArea);
+ OutputDevice &rDevice = pDrawingArea->get_ref_device();
+ maOutputSizePixel = rDevice.LogicToPixel(Size(81, 73), MapMode(MapUnit::MapAppFont));
+ pDrawingArea->set_size_request(maOutputSizePixel.Width(), maOutputSizePixel.Height());
+}
+
+void CuiGraphicPreviewWindow::Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle&)
+{
+ rRenderContext.SetBackground(Wallpaper(Application::GetSettings().GetStyleSettings().GetDialogColor()));
+ rRenderContext.Erase();
+
+ const Size aOutputSize(GetOutputSizePixel());
+
+ if (maPreview.IsAnimated())
+ {
+ const Size aGraphicSize(rRenderContext.LogicToPixel(maPreview.GetPrefSize(), maPreview.GetPrefMapMode()));
+ const Point aGraphicPosition((aOutputSize.Width() - aGraphicSize.Width() ) >> 1,
+ (aOutputSize.Height() - aGraphicSize.Height() ) >> 1);
+ maPreview.StartAnimation(&rRenderContext, aGraphicPosition, aGraphicSize);
+ }
+ else
+ {
+ const Size aGraphicSize(maPreview.GetSizePixel());
+ const Point aGraphicPosition((aOutputSize.Width() - aGraphicSize.Width()) >> 1,
+ (aOutputSize.Height() - aGraphicSize.Height()) >> 1);
+ maPreview.Draw(&rRenderContext, aGraphicPosition, aGraphicSize);
+ }
+}
+
+void CuiGraphicPreviewWindow::SetPreview(const Graphic& rGraphic)
+{
+ maPreview = rGraphic;
+ Invalidate();
+}
+
+void CuiGraphicPreviewWindow::ScaleImageToFit()
+{
+ if (!mpOrigGraphic)
+ return;
+
+ maScaledOrig = *mpOrigGraphic;
+
+ const Size aPreviewSize(GetOutputSizePixel());
+ Size aGrfSize(maOrigGraphicSizePixel);
+
+ if( mpOrigGraphic->GetType() == GraphicType::Bitmap &&
+ aPreviewSize.Width() && aPreviewSize.Height() &&
+ aGrfSize.Width() && aGrfSize.Height() )
+ {
+ const double fGrfWH = static_cast<double>(aGrfSize.Width()) / aGrfSize.Height();
+ const double fPreWH = static_cast<double>(aPreviewSize.Width()) / aPreviewSize.Height();
+
+ if( fGrfWH < fPreWH )
+ {
+ aGrfSize.setWidth( static_cast<long>( aPreviewSize.Height() * fGrfWH ) );
+ aGrfSize.setHeight( aPreviewSize.Height() );
+ }
+ else
+ {
+ aGrfSize.setWidth( aPreviewSize.Width() );
+ aGrfSize.setHeight( static_cast<long>( aPreviewSize.Width() / fGrfWH ) );
+ }
+
+ mfScaleX = static_cast<double>(aGrfSize.Width()) / maOrigGraphicSizePixel.Width();
+ mfScaleY = static_cast<double>(aGrfSize.Height()) / maOrigGraphicSizePixel.Height();
+
+ if( !mpOrigGraphic->IsAnimated() )
+ {
+ BitmapEx aBmpEx( mpOrigGraphic->GetBitmapEx() );
+
+ if( aBmpEx.Scale( aGrfSize ) )
+ maScaledOrig = aBmpEx;
+ }
+ }
+
+ maModifyHdl.Call(nullptr);
+}
+
+void CuiGraphicPreviewWindow::Resize()
+{
+ maOutputSizePixel = GetOutputSizePixel();
+ ScaleImageToFit();
+}
+
GraphicFilterDialog::GraphicFilterDialog(vcl::Window* pParent,
const OUString& rID, const OUString& rUIXMLDescription,
const Graphic& rGraphic)
@@ -180,6 +271,36 @@ IMPL_LINK_NOARG(GraphicFilterDialog, ImplModifyHdl, LinkParamNone*, void)
}
}
+GraphicFilterDialogController::GraphicFilterDialogController(weld::Window* pParent,
+ const OUString& rUIXMLDescription, const OString& rID,
+ const Graphic& rGraphic)
+ : GenericDialogController(pParent, rUIXMLDescription, rID)
+ , maModifyHdl(LINK(this, GraphicFilterDialogController, ImplModifyHdl))
+ , mxPreview(new weld::CustomWeld(*m_xBuilder, "preview", maPreview))
+{
+ bIsBitmap = rGraphic.GetType() == GraphicType::Bitmap;
+
+ maTimer.SetInvokeHandler(LINK(this, GraphicFilterDialogController, ImplPreviewTimeoutHdl));
+ maTimer.SetTimeout(5);
+
+ maPreview.init(&rGraphic, maModifyHdl);
+}
+
+IMPL_LINK_NOARG(GraphicFilterDialogController, ImplPreviewTimeoutHdl, Timer *, void)
+{
+ maTimer.Stop();
+ maPreview.SetPreview(GetFilteredGraphic(maPreview.GetScaledOriginal(),
+ maPreview.GetScaleX(), maPreview.GetScaleY()));
+}
+
+IMPL_LINK_NOARG(GraphicFilterDialogController, ImplModifyHdl, LinkParamNone*, void)
+{
+ if (bIsBitmap)
+ {
+ maTimer.Stop();
+ maTimer.Start();
+ }
+}
GraphicFilterMosaic::GraphicFilterMosaic( vcl::Window* pParent, const Graphic& rGraphic,
sal_uInt16 nTileWidth, sal_uInt16 nTileHeight, bool bEnhanceEdges )
@@ -517,53 +638,39 @@ void EmbossControl::MouseButtonDown( const MouseEvent& rEvt )
{
const RectPoint eOldRP = GetActualRP();
- SvxRectCtl::MouseButtonDown( rEvt );
+ RectCtl::MouseButtonDown( rEvt );
if( GetActualRP() != eOldRP )
maModifyHdl.Call( nullptr );
}
-
-Size EmbossControl::GetOptimalSize() const
+void EmbossControl::SetDrawingArea(weld::DrawingArea* pDrawingArea)
{
- return LogicToPixel(Size(77, 60), MapMode(MapUnit::MapAppFont));
+ RectCtl::SetDrawingArea(pDrawingArea);
+ Size aSize(pDrawingArea->get_ref_device().LogicToPixel(Size(77, 60), MapMode(MapUnit::MapAppFont)));
+ pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
}
-
-VCL_BUILDER_FACTORY(EmbossControl)
-
-
-GraphicFilterEmboss::GraphicFilterEmboss(vcl::Window* pParent,
+GraphicFilterEmboss::GraphicFilterEmboss(weld::Window* pParent,
const Graphic& rGraphic, RectPoint eLightSource)
- : GraphicFilterDialog (pParent, "EmbossDialog",
- "cui/ui/embossdialog.ui", rGraphic)
+ : GraphicFilterDialogController(pParent, "cui/ui/embossdialog.ui", "EmbossDialog", rGraphic)
+ , mxCtlLight(new weld::CustomWeld(*m_xBuilder, "lightsource", maCtlLight))
{
- get(mpCtlLight, "lightsource");
- mpCtlLight->SetActualRP(eLightSource);
- mpCtlLight->SetModifyHdl( GetModifyHdl() );
- mpCtlLight->GrabFocus();
+ maCtlLight.SetActualRP(eLightSource);
+ maCtlLight.SetModifyHdl( GetModifyHdl() );
+ maCtlLight.GrabFocus();
}
-
GraphicFilterEmboss::~GraphicFilterEmboss()
{
- disposeOnce();
}
-
-void GraphicFilterEmboss::dispose()
-{
- mpCtlLight.clear();
- GraphicFilterDialog::dispose();
-}
-
-
Graphic GraphicFilterEmboss::GetFilteredGraphic( const Graphic& rGraphic, double, double )
{
Graphic aRet;
sal_uInt16 nAzim, nElev;
- switch( mpCtlLight->GetActualRP() )
+ switch (maCtlLight.GetActualRP())
{
default: OSL_FAIL("svx::GraphicFilterEmboss::GetFilteredGraphic(), unknown Reference Point!" );
SAL_FALLTHROUGH;