summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx17
-rw-r--r--sd/source/ui/slidesorter/controller/SlideSorterController.cxx7
-rw-r--r--sd/source/ui/slidesorter/controller/SlsAnimator.cxx118
-rw-r--r--sd/source/ui/slidesorter/controller/SlsFocusManager.cxx9
-rw-r--r--sd/source/ui/slidesorter/controller/SlsProperties.cxx13
-rw-r--r--sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx5
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx18
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx13
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx8
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx5
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx3
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx12
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx7
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsTheme.hxx15
-rw-r--r--sd/source/ui/slidesorter/view/SlideSorterView.cxx7
-rw-r--r--sd/source/ui/slidesorter/view/SlsLayouter.cxx6
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx106
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx60
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObjectViewContact.cxx143
-rw-r--r--sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx1421
-rw-r--r--sd/source/ui/slidesorter/view/SlsTheme.cxx124
-rw-r--r--sd/source/ui/toolpanel/TaskPaneViewShell.cxx34
-rw-r--r--sd/source/ui/tools/PreviewRenderer.cxx4
23 files changed, 375 insertions, 1780 deletions
diff --git a/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx b/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx
index 77c833e3872a..596126c02b8b 100644
--- a/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx
+++ b/sd/source/ui/slidesorter/cache/SlsBitmapFactory.cxx
@@ -44,6 +44,7 @@
#include <vcl/bitmapex.hxx>
#include <vcl/bmpacc.hxx>
+#include <vcl/pngwrite.hxx>
const static sal_Int32 gnSuperSampleFactor (2);
@@ -56,7 +57,7 @@ namespace sd { namespace slidesorter { namespace cache {
BitmapFactory::BitmapFactory (void)
: maRenderer(NULL, false),
- mbRemoveBorder(true)
+ mbRemoveBorder(false)
{
}
@@ -92,7 +93,21 @@ BitmapFactory::~BitmapFactory (void)
::boost::shared_ptr<BitmapEx> pPreview (new BitmapEx(aPreview.GetBitmapEx()));
if (mbRemoveBorder)
+ {
+ static sal_Int32 gnCounter (0);
+ SvFileStream aOut (
+ ::rtl::OUString::createFromAscii("c:\\tmp\\image-")
+ +::rtl::OUString::valueOf(gnCounter)
+ +::rtl::OUString::createFromAscii(".png"),
+ STREAM_WRITE);
+ ::vcl::PNGWriter aWriter (*pPreview);
+ aWriter.Write(aOut);
+ ++gnCounter;
+
+ OSL_ASSERT(pPreview->GetSizePixel() == aSize);
pPreview->Crop(Rectangle(1,1,aSize.Width()-2,aSize.Height()-2));
+ OSL_ASSERT(pPreview->GetSizePixel() == Size(aSize.Width()-2,aSize.Height()-2));
+ }
if (bDo)
{
#if 1
diff --git a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
index 8ee0f748fcd3..0f007284d2c0 100644
--- a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
+++ b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
@@ -54,6 +54,8 @@
#include "view/SlsViewOverlay.hxx"
#include "view/SlsFontProvider.hxx"
#include "view/SlsPageObjectLayouter.hxx"
+#include "view/SlsPageObjectPainter.hxx"
+#include "view/SlsTheme.hxx"
#include "cache/SlsPageCache.hxx"
#include "cache/SlsPageCacheManager.hxx"
@@ -637,6 +639,11 @@ IMPL_LINK(SlideSorterController, WindowEventHandler, VclWindowEvent*, pEvent)
// When the system font has changed a layout has to be done.
mrView.Resize();
FontProvider::Instance().Invalidate();
+
+ // Update theme colors.
+ mrSlideSorter.GetProperties()->HandleDataChangeEvent();
+ mrSlideSorter.GetTheme()->Update(mrSlideSorter.GetProperties());
+ mrView.GetPageObjectPainter()->SetTheme(mrSlideSorter.GetTheme());
}
break;
diff --git a/sd/source/ui/slidesorter/controller/SlsAnimator.cxx b/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
index 69be776179d3..a067428d50ab 100644
--- a/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
@@ -48,15 +48,16 @@ class Animator::Animation
public:
Animation (
const Animator::AnimationFunctor& rAnimation,
- const double nDelta,
- const double nEnd,
+ const double nDuration,
+ const double nGlobalTime,
const Animator::AnimationId nAnimationId,
const Animator::FinishFunctor& rFinishFunctor);
~Animation (void);
/** Run next animation step. If animation has reached its end it is
expired.
*/
- bool Run (void);
+ bool Run (const double nGlobalTime);
+
/** Typically called when an animation has finished, but also from
Animator::Disposed(). The finish functor is called and the
animation is marked as expired to prevent another run.
@@ -67,9 +68,9 @@ public:
Animator::AnimationFunctor maAnimation;
Animator::FinishFunctor maFinishFunctor;
const Animator::AnimationId mnAnimationId;
- double mnValue;
+ const double mnDuration;
const double mnEnd;
- const double mnDelta;
+ const double mnGlobalTimeAtStart;
bool mbIsExpired;
};
@@ -82,7 +83,8 @@ Animator::Animator (SlideSorter& rSlideSorter)
mbIsDisposed(false),
maAnimations(),
mpDrawLock(),
- mnNextAnimationId(0)
+ mnNextAnimationId(0),
+ maElapsedTime()
{
maTimer.SetTimeout(gnResolution);
maTimer.SetTimeoutHdl(LINK(this,Animator,TimeoutHandler));
@@ -130,16 +132,16 @@ Animator::AnimationId Animator::AddAnimation (
if (mbIsDisposed)
return -1;
- const double nDelta = double(gnResolution) / double(nDuration);
boost::shared_ptr<Animation> pAnimation (
- new Animation(rAnimation, nDelta, 1.0, ++mnNextAnimationId, rFinishFunctor));
+ new Animation(
+ rAnimation,
+ nDuration / 1000.0,
+ maElapsedTime.getElapsedTime(),
+ ++mnNextAnimationId,
+ rFinishFunctor));
maAnimations.push_back(pAnimation);
- // Prevent redraws except for the ones in TimeoutHandler.
- // While the Animator is active it will schedule repaints regularly.
- // Repaints in between would only lead to visual artifacts.
- mpDrawLock.reset(new view::SlideSorterView::DrawLock(mrSlideSorter));
- maTimer.Start();
+ RequestNextFrame();
return pAnimation->mnAnimationId;
}
@@ -158,14 +160,15 @@ Animator::AnimationId Animator::AddInfiniteAnimation (
return -1;
boost::shared_ptr<Animation> pAnimation (
- new Animation(rAnimation, nDelta, -1.0, mnNextAnimationId++, FinishFunctor()));
+ new Animation(
+ rAnimation,
+ -1,
+ maElapsedTime.getElapsedTime(),
+ mnNextAnimationId++,
+ FinishFunctor()));
maAnimations.push_back(pAnimation);
- // Prevent redraws except for the ones in TimeoutHandler.
- // While the Animator is active it will schedule repaints regularly.
- // Repaints in between would only lead to visual artifacts.
- mpDrawLock.reset(new view::SlideSorterView::DrawLock(mrSlideSorter));
- maTimer.Start();
+ RequestNextFrame();
return pAnimation->mnAnimationId;
}
@@ -199,7 +202,7 @@ void Animator::RemoveAnimation (const Animator::AnimationId nId)
-bool Animator::ProcessAnimations (void)
+bool Animator::ProcessAnimations (const double nTime)
{
bool bExpired (false);
@@ -212,7 +215,7 @@ bool Animator::ProcessAnimations (void)
AnimationList::const_iterator iAnimation;
for (iAnimation=aCopy.begin(); iAnimation!=aCopy.end(); ++iAnimation)
{
- bExpired |= (*iAnimation)->Run();
+ bExpired |= (*iAnimation)->Run(nTime);
}
return bExpired;
@@ -242,26 +245,34 @@ void Animator::CleanUpAnimationList (void)
+void Animator::RequestNextFrame (const double nFrameStart)
+{
+ if ( ! maTimer.IsActive())
+ {
+ // Prevent redraws except for the ones in TimeoutHandler. While the
+ // Animator is active it will schedule repaints regularly. Repaints
+ // in between would only lead to visual artifacts.
+ mpDrawLock.reset(new view::SlideSorterView::DrawLock(mrSlideSorter));
+ maTimer.Start();
+ }
+}
+
+
+
+
IMPL_LINK(Animator, TimeoutHandler, Timer*, EMPTYARG)
{
if (mbIsDisposed)
return 0;
- OSL_TRACE("Animator timeout start");
-
- if (ProcessAnimations())
+ if (ProcessAnimations(maElapsedTime.getElapsedTime()))
CleanUpAnimationList();
// Unlock the draw lock. This should lead to a repaint.
mpDrawLock.reset();
if (maAnimations.size() > 0)
- {
- mpDrawLock.reset(new view::SlideSorterView::DrawLock(mrSlideSorter));
- maTimer.Start();
- }
-
- OSL_TRACE("Animator timeout end");
+ RequestNextFrame();
return 0;
}
@@ -273,20 +284,26 @@ IMPL_LINK(Animator, TimeoutHandler, Timer*, EMPTYARG)
Animator::Animation::Animation (
const Animator::AnimationFunctor& rAnimation,
- const double nDelta,
- const double nEnd,
+ const double nDuration,
+ const double nGlobalTime,
const Animator::AnimationId nId,
const Animator::FinishFunctor& rFinishFunctor)
: maAnimation(rAnimation),
maFinishFunctor(rFinishFunctor),
mnAnimationId(nId),
- mnValue(0),
- mnEnd(nEnd),
- mnDelta(nDelta),
+ mnDuration(nDuration),
+ mnEnd(nGlobalTime + nDuration),
+ mnGlobalTimeAtStart(nGlobalTime),
mbIsExpired(false)
{
- maAnimation(mnValue);
- mnValue = mnDelta;
+ if (mnDuration > 0)
+ maAnimation(0.0);
+ else if (mnDuration < 0)
+ maAnimation(nGlobalTime);
+ else
+ {
+ OSL_ASSERT(mnDuration != 0);
+ }
}
@@ -299,25 +316,30 @@ Animator::Animation::~Animation (void)
-bool Animator::Animation::Run (void)
+bool Animator::Animation::Run (const double nGlobalTime)
{
if ( ! mbIsExpired)
{
- if (mnEnd>=0 && mnValue>=mnEnd)
+ if (mnDuration > 0)
{
- maAnimation(mnEnd);
- Expire();
- return true;
+ if (nGlobalTime >= mnEnd)
+ {
+ maAnimation(1.0);
+ Expire();
+ }
+ else
+ {
+ maAnimation((nGlobalTime - mnGlobalTimeAtStart) / mnDuration);
+ }
}
- else
+ else if (mnDuration < 0)
{
- maAnimation(mnValue);
- mnValue += mnDelta;
- return false;
+ // Animations without end have to be expired by their owner.
+ maAnimation(nGlobalTime);
}
}
- else
- return true;
+
+ return mbIsExpired;
}
diff --git a/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx b/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx
index 0c0213e9e702..900658c4bcad 100644
--- a/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx
@@ -35,6 +35,7 @@
#include "PaneDockingWindow.hxx"
#include "controller/SlideSorterController.hxx"
#include "controller/SlsSelectionManager.hxx"
+#include "controller/SlsCurrentSlideManager.hxx"
#include "model/SlideSorterModel.hxx"
#include "model/SlsPageDescriptor.hxx"
#include "view/SlideSorterView.hxx"
@@ -44,6 +45,8 @@
#include "Window.hxx"
#include "sdpage.hxx"
+#define UNIFY_FOCUS_AND_CURRENT_PAGE
+
namespace sd { namespace slidesorter { namespace controller {
FocusManager::FocusManager (SlideSorter& rSlideSorter)
@@ -164,7 +167,11 @@ void FocusManager::MoveFocus (FocusMoveDirection eDirection)
}
if (mbPageIsFocused)
+ {
+#ifndef UNIFY_FOCUS_AND_CURRENT_PAGE
ShowFocusIndicator(GetFocusedPageDescriptor(), true);
+#endif
+ }
}
}
@@ -288,6 +295,7 @@ void FocusManager::ShowFocusIndicator (
const model::SharedPageDescriptor& rpDescriptor,
const bool bScrollToFocus)
{
+#ifndef UNIFY_FOCUS_AND_CURRENT_PAGE
if (rpDescriptor.get() != NULL)
{
mrSlideSorter.GetView().SetState(rpDescriptor, model::PageDescriptor::ST_Focused, true);
@@ -303,6 +311,7 @@ void FocusManager::ShowFocusIndicator (
mrSlideSorter.GetView().RequestRepaint (rpDescriptor);
NotifyFocusChangeListeners();
}
+#endif
}
diff --git a/sd/source/ui/slidesorter/controller/SlsProperties.cxx b/sd/source/ui/slidesorter/controller/SlsProperties.cxx
index 829cc1b05368..48cc8a705cde 100644
--- a/sd/source/ui/slidesorter/controller/SlsProperties.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsProperties.cxx
@@ -45,7 +45,7 @@ Properties::Properties (void)
mbIsSuspendPreviewUpdatesDuringFullScreenPresentation(true),
maBackgroundColor(Application::GetSettings().GetStyleSettings().GetWindowColor()),
maTextColor(Application::GetSettings().GetStyleSettings().GetActiveTextColor()),
- maSelectionColor(Application::GetSettings().GetStyleSettings().GetMenuHighlightColor()),
+ maSelectionColor(Application::GetSettings().GetStyleSettings().GetHighlightColor()),
maHighlightColor(Application::GetSettings().GetStyleSettings().GetMenuHighlightColor()),
mbIsUIReadOnly(false)
{
@@ -61,6 +61,17 @@ Properties::~Properties (void)
+void Properties::HandleDataChangeEvent (void)
+{
+ maBackgroundColor = Application::GetSettings().GetStyleSettings().GetWindowColor();
+ maTextColor = Application::GetSettings().GetStyleSettings().GetActiveTextColor();
+ maSelectionColor = Application::GetSettings().GetStyleSettings().GetHighlightColor();
+ maHighlightColor = Application::GetSettings().GetStyleSettings().GetMenuHighlightColor();
+}
+
+
+
+
bool Properties::IsHighlightCurrentSlide (void) const
{
return mbIsHighlightCurrentSlide;
diff --git a/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx b/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
index 5f4e2b3c1fb5..63daebe6544d 100644
--- a/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
@@ -500,10 +500,11 @@ void ScrollBarManager::SetTop (const sal_Int32 nNewTop)
// Flush pending repaints before scrolling to avoid temporary artifacts.
mrSlideSorter.GetContentWindow()->Update();
+ OSL_TRACE("setting top of vertical scroll bar to %d", nNewTop);
mpVerticalScrollBar->SetThumbPos(nNewTop);
mnVerticalPosition = double(nNewTop) / double(mpVerticalScrollBar->GetRange().Len());
- mrSlideSorter.GetContentWindow()->SetVisibleXY (
- mnHorizontalPosition, mnVerticalPosition);
+ mrSlideSorter.GetContentWindow()->SetVisibleXY (mnHorizontalPosition, mnVerticalPosition);
+ mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
}
}
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
index 362bd4abf17f..1c61a14ac261 100644
--- a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
@@ -353,16 +353,16 @@ BOOL SelectionFunction::MouseMove (const MouseEvent& rEvent)
(rEvent.GetButtons() & MOUSE_LEFT)!=0);
}
- Rectangle aRectangle (Point(0,0),mpWindow->GetOutputSizePixel());
- if ( ! aRectangle.IsInside(aMousePosition)
- && mpSubstitutionHandler)
+ if (rEvent.IsLeaveWindow())
{
- // Mouse left the window with pressed left button. Make it a drag.
- StartDrag(aMousePosition);
- // Mouse motion events are not sent to us while the mouse is outside
- // the window and drag&drop is active. Therefore hide the
- // substitution.
- // mpSubstitutionHandler->Hide();
+ // Rectangle aRectangle (Point(0,0),mpWindow->GetOutputSizePixel());
+ // if ( ! aRectangle.IsInside(aMousePosition)
+ if (mpSubstitutionHandler)
+ {
+ // Mouse left the window with pressed left button. Make it a drag.
+ StartDrag(aMousePosition);
+ }
+ mrSlideSorter.GetView().SetPageUnderMouse(model::SharedPageDescriptor());
}
else
{
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
index ff511b60625e..432d370234f1 100644
--- a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
@@ -105,7 +105,9 @@ SelectionManager::SelectionManager (SlideSorter& rSlideSorter)
: mrSlideSorter(rSlideSorter),
mrController(rSlideSorter.GetController()),
maSelectionBeforeSwitch(),
- mbIsMakeSelectionVisiblePending(true)
+ mbIsMakeSelectionVisiblePending(true),
+ mnInsertionPosition(-1),
+ mnAnimationId(Animator::NotAnAnimationId)
{
}
@@ -440,9 +442,13 @@ Size SelectionManager::MakeRectangleVisible (const Rectangle& rBox)
if (nNewTop != aVisibleArea.Top())
{
if (mrSlideSorter.GetProperties()->IsSmoothSelectionScrolling())
- mrController.GetAnimator()->AddAnimation(
+ {
+ if (mnAnimationId != Animator::NotAnAnimationId)
+ mrController.GetAnimator()->RemoveAnimation(mnAnimationId);
+ mnAnimationId = mrController.GetAnimator()->AddAnimation(
VerticalVisibleAreaScroller(mrSlideSorter, aVisibleArea.Top(), nNewTop),
300);
+ }
else
VerticalVisibleAreaScroller(mrSlideSorter, aVisibleArea.Top(), nNewTop)(1.0);
}
@@ -644,10 +650,13 @@ void VerticalVisibleAreaScroller::operator() (const double nTime)
{
const double nLocalTime (maAccelerationFunction(nTime));
const sal_Int32 nNewTop (mnStart * (1.0 - nLocalTime) + mnEnd * nLocalTime);
+ mrSlideSorter.GetController().GetScrollBarManager().SetTop(nNewTop);
+ /*
mrSlideSorter.GetViewShell()->Scroll(
0,
nNewTop - mrSlideSorter.GetController().GetScrollBarManager().GetTop());
mrSlideSorter.GetView().InvalidatePageObjectVisibilities();
+ */
}
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx b/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx
index e9683e0dc075..6a63060316f1 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx
@@ -34,6 +34,7 @@
#include "SlideSorter.hxx"
#include "view/SlideSorterView.hxx"
+#include <canvas/elapsedtime.hxx>
#include <vcl/timer.hxx>
#include <sal/types.h>
#include <vector>
@@ -99,6 +100,7 @@ private:
class Animation;
typedef ::std::vector<boost::shared_ptr<Animation> > AnimationList;
AnimationList maAnimations;
+ ::canvas::tools::ElapsedTime maElapsedTime;
::boost::scoped_ptr<view::SlideSorterView::DrawLock> mpDrawLock;
@@ -107,15 +109,19 @@ private:
DECL_LINK(TimeoutHandler, Timer*);
/** Execute one step of every active animation.
+ @param nTime
+ Time measured in milli seconds with some arbitrary reference point.
@return
When one or more animation has finished then <TRUE/> is
returned. Call CleanUpAnimationList() in this case.
*/
- bool ProcessAnimations (void);
+ bool ProcessAnimations (const double nTime);
/** Remove animations that have expired.
*/
void CleanUpAnimationList (void);
+
+ void RequestNextFrame (const double nFrameStart = 0);
};
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx b/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx
index 53a72a5ec6cf..15aa980aaca5 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsProperties.hxx
@@ -44,6 +44,11 @@ public:
Properties (void);
~Properties (void);
+ /** Call this method after receiving a VCLEVENT_APPLICATION_DATACHANGED
+ event.
+ */
+ void HandleDataChangeEvent (void);
+
/** When this method returns <TRUE/> then the current slide is
highlighted in the view. The default value is <FALSE/>.
*/
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx
index 665d01a89987..47bcafe134f4 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsSelectionManager.hxx
@@ -33,6 +33,7 @@
#define SD_SLIDESORTER_CONTROLLER_SELECTION_MANAGER_HXX
#include "model/SlsSharedPageDescriptor.hxx"
+#include "controller/SlsAnimator.hxx"
#include <sal/types.h>
#include <tools/gen.hxx>
#include <basegfx/range/b2irectangle.hxx>
@@ -175,6 +176,8 @@ private:
*/
sal_Int32 mnInsertionPosition;
+ Animator::AnimationId mnAnimationId;
+
/** Delete the given list of normal pages. This method is a helper
function for DeleteSelectedPages().
@param rSelectedNormalPages
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
index 65f67efaeb22..026b60238d91 100644
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlsPageObjectLayouter.hxx
@@ -73,6 +73,8 @@ public:
MouseOverIndicator,
// Bounding box of the page number.
PageNumber,
+ // Bounding box of the frame that sometimes is painted around the page number.
+ PageNumberFrame,
// Bounding box of the pane name.
Name,
// Indicator whether or not there is a slide transition associated
@@ -140,18 +142,12 @@ public:
const Point& rWindowLocation);
private:
- /// Minimal border around the page number area.
- static const sal_Int32 mnPageNumberOffset;
- static const sal_Int32 mnOuterBorderWidth;
- static const sal_Int32 mnInfoAreaMinWidth;
- static const Size maButtonSize;
- static const sal_Int32 mnButtonGap;
-
SharedSdWindow mpWindow;
Size maPageObjectSize;
double mnModelToWindowScale;
Rectangle maPageObjectBoundingBox;
Rectangle maPageNumberAreaBoundingBox;
+ Rectangle maPageNumberFrameBoundingBox;
Rectangle maPreviewBoundingBox;
Rectangle maTransitionEffectBoundingBox;
Rectangle maButtonAreaBoundingBox;
@@ -161,7 +157,7 @@ private:
Rectangle CalculatePreviewBoundingBox (
Size& rPageObjectSize,
const Size& rPreviewModelSize,
- const sal_Int32 nInfoAreaWidth);
+ const sal_Int32 nPageNumberAreaWidth);
};
diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx
index 4b01376aaeeb..ec42b3db4fd9 100644
--- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx
@@ -62,6 +62,13 @@ public:
void NotifyResize (void);
+ /** Called when the theme changes, either because it is replaced with
+ another or because the system colors have changed. So, even when
+ the given theme is the same object as the one already in use by this
+ painter everything that depends on the theme is updated.
+ */
+ void SetTheme (const ::boost::shared_ptr<view::Theme>& rpTheme);
+
private:
const Layouter& mrLayouter;
::boost::shared_ptr<PageObjectLayouter> mpPageObjectLayouter;
diff --git a/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx b/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx
index c8bdfd6e9882..ad6a9ee7b2cb 100644
--- a/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx
@@ -76,7 +76,9 @@ public:
ButtonBackground,
MouseOverColor,
PageNumberBorder,
- Selection
+ PageNumberColor,
+ Selection,
+ PreviewBorder
};
ColorData GetColor (const ColorType eType);
@@ -103,7 +105,18 @@ public:
BitmapEx GetIcon (const IconType eType);
private:
+ class GradientDescriptor
+ {
+ public:
+ ColorData maFillColor1;
+ ColorData maFillColor2;
+ ColorData maBorderColor1;
+ ColorData maBorderColor2;
+ };
ColorData maBackgroundColor;
+ GradientDescriptor maNormalGradient;
+ GradientDescriptor maSelectedGradient;
+ GradientDescriptor maMouseOverGradient;
BitmapEx maRawShadow;
BitmapEx maInsertionIndicator;
};
diff --git a/sd/source/ui/slidesorter/view/SlideSorterView.cxx b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
index 1f77a40df57b..ceef51c8071b 100644
--- a/sd/source/ui/slidesorter/view/SlideSorterView.cxx
+++ b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
@@ -525,7 +525,8 @@ void SlideSorterView::PostModelChange (void)
model::PageEnumerationProvider::CreateAllPagesEnumeration(mrModel));
// The new page objects have to be scaled and positioned.
- Layout ();
+ Layout();
+ RequestRepaint();
}
@@ -792,9 +793,9 @@ void SlideSorterView::CompleteRedraw (
sdr::contact::ViewObjectContactRedirector* pRedirector)
{
const double nStartTime (gaTimer.getElapsedTime());
- OSL_TRACE("SlideSorterView::CompleteRedraw start at %f, %d",
+ OSL_TRACE("SlideSorterView::CompleteRedraw start at %f, %s",
nStartTime,
- mnLockRedrawSmph);
+ mnLockRedrawSmph ? "locked" : "");
if (pDevice == NULL || pDevice!=mrSlideSorter.GetContentWindow().get())
return;
diff --git a/sd/source/ui/slidesorter/view/SlsLayouter.cxx b/sd/source/ui/slidesorter/view/SlsLayouter.cxx
index 5eab152419eb..0f69e892779b 100644
--- a/sd/source/ui/slidesorter/view/SlsLayouter.cxx
+++ b/sd/source/ui/slidesorter/view/SlsLayouter.cxx
@@ -48,8 +48,8 @@ Layouter::Layouter (const SharedSdWindow& rpWindow)
mnRightBorder(30),
mnTopBorder(10),
mnBottomBorder(10),
- mnVerticalGap (20),
- mnHorizontalGap (20),
+ mnVerticalGap (10),
+ mnHorizontalGap (10),
mnMinimalWidth (100),
mnPreferredWidth (200),
mnMaximalWidth (300),
@@ -477,7 +477,7 @@ Point Layouter::GetInsertionMarkerLocation (
if (bLeftOrTop)
{
// Above.
- aLocation.setY(aBox.Top() - mnVerticalGap/2);
+ aLocation.setY(aBox.Top() - (mnVerticalGap+1)/2 - 1);
}
else
{
diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx
index be5c5066863a..10cd7ca93ef6 100644
--- a/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx
+++ b/sd/source/ui/slidesorter/view/SlsPageObjectLayouter.cxx
@@ -39,12 +39,15 @@
namespace sd { namespace slidesorter { namespace view {
-const sal_Int32 PageObjectLayouter::mnPageNumberOffset = 9;
-const sal_Int32 PageObjectLayouter::mnOuterBorderWidth = 6;
-const sal_Int32 PageObjectLayouter::mnInfoAreaMinWidth = 26;
-const Size PageObjectLayouter::maButtonSize (32,32);
-const sal_Int32 PageObjectLayouter::mnButtonGap (5);
-
+namespace {
+const static sal_Int32 gnPageNumberOffset = 5;
+const static sal_Int32 gnPageNumberFrameHorizontalOffset = 2;
+const static sal_Int32 gnPageNumberFrameVerticalOffset = 1;
+const static sal_Int32 gnOuterBorderWidth = 6;
+const static sal_Int32 gnInfoAreaMinWidth = 26;
+const static Size gaButtonSize (32,32);
+const static sal_Int32 gnButtonGap (5);
+}
PageObjectLayouter::PageObjectLayouter (
const Size& rPageObjectWindowSize,
@@ -63,37 +66,41 @@ PageObjectLayouter::PageObjectLayouter (
{
const Size aPageNumberAreaSize (GetPageNumberAreaSize(nPageCount));
- const int nMaximumBorderWidth (mnOuterBorderWidth);
-
- // Set up some bounding boxes relative to the page object origin.
-
- maPageNumberAreaBoundingBox = Rectangle(
- mnPageNumberOffset,
- nMaximumBorderWidth,
- mnPageNumberOffset + aPageNumberAreaSize.Width(),
- nMaximumBorderWidth + aPageNumberAreaSize.Height());
+ const int nMaximumBorderWidth (gnOuterBorderWidth);
maPreviewBoundingBox = CalculatePreviewBoundingBox(
maPageObjectSize,
Size(rPageSize.Width(), rPageSize.Height()),
- ::std::min(aPageNumberAreaSize.Width(), mnInfoAreaMinWidth));
+ aPageNumberAreaSize.Width());
maPageObjectBoundingBox = Rectangle(Point(0,0), maPageObjectSize);
+ maPageNumberAreaBoundingBox = Rectangle(
+ Point(
+ maPreviewBoundingBox.Left()
+ - gnPageNumberOffset
+ - gnPageNumberFrameHorizontalOffset
+ - aPageNumberAreaSize.Width(),
+ nMaximumBorderWidth),
+ aPageNumberAreaSize);
+
+ maPageNumberFrameBoundingBox = Rectangle(
+ maPageNumberAreaBoundingBox.Left() - gnPageNumberFrameHorizontalOffset,
+ maPageNumberAreaBoundingBox.Top() - gnPageNumberFrameVerticalOffset,
+ maPageNumberAreaBoundingBox.Right() + gnPageNumberFrameHorizontalOffset,
+ maPageNumberAreaBoundingBox.Bottom() + gnPageNumberFrameVerticalOffset);
+
const Size aIconSize (maTransitionEffectIcon.GetSizePixel());
- const int nLeft (maPreviewBoundingBox.Left()
- - mnPageNumberOffset - aIconSize.Width() - nMaximumBorderWidth);
- const int nTop (maPreviewBoundingBox.Bottom() - aIconSize.Height());
maTransitionEffectBoundingBox = Rectangle(
- nLeft,
- nTop,
- nLeft + aIconSize.Width(),
- nTop + aIconSize.Height());
+ Point(
+ (maPreviewBoundingBox.Left() - aIconSize.Width()) / 2,
+ maPreviewBoundingBox.Bottom() - aIconSize.Height()),
+ aIconSize);
maButtonAreaBoundingBox = Rectangle(
0,
- maPageObjectBoundingBox.Bottom() - maButtonSize.Height() - mnButtonGap,
- maPageObjectBoundingBox.Right() - mnButtonGap,
- maPageObjectBoundingBox.Bottom() - mnButtonGap);
+ maPageObjectBoundingBox.Bottom() - gaButtonSize.Height() - gnButtonGap,
+ maPageObjectBoundingBox.Right() - gnButtonGap,
+ maPageObjectBoundingBox.Bottom() - gnButtonGap);
}
@@ -109,42 +116,44 @@ PageObjectLayouter::~PageObjectLayouter(void)
Rectangle PageObjectLayouter::CalculatePreviewBoundingBox (
Size& rPageObjectSize,
const Size& rPageSize,
- const sal_Int32 nInfoAreaWidth)
+ const sal_Int32 nPageNumberAreaWidth)
{
- const int nMaximumBorderWidth (mnOuterBorderWidth);
- const int nLeftAreaWidth (
- 2*mnPageNumberOffset
- + ::std::max(
- nInfoAreaWidth,
- maTransitionEffectIcon.GetSizePixel().Width()));
- int nPreviewWidth;
- int nPreviewHeight;
+ const sal_Int32 nIconWidth (maTransitionEffectIcon.GetSizePixel().Width());
+ const sal_Int32 nLeftAreaWidth (
+ ::std::max(
+ gnInfoAreaMinWidth,
+ 2*gnPageNumberOffset
+ + ::std::max(
+ nPageNumberAreaWidth + 2 * gnPageNumberFrameHorizontalOffset,
+ nIconWidth)));
+ sal_Int32 nPreviewWidth;
+ sal_Int32 nPreviewHeight;
const double nPageAspectRatio (double(rPageSize.Width()) / double(rPageSize.Height()));
if (rPageObjectSize.Height() == 0)
{
// Calculate height so that the preview fills the available
// horizontal space completely while observing the aspect ratio of
// the preview.
- nPreviewWidth = rPageObjectSize.Width() - nLeftAreaWidth - 2*nMaximumBorderWidth - 1;
+ nPreviewWidth = rPageObjectSize.Width() - nLeftAreaWidth - gnOuterBorderWidth - 1;
nPreviewHeight = ::basegfx::fround(nPreviewWidth / nPageAspectRatio);
- rPageObjectSize.setHeight(nPreviewHeight + 2*nMaximumBorderWidth + 1);
+ rPageObjectSize.setHeight(nPreviewHeight + 2*gnOuterBorderWidth + 1);
}
else if (rPageObjectSize.Width() == 0)
{
// Calculate the width of the page object so that the preview fills
// the available vertical space completely while observing the
// aspect ratio of the preview.
- nPreviewHeight = rPageObjectSize.Height() - 2*nMaximumBorderWidth - 1;
+ nPreviewHeight = rPageObjectSize.Height() - 2*gnOuterBorderWidth - 1;
nPreviewWidth = ::basegfx::fround(nPreviewHeight * nPageAspectRatio);
- rPageObjectSize.setWidth(nPreviewWidth + nLeftAreaWidth + 2*nMaximumBorderWidth + 1);
+ rPageObjectSize.setWidth(nPreviewWidth + nLeftAreaWidth + gnOuterBorderWidth + 1);
}
else
{
// The size of the page object is given. Calculate the size of the
// preview.
- nPreviewWidth = rPageObjectSize.Width() - nLeftAreaWidth - 2*nMaximumBorderWidth - 1;
- nPreviewHeight = rPageObjectSize.Height() - 2*nMaximumBorderWidth - 1;
+ nPreviewWidth = rPageObjectSize.Width() - nLeftAreaWidth - gnOuterBorderWidth - 1;
+ nPreviewHeight = rPageObjectSize.Height() - gnOuterBorderWidth - 1;
if (double(nPreviewWidth)/double(nPreviewHeight) > nPageAspectRatio)
nPreviewWidth = ::basegfx::fround(nPreviewHeight * nPageAspectRatio);
else
@@ -152,9 +161,8 @@ Rectangle PageObjectLayouter::CalculatePreviewBoundingBox (
}
// When the preview does not fill the available space completely then
// place it flush right and vertically centered.
- const int nLeft (rPageObjectSize.Width() - nMaximumBorderWidth - nPreviewWidth - 1);
- const int nTop (nMaximumBorderWidth
- + (rPageObjectSize.Height() - 2*nMaximumBorderWidth - nPreviewHeight)/2);
+ const int nLeft (rPageObjectSize.Width() - gnOuterBorderWidth - nPreviewWidth - 1);
+ const int nTop ((rPageObjectSize.Height() - nPreviewHeight)/2);
return Rectangle(
nLeft,
nTop,
@@ -187,6 +195,10 @@ Rectangle PageObjectLayouter::GetBoundingBox (
aBoundingBox = maPageNumberAreaBoundingBox;
break;
+ case PageNumberFrame:
+ aBoundingBox = maPageNumberFrameBoundingBox;
+ break;
+
case Name:
aBoundingBox = maPageNumberAreaBoundingBox;
break;
@@ -203,9 +215,9 @@ Rectangle PageObjectLayouter::GetBoundingBox (
aBoundingBox = Rectangle(
maPageObjectBoundingBox.BottomRight()
- Point(
- (nIndex+1)*(maButtonSize.Width() + mnButtonGap),
- maButtonSize.Height() + mnButtonGap),
- maButtonSize);
+ (nIndex+1)*(gaButtonSize.Width() + gnButtonGap),
+ gaButtonSize.Height() + gnButtonGap),
+ gaButtonSize);
break;
}
diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx
index f0edc65efd4a..6fd2fbf55bc3 100644
--- a/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx
+++ b/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx
@@ -300,6 +300,15 @@ void PageObjectPainter::NotifyResize (void)
+void PageObjectPainter::SetTheme (const ::boost::shared_ptr<view::Theme>& rpTheme)
+{
+ mpTheme = rpTheme;
+ NotifyResize();
+}
+
+
+
+
void PageObjectPainter::PaintBackground (
OutputDevice& rDevice,
const model::SharedPageDescriptor& rpDescriptor) const
@@ -357,15 +366,6 @@ void PageObjectPainter::PaintPreview (
rDevice.DrawBitmapEx(aBox.TopLeft(), aBitmap);
}
-
- // Draw border around preview.
- --aBox.Left();
- --aBox.Top();
- ++aBox.Right();
- ++aBox.Bottom();
- rDevice.SetLineColor(Color(0,0,0));
- rDevice.SetFillColor();
- rDevice.DrawRect(aBox);
}
@@ -375,7 +375,7 @@ void PageObjectPainter::PaintPageNumber (
OutputDevice& rDevice,
const model::SharedPageDescriptor& rpDescriptor) const
{
- Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
+ const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
rpDescriptor,
PageObjectLayouter::PageNumber,
PageObjectLayouter::WindowCoordinateSystem));
@@ -385,22 +385,22 @@ void PageObjectPainter::PaintPageNumber (
const sal_Int32 nPageNumber ((rpDescriptor->GetPage()->GetPageNum() - 1) / 2 + 1);
const String sPageNumber (String::CreateFromInt32(nPageNumber));
rDevice.SetFont(*mpPageNumberFont);
- rDevice.SetTextColor(Color(0x0848a8f));
- rDevice.DrawText(aBox.TopLeft(), sPageNumber);
+ rDevice.SetTextColor(Color(mpTheme->GetColor(Theme::PageNumberColor)));
+ rDevice.DrawText(aBox, sPageNumber, TEXT_DRAW_RIGHT | TEXT_DRAW_VCENTER);
if (rpDescriptor->GetVisualState().GetCurrentVisualState()
== model::VisualState::VS_Excluded)
{
// Paint border around the number.
- aBox.Left()-= 2;
- aBox.Top() -= 1;
- aBox.Right() += 2;
- aBox.Bottom() += 1;
+ const Rectangle aFrameBox (mpPageObjectLayouter->GetBoundingBox(
+ rpDescriptor,
+ PageObjectLayouter::PageNumberFrame,
+ PageObjectLayouter::WindowCoordinateSystem));
rDevice.SetLineColor(Color(mpTheme->GetColor(Theme::PageNumberBorder)));
rDevice.SetFillColor();
- rDevice.DrawRect(aBox);
+ rDevice.DrawRect(aFrameBox);
- rDevice.DrawLine(aBox.TopLeft(), aBox.BottomRight());
+ rDevice.DrawLine(aFrameBox.TopLeft(), aBox.BottomRight());
}
}
@@ -536,7 +536,6 @@ Bitmap PageObjectPainter::CreateBackgroundBitmap(
// Paint the background with a linear gradient that starts some pixels
// below the top and ends some pixels above the bottom.
-#if 1
const sal_Int32 nDefaultConstantSize(aSize.Height()/4);
const sal_Int32 nMinimalGradientSize(40);
const sal_Int32 nHeight (aSize.Height());
@@ -563,15 +562,6 @@ Bitmap PageObjectPainter::CreateBackgroundBitmap(
}
aBitmapDevice.DrawLine(Point(0,nY), Point(aSize.Width(),nY));
}
-#else
- const Color aTopColor(mpTheme->GetColor(eColorType, Theme::Fill1));
- const Color aBottomColor(mpTheme->GetColor(eColorType, Theme::Fill2));
- Color aColor (aTopColor);
- aColor.Merge(aBottomColor, 128);
- aBitmapDevice.SetFillColor(aColor);
- aBitmapDevice.SetLineColor(aColor);
- aBitmapDevice.DrawRect(Rectangle(Point(0,0), aSize));
-#endif
// Paint the border.
aBitmapDevice.SetFillColor();
@@ -582,15 +572,17 @@ Bitmap PageObjectPainter::CreateBackgroundBitmap(
// Get bounding box of the preview around which a shadow is painted.
// Compensate for the border around the preview.
- Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
+ const Rectangle aBox (mpPageObjectLayouter->GetBoundingBox(
model::SharedPageDescriptor(),
PageObjectLayouter::Preview,
PageObjectLayouter::WindowCoordinateSystem));
- aBox.Left() -= 1;
- aBox.Top() -= 1;
- aBox.Right() += 1;
- aBox.Bottom() += 1;
- mpShadowPainter->PaintFrame(aBitmapDevice, aBox);
+ Rectangle aFrameBox (aBox.Left()-1,aBox.Top()-1,aBox.Right()+1,aBox.Bottom()+1);
+ mpShadowPainter->PaintFrame(aBitmapDevice, aFrameBox);
+
+ // Clear the area where the preview will later be painted.
+ aBitmapDevice.SetFillColor(mpTheme->GetColor(Theme::Background));
+ aBitmapDevice.SetLineColor(mpTheme->GetColor(Theme::PreviewBorder));
+ aBitmapDevice.DrawRect(aFrameBox);
return aBitmapDevice.GetBitmap (Point(0,0),aSize);
}
diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectViewContact.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectViewContact.cxx
deleted file mode 100644
index 5849140f8327..000000000000
--- a/sd/source/ui/slidesorter/view/SlsPageObjectViewContact.cxx
+++ /dev/null
@@ -1,143 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: SlsPageObjectViewContact.cxx,v $
- * $Revision: 1.10 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsPageObjectViewContact.hxx"
-
-#include "model/SlsPageDescriptor.hxx"
-#include "controller/SlsPageObjectFactory.hxx"
-
-#include <svx/svdopage.hxx>
-#include <tools/debug.hxx>
-
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-
-using namespace ::sdr::contact;
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-PageObjectViewContact::PageObjectViewContact (
- SdrPageObj& rPageObj,
- const model::SharedPageDescriptor& rpDescriptor)
- : ViewContactOfPageObj (rPageObj),
- mbInDestructor(false),
- mpDescriptor(rpDescriptor)
-{
-}
-
-PageObjectViewContact::~PageObjectViewContact (void)
-{
- // remember that this instance is in destruction
- mbInDestructor = true;
-}
-
-
-
-ViewObjectContact&
- PageObjectViewContact::CreateObjectSpecificViewObjectContact(
- ObjectContact& rObjectContact)
-{
- OSL_ASSERT(mpDescriptor.get()!=NULL);
-
- ViewObjectContact* pResult
- = mpDescriptor->GetPageObjectFactory().CreateViewObjectContact (
- rObjectContact,
- *this);
- DBG_ASSERT (pResult!=NULL,
- "PageObjectViewContact::CreateObjectSpecificViewObjectContact() was not able to create object.");
- return *pResult;
-}
-
-const SdrPage* PageObjectViewContact::GetPage (void) const
-{
- // when this instance itself is in destruction, do no longer
- // provide the referenced page to VOC childs of this OC. This
- // happens e.g. in destructor which destroys all child-VOCs which
- // may in their implementation still reference their VC from
- // their own destructor
- if (!mbInDestructor)
- return GetReferencedPage();
- else
- return NULL;
-}
-
-void PageObjectViewContact::ActionChanged (void)
-{
- ViewContactOfPageObj::ActionChanged();
-}
-
-Rectangle PageObjectViewContact::GetPageObjectBoundingBox (void) const
-{
- // use model data directly here
- OSL_ASSERT(mpDescriptor.get()!=NULL);
- Rectangle aRetval(GetPageObject().GetLastBoundRect());
- const SvBorder aPageDescriptorBorder(mpDescriptor->GetModelBorder());
-
- aRetval.Left() -= aPageDescriptorBorder.Left();
- aRetval.Top() -= aPageDescriptorBorder.Top();
- aRetval.Right() += aPageDescriptorBorder.Right();
- aRetval.Bottom() += aPageDescriptorBorder.Bottom();
-
- return aRetval;
-}
-
-SdrPageObj& PageObjectViewContact::GetPageObject (void) const
-{
- return ViewContactOfPageObj::GetPageObj();
-}
-
-drawinglayer::primitive2d::Primitive2DSequence PageObjectViewContact::createViewIndependentPrimitive2DSequence() const
-{
- // ceate graphical visualisation data. Since this is the view-independent version which should not be used,
- // create a replacement graphic visualisation here. Use GetLastBoundRect to access the model data directly
- // which is aOutRect for SdrPageObj.
- OSL_ASSERT(mpDescriptor.get()!=NULL);
- Rectangle aModelRectangle(GetPageObj().GetLastBoundRect());
- const SvBorder aBorder(mpDescriptor->GetModelBorder());
-
- aModelRectangle.Left() -= aBorder.Left();
- aModelRectangle.Right() += aBorder.Right();
- aModelRectangle.Top() -= aBorder.Top();
- aModelRectangle.Bottom() += aBorder.Bottom();
-
- const basegfx::B2DRange aModelRange(aModelRectangle.Left(), aModelRectangle.Top(), aModelRectangle.Right(), aModelRectangle.Bottom());
- const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aModelRange));
- const basegfx::BColor aYellow(1.0, 1.0, 0.0);
- const drawinglayer::primitive2d::Primitive2DReference xReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aOutline, aYellow));
-
- return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
-}
-
-} } } // end of namespace ::sd::slidesorter::view
-
-// eof
diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx
deleted file mode 100644
index 8c3fd4532c4f..000000000000
--- a/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx
+++ /dev/null
@@ -1,1421 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: SlsPageObjectViewObjectContact.cxx,v $
- * $Revision: 1.23 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "precompiled_sd.hxx"
-
-#include "view/SlsPageObjectViewObjectContact.hxx"
-
-#include "controller/SlsProperties.hxx"
-#include "view/SlideSorterView.hxx"
-#include "view/SlsPageObjectViewContact.hxx"
-#include "view/SlsPageObject.hxx"
-#include "view/SlsFontProvider.hxx"
-#include "model/SlsPageDescriptor.hxx"
-#include "cache/SlsPageCache.hxx"
-#include "cache/SlsPageCacheManager.hxx"
-#include "res_bmp.hrc"
-#include "tools/IconCache.hxx"
-#include "PreviewRenderer.hxx"
-
-#include "sdpage.hxx"
-#include "sdresid.hxx"
-#include "glob.hrc"
-#include "drawdoc.hxx"
-#include <svx/sdr/contact/displayinfo.hxx>
-#include <svx/sdr/contact/viewcontact.hxx>
-#include <svx/svdopage.hxx>
-#include <svx/svdpagv.hxx>
-#include <svx/xlndsit.hxx>
-#include <svx/xlnclit.hxx>
-#include <svx/svdoutl.hxx>
-#include <svx/sdrpagewindow.hxx>
-#include <vcl/bitmap.hxx>
-#include <vcl/outdev.hxx>
-#include <vcl/virdev.hxx>
-#include <vcl/lineinfo.hxx>
-#include <tools/color.hxx>
-#include <boost/shared_ptr.hpp>
-#include <com/sun/star/uno/Exception.hpp>
-#include <vcl/svapp.hxx>
-
-using namespace ::sdr::contact;
-using namespace ::sd::slidesorter::model;
-
-using drawinglayer::primitive2d::Primitive2DReference;
-using drawinglayer::primitive2d::Primitive2DSequence;
-
-namespace sd { namespace slidesorter { namespace view {
-
-
-const sal_Int32 PageObjectViewObjectContact::mnSelectionIndicatorOffset = 2;
-const sal_Int32 PageObjectViewObjectContact::mnSelectionIndicatorThickness = 3;
-const sal_Int32 PageObjectViewObjectContact::mnFocusIndicatorOffset = 3;
-const sal_Int32 PageObjectViewObjectContact::mnFadeEffectIndicatorOffset = 9;
-const sal_Int32 PageObjectViewObjectContact::mnFadeEffectIndicatorSize = 14;
-const sal_Int32 PageObjectViewObjectContact::mnPageNumberOffset = 9;
-const sal_Int32 PageObjectViewObjectContact::mnMouseOverEffectOffset = 3;
-const sal_Int32 PageObjectViewObjectContact::mnMouseOverEffectThickness = 1;
-
-PageObjectViewObjectContact::PageObjectViewObjectContact (
- ObjectContact& rObjectContact,
- ViewContact& rViewContact,
- const ::boost::shared_ptr<cache::PageCache>& rpCache,
- const ::boost::shared_ptr<controller::Properties>& rpProperties)
- : ViewObjectContactOfPageObj(rObjectContact, rViewContact),
- mbInDestructor(false),
- mxCurrentPageContents(),
- mpCache(rpCache),
- mpProperties(rpProperties)
-{
- SharedPageDescriptor pDescriptor (GetPageDescriptor());
- OSL_ASSERT(pDescriptor.get()!=NULL);
- if (pDescriptor.get() != NULL)
- pDescriptor->SetViewObjectContact(this);
-}
-
-
-
-
-PageObjectViewObjectContact::~PageObjectViewObjectContact (void)
-{
- mbInDestructor = true;
-
- GetPageDescriptor()->SetViewObjectContact(NULL);
-
- if (mpCache.get() != NULL)
- {
- const SdrPage* pPage = GetPage();
-
- if(pPage)
- {
- mpCache->ReleasePreviewBitmap(GetPage());
- }
- }
-}
-
-
-
-
-void PageObjectViewObjectContact::SetCache (const ::boost::shared_ptr<cache::PageCache>& rpCache)
-{
- mpCache = rpCache;
-}
-
-
-
-
-Rectangle PageObjectViewObjectContact::GetBoundingBox (
- OutputDevice& rDevice,
- BoundingBoxType eType,
- CoordinateSystem eCoordinateSystem) const
-{
- // Most of the bounding boxes are based on the bounding box of the preview.
- // SdrPageObj is a SdrObject, so use SdrObject::aOutRect as model data
- const PageObjectViewContact& rPaObVOC(static_cast<PageObjectViewContact&>(GetViewContact()));
- Rectangle aBoundingBox(rPaObVOC.GetPageObject().GetLastBoundRect());
-
- CoordinateSystem eCurrentCoordinateSystem (ModelCoordinateSystem);
- switch(eType)
- {
- case PageObjectBoundingBox:
- {
- const SvBorder aPageDescriptorBorder(GetPageDescriptor()->GetModelBorder());
- aBoundingBox.Left() -= aPageDescriptorBorder.Left();
- aBoundingBox.Top() -= aPageDescriptorBorder.Top();
- aBoundingBox.Right() += aPageDescriptorBorder.Right();
- aBoundingBox.Bottom() += aPageDescriptorBorder.Bottom();
- break;
- }
- case PreviewBoundingBox:
- {
- // The aBoundingBox already has the right value.
- break;
- }
- case MouseOverIndicatorBoundingBox:
- {
- const sal_Int32 nBorderWidth (mnMouseOverEffectOffset+mnMouseOverEffectThickness);
- const Size aBorderSize (rDevice.PixelToLogic(Size(nBorderWidth,nBorderWidth)));
- aBoundingBox.Left() -= aBorderSize.Width();
- aBoundingBox.Top() -= aBorderSize.Height();
- aBoundingBox.Right() += aBorderSize.Width();
- aBoundingBox.Bottom() += aBorderSize.Height();
- break;
- }
- case FocusIndicatorBoundingBox:
- {
- const sal_Int32 nBorderWidth (mnFocusIndicatorOffset+1);
- const Size aBorderSize (rDevice.PixelToLogic(Size(nBorderWidth,nBorderWidth)));
- aBoundingBox.Left() -= aBorderSize.Width();
- aBoundingBox.Top() -= aBorderSize.Height();
- aBoundingBox.Right() += aBorderSize.Width();
- aBoundingBox.Bottom() += aBorderSize.Height();
- break;
- }
- case SelectionIndicatorBoundingBox:
- {
- const sal_Int32 nBorderWidth(mnSelectionIndicatorOffset+mnSelectionIndicatorThickness);
- const Size aBorderSize (rDevice.PixelToLogic(Size(nBorderWidth,nBorderWidth)));
- aBoundingBox.Left() -= aBorderSize.Width();
- aBoundingBox.Top() -= aBorderSize.Height();
- aBoundingBox.Right() += aBorderSize.Width();
- aBoundingBox.Bottom() += aBorderSize.Height();
- break;
- }
- case PageNumberBoundingBox:
- {
- Size aModelOffset = rDevice.PixelToLogic(Size(mnPageNumberOffset,mnPageNumberOffset));
- Size aNumberSize (GetPageDescriptor()->GetPageNumberAreaModelSize());
- aBoundingBox = Rectangle (
- Point (
- aBoundingBox.Left() - aModelOffset.Width() - aNumberSize.Width(),
- aBoundingBox.Top()),
- aNumberSize);
- break;
- }
-
- case NameBoundingBox:
- break;
-
- case FadeEffectIndicatorBoundingBox:
- Size aModelOffset = rDevice.PixelToLogic(Size (0, mnFadeEffectIndicatorOffset));
- // Flush left just outside the selection rectangle.
- aBoundingBox = Rectangle (
- Point (
- aBoundingBox.Left(),
- aBoundingBox.Bottom() + aModelOffset.Height()
- ),
- rDevice.PixelToLogic (
- IconCache::Instance().GetIcon(BMP_FADE_EFFECT_INDICATOR).GetSizePixel())
- );
- break;
- }
-
- // Make sure the bounding box uses the requested coordinate system.
- if (eCurrentCoordinateSystem != eCoordinateSystem)
- {
- if (eCoordinateSystem == ModelCoordinateSystem)
- aBoundingBox = Rectangle(
- rDevice.PixelToLogic(aBoundingBox.TopLeft()),
- rDevice.PixelToLogic(aBoundingBox.GetSize()));
- else
- aBoundingBox = Rectangle(
- rDevice.LogicToPixel(aBoundingBox.TopLeft()),
- rDevice.LogicToPixel(aBoundingBox.GetSize()));
- }
- return aBoundingBox;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// example implementation for primitive usage for PageObjectViewObjectContact
-
-} } } // end of namespace ::sd::slidesorter::view
-
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <sd_primitivetypes2d.hxx>
-#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
-#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
-#include <drawinglayer/primitive2d/textprimitive2d.hxx>
-#include <drawinglayer/geometry/viewinformation2d.hxx>
-#include <svx/sdr/contact/objectcontact.hxx>
-
-namespace sd { namespace slidesorter { namespace view {
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// All primitives for SdrPageObject visualisation are based on one range which describes
-// the size of the inner rectangle for PagePreview visualisation. Use a common implementation
-// class for all derived SdPageObjectPrimitives. The SdPageObjectBasePrimitive itself
-// is pure virtual
-
-class SdPageObjectBasePrimitive : public drawinglayer::primitive2d::BufferedDecompositionPrimitive2D
-{
-private:
- // the inner range of the SdPageObject visualisation
- basegfx::B2DRange maRange;
-
-public:
- // constructor and destructor
- SdPageObjectBasePrimitive(const basegfx::B2DRange& rRange);
- virtual ~SdPageObjectBasePrimitive();
-
- // data access
- const basegfx::B2DRange& getPageObjectRange() const { return maRange; }
-
- // compare operator
- virtual bool operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const;
-};
-
-SdPageObjectBasePrimitive::SdPageObjectBasePrimitive(const basegfx::B2DRange& rRange)
-: drawinglayer::primitive2d::BufferedDecompositionPrimitive2D(),
- maRange(rRange)
-{
-}
-
-SdPageObjectBasePrimitive::~SdPageObjectBasePrimitive()
-{
-}
-
-bool SdPageObjectBasePrimitive::operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const
-{
- if(drawinglayer::primitive2d::BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const SdPageObjectBasePrimitive& rCompare = static_cast< const SdPageObjectBasePrimitive& >(rPrimitive);
- return (getPageObjectRange() == rCompare.getPageObjectRange());
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// SdPageObjectPrimitive for selected visualisation
-
-class SdPageObjectPageBitmapPrimitive : public SdPageObjectBasePrimitive
-{
-private:
- // the bitmap containing the PagePreview
- BitmapEx maBitmapEx;
-
-protected:
- // method which is to be used to implement the local decomposition of a 2D primitive.
- virtual Primitive2DSequence create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
-
-public:
- // constructor and destructor
- SdPageObjectPageBitmapPrimitive(
- const basegfx::B2DRange& rRange,
- const BitmapEx& rBitmapEx);
- ~SdPageObjectPageBitmapPrimitive();
-
- // data access
- const BitmapEx& getBitmapEx() const { return maBitmapEx; }
-
- // compare operator
- virtual bool operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const;
-
- // provide unique ID
- DeclPrimitrive2DIDBlock()
-};
-
-Primitive2DSequence SdPageObjectPageBitmapPrimitive::create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const
-{
- // add bitmap primitive
- // to avoid scaling, use the Bitmap pixel size as primitive size
- basegfx::B2DHomMatrix aBitmapTransform;
- const Size aBitmapSize(getBitmapEx().GetSizePixel());
- const basegfx::B2DVector aBitmapSizeLogic(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(aBitmapSize.getWidth() - 1, aBitmapSize.getHeight() - 1));
-
- // short form for scale and translate transformation
- aBitmapTransform.set(0L, 0L, aBitmapSizeLogic.getX());
- aBitmapTransform.set(1L, 1L, aBitmapSizeLogic.getY());
- aBitmapTransform.set(0L, 2L, getPageObjectRange().getMinX());
- aBitmapTransform.set(1L, 2L, getPageObjectRange().getMinY());
-
- // add a BitmapPrimitive2D to the result
- const Primitive2DReference xReference(
- new drawinglayer::primitive2d::BitmapPrimitive2D(getBitmapEx(), aBitmapTransform));
- return Primitive2DSequence(&xReference, 1);
-}
-
-SdPageObjectPageBitmapPrimitive::SdPageObjectPageBitmapPrimitive(
- const basegfx::B2DRange& rRange,
- const BitmapEx& rBitmapEx)
-: SdPageObjectBasePrimitive(rRange),
- maBitmapEx(rBitmapEx)
-{
-}
-
-SdPageObjectPageBitmapPrimitive::~SdPageObjectPageBitmapPrimitive()
-{
-}
-
-bool SdPageObjectPageBitmapPrimitive::operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const
-{
- if(SdPageObjectBasePrimitive::operator==(rPrimitive))
- {
- const SdPageObjectPageBitmapPrimitive& rCompare = static_cast< const SdPageObjectPageBitmapPrimitive& >(rPrimitive);
- return (getBitmapEx() == rCompare.getBitmapEx());
- }
-
- return false;
-}
-
-ImplPrimitrive2DIDBlock(SdPageObjectPageBitmapPrimitive, PRIMITIVE2D_ID_SDPAGEOBJECTPAGEBITMAPPRIMITIVE)
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// SdPageObjectPrimitive for selected visualisation
-
-class SdPageObjectSelectPrimitive : public SdPageObjectBasePrimitive
-{
-private:
- /// Gap between border of page object and inside of selection rectangle.
- static const sal_Int32 mnSelectionIndicatorOffset;
-
- /// Thickness of the selection rectangle.
- static const sal_Int32 mnSelectionIndicatorThickness;
-
-protected:
- // method which is to be used to implement the local decomposition of a 2D primitive.
- virtual Primitive2DSequence create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
-
-public:
- // constructor and destructor
- SdPageObjectSelectPrimitive(const basegfx::B2DRange& rRange);
- ~SdPageObjectSelectPrimitive();
-
- // provide unique ID
- DeclPrimitrive2DIDBlock()
-};
-
-const sal_Int32 SdPageObjectSelectPrimitive::mnSelectionIndicatorOffset(1);
-const sal_Int32 SdPageObjectSelectPrimitive::mnSelectionIndicatorThickness(3);
-
-Primitive2DSequence SdPageObjectSelectPrimitive::create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const
-{
- Primitive2DSequence xRetval(2);
-
- // since old Width/Height calculations always added a single pixel value,
- // it is necessary to create a inner range which is one display unit less
- // at the bottom right.
- const basegfx::B2DVector aDiscretePixel(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
- const basegfx::B2DRange aAdaptedInnerRange(
- getPageObjectRange().getMinX(), getPageObjectRange().getMinY(),
- getPageObjectRange().getMaxX() - aDiscretePixel.getX(), getPageObjectRange().getMaxY() - aDiscretePixel.getY());
-
- // PaintSelectionIndicator replacement. Grow by offset first
- basegfx::B2DRange aDiscreteOuterRange(aAdaptedInnerRange);
- aDiscreteOuterRange.grow(mnSelectionIndicatorOffset * aDiscretePixel.getX());
-
- // Remember inner border. Make it one bigger in top left since polygons
- // do not paint their lower-right corners. Since this is the inner polygon,
- // the top-left corders are the ones to grow here
- const basegfx::B2DRange aDiscreteInnerRange(
- aDiscreteOuterRange.getMinimum() + aDiscretePixel,
- aDiscreteOuterRange.getMaximum() - aDiscretePixel);
-
- // grow by line width
- aDiscreteOuterRange.grow((mnSelectionIndicatorThickness - 1) * aDiscretePixel.getX());
-
- // create a PolyPolygon from those ranges. For the outer polygon, round edges by
- // giving a relative radius to the polygon creator (use mnSelectionIndicatorThickness here, too)
- const double fPixelFactor(aDiscretePixel.getX() * (mnSelectionIndicatorThickness + 2.5));
- const double fRelativeRadiusX(fPixelFactor / ::std::max(aDiscreteOuterRange.getWidth(), 1.0));
- const double fRelativeRadiusY(fPixelFactor / ::std::max(aDiscreteOuterRange.getHeight(), 1.0));
- basegfx::B2DPolyPolygon aFramePolyPolygon;
- const basegfx::B2DPolygon aRoundedOuterPolygon(basegfx::tools::createPolygonFromRect(aDiscreteOuterRange, fRelativeRadiusX, fRelativeRadiusY));
-
- aFramePolyPolygon.append(aRoundedOuterPolygon);
- aFramePolyPolygon.append(basegfx::tools::createPolygonFromRect(aDiscreteInnerRange));
-
- // add colored PolyPolygon
- const svtools::ColorConfig aColorConfig;
- static bool bTestWithBrightColors(false);
- const basegfx::BColor aFrameColor(bTestWithBrightColors ? basegfx::BColor(0,1,0) : Application::GetSettings().GetStyleSettings().GetMenuHighlightColor().getBColor());
-
- xRetval[0] = Primitive2DReference(
- new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(aFramePolyPolygon, aFrameColor));
-
- // add aRoundedOuterPolygon again as non-filled line polygon to get the roundungs
- // painted correctly
- xRetval[1] = Primitive2DReference(
- new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aRoundedOuterPolygon, aFrameColor));
-
- return xRetval;
-}
-
-SdPageObjectSelectPrimitive::SdPageObjectSelectPrimitive(const basegfx::B2DRange& rRange)
-: SdPageObjectBasePrimitive(rRange)
-{
-}
-
-SdPageObjectSelectPrimitive::~SdPageObjectSelectPrimitive()
-{
-}
-
-ImplPrimitrive2DIDBlock(SdPageObjectSelectPrimitive, PRIMITIVE2D_ID_SDPAGEOBJECTSELECTPRIMITIVE)
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// SdPageObjectPrimitive for border around bitmap visualisation
-
-class SdPageObjectBorderPrimitive : public SdPageObjectBasePrimitive
-{
-protected:
- // method which is to be used to implement the local decomposition of a 2D primitive.
- virtual Primitive2DSequence create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
-
-public:
- // constructor and destructor
- SdPageObjectBorderPrimitive(const basegfx::B2DRange& rRange);
- ~SdPageObjectBorderPrimitive();
-
- // provide unique ID
- DeclPrimitrive2DIDBlock()
-};
-
-Primitive2DSequence SdPageObjectBorderPrimitive::create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const
-{
- // since old Width/Height calculations always added a single pixel value,
- // it is necessary to create a inner range which is one display unit less
- // at the bottom right.
- const basegfx::B2DVector aDiscretePixel(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
- const basegfx::B2DRange aAdaptedInnerRange(
- getPageObjectRange().getMinX(), getPageObjectRange().getMinY(),
- getPageObjectRange().getMaxX() - aDiscretePixel.getX(), getPageObjectRange().getMaxY() - aDiscretePixel.getY());
-
- // Paint_Border replacement. (use aBorderColor)
- static bool bTestWithBrightColors(false);
- const svtools::ColorConfig aColorConfig;
- const basegfx::BColor aBorderColor(bTestWithBrightColors ? basegfx::BColor(1,0,0) : Color(aColorConfig.GetColorValue(svtools::FONTCOLOR).nColor).getBColor());
-
- const Primitive2DReference xReference(
- new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(basegfx::tools::createPolygonFromRect(aAdaptedInnerRange), aBorderColor));
- return Primitive2DSequence(&xReference, 1);
-}
-
-SdPageObjectBorderPrimitive::SdPageObjectBorderPrimitive(const basegfx::B2DRange& rRange)
-: SdPageObjectBasePrimitive(rRange)
-{
-}
-
-SdPageObjectBorderPrimitive::~SdPageObjectBorderPrimitive()
-{
-}
-
-ImplPrimitrive2DIDBlock(SdPageObjectBorderPrimitive, PRIMITIVE2D_ID_SDPAGEOBJECTBORDERPRIMITIVE)
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// SdPageObjectPrimitive for focus visualisation
-
-class SdPageObjectFocusPrimitive : public SdPageObjectBasePrimitive
-{
-private:
- /// Gap between border of page object and inside of focus rectangle.
- static const sal_Int32 mnFocusIndicatorOffset;
- const bool mbContrastToSelected;
-
-protected:
- // method which is to be used to implement the local decomposition of a 2D primitive.
- virtual Primitive2DSequence create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
-
-public:
- // constructor and destructor
- SdPageObjectFocusPrimitive(const basegfx::B2DRange& rRange, const bool bContrast);
- ~SdPageObjectFocusPrimitive();
-
- // provide unique ID
- DeclPrimitrive2DIDBlock()
-};
-
-const sal_Int32 SdPageObjectFocusPrimitive::mnFocusIndicatorOffset(2);
-
-Primitive2DSequence SdPageObjectFocusPrimitive::create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const
-{
- Primitive2DSequence xRetval(2);
-
- // since old Width/Height calculations always added a single pixel value,
- // it is necessary to create a inner range which is one display unit less
- // at the bottom right.
- const basegfx::B2DVector aDiscretePixel(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
- const basegfx::B2DRange aAdaptedInnerRange(
- getPageObjectRange().getMinX(), getPageObjectRange().getMinY(),
- getPageObjectRange().getMaxX() - aDiscretePixel.getX(), getPageObjectRange().getMaxY() - aDiscretePixel.getY());
-
- // Paint_FocusIndicator replacement. (black and white).
- // imitate Paint_DottedRectangle: First paint a white rectangle and above it a black dotted one
- basegfx::B2DRange aFocusIndicatorRange(aAdaptedInnerRange);
- aFocusIndicatorRange.grow(mnFocusIndicatorOffset * aDiscretePixel.getX());
-
- // create polygon
- const basegfx::B2DPolygon aIndicatorPolygon(basegfx::tools::createPolygonFromRect(aFocusIndicatorRange));
-
- const StyleSettings& rStyleSettings(Application::GetSettings().GetStyleSettings());
-
- // "background" rectangle
- const Color aBackgroundColor(mbContrastToSelected ? rStyleSettings.GetMenuHighlightColor() : rStyleSettings.GetWindowColor());
- xRetval[0] = Primitive2DReference(
- new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(aIndicatorPolygon, Color(COL_WHITE).getBColor()));
-
- // dotted black rectangle with same geometry
- ::std::vector< double > aDotDashArray;
-
- const sal_Int32 nFocusIndicatorWidth (3);
- aDotDashArray.push_back(nFocusIndicatorWidth *aDiscretePixel.getX());
- aDotDashArray.push_back(nFocusIndicatorWidth * aDiscretePixel.getX());
-
- // prepare line and stroke attributes
- const Color aLineColor(mbContrastToSelected ? rStyleSettings.GetMenuHighlightTextColor() : rStyleSettings.GetWindowTextColor());
- const drawinglayer::attribute::LineAttribute aLineAttribute(aLineColor.getBColor());
- const drawinglayer::attribute::StrokeAttribute aStrokeAttribute(
- aDotDashArray, 2.0 * nFocusIndicatorWidth * aDiscretePixel.getX());
-
-
- xRetval[1] = Primitive2DReference(
- new drawinglayer::primitive2d::PolygonStrokePrimitive2D(aIndicatorPolygon, aLineAttribute, aStrokeAttribute));
-
- return xRetval;
-}
-
-SdPageObjectFocusPrimitive::SdPageObjectFocusPrimitive(const basegfx::B2DRange& rRange, const bool bContrast)
- : SdPageObjectBasePrimitive(rRange),
- mbContrastToSelected(bContrast)
-{
-}
-
-SdPageObjectFocusPrimitive::~SdPageObjectFocusPrimitive()
-{
-}
-
-ImplPrimitrive2DIDBlock(SdPageObjectFocusPrimitive, PRIMITIVE2D_ID_SDPAGEOBJECTFOCUSPRIMITIVE)
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// SdPageObjectPrimitive for fade effect visualisation
-
-class SdPageObjectFadeNameNumberPrimitive : public SdPageObjectBasePrimitive
-{
-private:
- /// Size of width and height of the fade effect indicator in pixels.
- static const sal_Int32 mnFadeEffectIndicatorOffset;
-
- /// Size of width and height of the comments indicator in pixels.
- static const sal_Int32 mnCommentsIndicatorOffset;
-
- /// Gap between border of page object and number rectangle.
- static const sal_Int32 mnPageNumberOffset;
-
- /// the indicator bitmaps. Static since it is usable outside this primitive
- /// for size comparisons
- static BitmapEx* mpFadeEffectIconBitmap;
- static BitmapEx* mpCommentsIconBitmap;
-
- /// page name, number and needed infos
- String maPageName;
- sal_uInt32 mnPageNumber;
- Font maPageNameFont;
- Size maPageNumberAreaModelSize;
-
- // bitfield
- bool mbShowFadeEffectIcon : 1;
- bool mbShowCommentsIcon : 1;
- bool mbExcluded : 1;
-
- // private helpers
- const BitmapEx& getFadeEffectIconBitmap() const;
- const BitmapEx& getCommentsIconBitmap() const;
-
-protected:
- // method which is to be used to implement the local decomposition of a 2D primitive.
- virtual Primitive2DSequence create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
-
-public:
- // constructor and destructor
- SdPageObjectFadeNameNumberPrimitive(
- const basegfx::B2DRange& rRange,
- const String& rPageName,
- sal_uInt32 nPageNumber,
- const Font& rPageNameFont,
- const Size& rPageNumberAreaModelSize,
- bool bShowFadeEffectIcon,
- bool bShowCommentsIcon,
- bool bExcluded);
- ~SdPageObjectFadeNameNumberPrimitive();
-
- // data access
- const String& getPageName() const { return maPageName; }
- sal_uInt32 getPageNumber() const { return mnPageNumber; }
- const Font& getPageNameFont() const { return maPageNameFont; }
- const Size& getPageNumberAreaModelSize() const { return maPageNumberAreaModelSize; }
- bool getShowFadeEffectIcon() const { return mbShowFadeEffectIcon; }
- bool getShowCommentsIcon() const { return mbShowCommentsIcon; }
- bool getExcluded() const { return mbExcluded; }
-
- // compare operator
- virtual bool operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const;
-
- // provide unique ID
- DeclPrimitrive2DIDBlock()
-};
-
-const sal_Int32 SdPageObjectFadeNameNumberPrimitive::mnFadeEffectIndicatorOffset(9);
-const sal_Int32 SdPageObjectFadeNameNumberPrimitive::mnPageNumberOffset(9);
-BitmapEx* SdPageObjectFadeNameNumberPrimitive::mpFadeEffectIconBitmap = 0;
-
-const BitmapEx& SdPageObjectFadeNameNumberPrimitive::getFadeEffectIconBitmap() const
-{
- if(mpFadeEffectIconBitmap == NULL)
- {
- // prepare FadeEffectIconBitmap on demand
- const sal_uInt16 nIconId(Application::GetSettings().GetStyleSettings().GetHighContrastMode()
- ? BMP_FADE_EFFECT_INDICATOR_H
- : BMP_FADE_EFFECT_INDICATOR);
- const BitmapEx aFadeEffectIconBitmap(IconCache::Instance().GetIcon(nIconId).GetBitmapEx());
- const_cast< SdPageObjectFadeNameNumberPrimitive* >(this)->mpFadeEffectIconBitmap = new BitmapEx(aFadeEffectIconBitmap);
- }
-
- return *mpFadeEffectIconBitmap;
-}
-
-
-const sal_Int32 SdPageObjectFadeNameNumberPrimitive::mnCommentsIndicatorOffset(9);
-BitmapEx* SdPageObjectFadeNameNumberPrimitive::mpCommentsIconBitmap = 0;
-
-const BitmapEx& SdPageObjectFadeNameNumberPrimitive::getCommentsIconBitmap() const
-{
- if(mpCommentsIconBitmap == NULL)
- {
- // prepare CommentsIconBitmap on demand
- const sal_uInt16 nIconId(Application::GetSettings().GetStyleSettings().GetHighContrastMode()
- ? BMP_COMMENTS_INDICATOR_H
- : BMP_COMMENTS_INDICATOR);
- const BitmapEx aCommentsIconBitmap(IconCache::Instance().GetIcon(nIconId).GetBitmapEx());
- const_cast< SdPageObjectFadeNameNumberPrimitive* >(this)->mpCommentsIconBitmap = new BitmapEx(aCommentsIconBitmap);
- }
-
- return *mpCommentsIconBitmap;
-}
-
-Primitive2DSequence SdPageObjectFadeNameNumberPrimitive::create2DDecomposition(const drawinglayer::geometry::ViewInformation2D& rViewInformation) const
-{
- const xub_StrLen nTextLength(getPageName().Len());
- const sal_uInt32 nCount(
- (getShowFadeEffectIcon() ? 1 : 0) + // FadeEffect icon
- (nTextLength ? 1 : 0) + // PageName
- 1 + // PageNumber (always)
- (getExcluded() ? 2 : 0) // PageNumber crossed out
- );
- sal_uInt32 nInsert(0);
- Primitive2DSequence xRetval(nCount);
-
- // since old Width/Height calculations always added a single pixel value,
- // it is necessary to create a inner range which is one display unit less
- // at the bottom right.
- const basegfx::B2DVector aDiscretePixel(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
- const basegfx::B2DRange aAdaptedInnerRange(
- getPageObjectRange().getMinX(), getPageObjectRange().getMinY(),
- getPageObjectRange().getMaxX() - aDiscretePixel.getX(), getPageObjectRange().getMaxY() - aDiscretePixel.getY());
-
- // preapre TextLayouter
- drawinglayer::primitive2d::TextLayouterDevice aTextLayouter;
- aTextLayouter.setFont(getPageNameFont());
-
- // get font attributes
- basegfx::B2DVector aTextSizeAttribute;
- const drawinglayer::attribute::FontAttribute aFontAttribute(
- drawinglayer::primitive2d::getFontAttributeFromVclFont(
- aTextSizeAttribute,
- getPageNameFont(),
- false,
- false));
-
- // prepare locale; this may need some more information in the future
- const ::com::sun::star::lang::Locale aLocale;
-
- // prepare font color from System
- const basegfx::BColor aFontColor(Application::GetSettings().GetStyleSettings().GetFontColor().getBColor());
-
- if(getShowFadeEffectIcon())
- {
- // prepare fFadeEffect Sizes
- const basegfx::B2DVector aFadeEffectBitmapSizeLogic(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(
- getFadeEffectIconBitmap().GetSizePixel().getWidth() - 1,
- getFadeEffectIconBitmap().GetSizePixel().getHeight() - 1));
-
- // Paint_FadeEffectIndicator replacement.
- // create transformation. To avoid bitmap scaling, use bitmap size as size
- basegfx::B2DHomMatrix aBitmapTransform;
-
- // short form for scale and translate transformation
- aBitmapTransform.set(0L, 0L, aFadeEffectBitmapSizeLogic.getX());
- aBitmapTransform.set(1L, 1L, aFadeEffectBitmapSizeLogic.getY());
- aBitmapTransform.set(0L, 2L, aAdaptedInnerRange.getMinX());
- aBitmapTransform.set(1L, 2L, aAdaptedInnerRange.getMaxY() + ((mnFadeEffectIndicatorOffset + 1) * aDiscretePixel.getX()));
-
- xRetval[nInsert++] = Primitive2DReference(
- new drawinglayer::primitive2d::BitmapPrimitive2D(getFadeEffectIconBitmap(), aBitmapTransform));
- }
-
- if(nTextLength)
- {
- // prepare fFadeEffect Sizes since it consumes from text size
- const basegfx::B2DVector aFadeEffectBitmapSizeLogic(rViewInformation.getInverseObjectToViewTransformation() *
- basegfx::B2DVector(
- getFadeEffectIconBitmap().GetSizePixel().getWidth() - 1,
- getFadeEffectIconBitmap().GetSizePixel().getHeight() - 1));
-
- // Paint_PageName replacement. Get text size
- const double fTextWidth(aTextLayouter.getTextWidth(getPageName(), 0, nTextLength));
- const double fTextHeight(getPageNameFont().GetHeight());
- const double fFadeEffectWidth(aFadeEffectBitmapSizeLogic.getX() * 2.0);
- const double fFadeEffectTextGap(((mnFadeEffectIndicatorOffset + 2) * aDiscretePixel.getX()));
- String aPageName(getPageName());
-
- // calculate text start position
- double fStartX(
- aAdaptedInnerRange.getMaxX()
- - fTextWidth
- + (aDiscretePixel.getX() * 3.0));
- const double fStartY(
- aAdaptedInnerRange.getMaxY()
- + fTextHeight
- + fFadeEffectTextGap);
- const bool bNeedClipping(fStartX < aAdaptedInnerRange.getMinX() + fFadeEffectWidth);
-
- // if text is too big, clip it
- if(bNeedClipping)
- {
- // new left start
- fStartX = aAdaptedInnerRange.getMinX() + fFadeEffectWidth;
-
- // find out how many characters to use
- const double fAvailableLength(aAdaptedInnerRange.getWidth() - fFadeEffectWidth);
- static const String aThreePoints(String::CreateFromAscii("..."));
- const double fWidthThreePoints(aTextLayouter.getTextWidth(aThreePoints, 0, aThreePoints.Len()));
- xub_StrLen a(1);
-
- for(; a < (xub_StrLen)nTextLength; a++)
- {
- const double fSnippetLength(aTextLayouter.getTextWidth(aPageName, 0, a));
-
- if(fSnippetLength + fWidthThreePoints > fAvailableLength)
- {
- break;
- }
- }
-
- // build new string
- aPageName = String(aPageName, 0, a - 1);
- aPageName += aThreePoints;
- }
-
- // fill text matrix
- basegfx::B2DHomMatrix aTextMatrix;
-
- aTextMatrix.set(0, 0, aTextSizeAttribute.getX());
- aTextMatrix.set(1, 1, aTextSizeAttribute.getY());
- aTextMatrix.set(0, 2, fStartX);
- aTextMatrix.set(1, 2, fStartY);
-
- // prepare DXTextArray (can be empty one)
- const ::std::vector< double > aDXArray;
-
- // create Text primitive and add to target
- xRetval[nInsert++] = Primitive2DReference(
- new drawinglayer::primitive2d::TextSimplePortionPrimitive2D(
- aTextMatrix,
- aPageName,
- 0,
- aPageName.Len(),
- aDXArray,
- aFontAttribute,
- aLocale,
- aFontColor));
- }
-
- {
- // Paint_PageNumber replacement. Get the range where it shall be centered and prepare the string
- const double fLeft(aAdaptedInnerRange.getMinX() - (mnPageNumberOffset * aDiscretePixel.getX()) - getPageNumberAreaModelSize().Width());
- const double fTop(aAdaptedInnerRange.getMinY());
- const basegfx::B2DRange aNumberRange(fLeft, fTop,
- fLeft + getPageNumberAreaModelSize().Width(), fTop + getPageNumberAreaModelSize().Height());
- const String aPageNumber(String::CreateFromInt32(getPageNumber()));
- const xub_StrLen nNumberLen(aPageNumber.Len());
-
- // Get text size
- const double fTextWidth(aTextLayouter.getTextWidth(aPageNumber, 0, nNumberLen));
- const double fTextHeight(getPageNameFont().GetHeight());
-
- // get text start postion
- const double fStartX(aNumberRange.getCenterX() - (fTextWidth / 2.0));
- const double fStartY(aNumberRange.getMinY() + fTextHeight + aDiscretePixel.getX());
-
- // fill text matrix
- basegfx::B2DHomMatrix aTextMatrix;
-
- aTextMatrix.set(0, 0, aTextSizeAttribute.getX());
- aTextMatrix.set(1, 1, aTextSizeAttribute.getY());
- aTextMatrix.set(0, 2, fStartX);
- aTextMatrix.set(1, 2, fStartY);
-
- // prepare DXTextArray (can be empty one)
- const ::std::vector< double > aDXArray;
-
- // create Text primitive
- xRetval[nInsert++] = Primitive2DReference(
- new drawinglayer::primitive2d::TextSimplePortionPrimitive2D(
- aTextMatrix,
- aPageNumber,
- 0,
- nNumberLen,
- aDXArray,
- aFontAttribute,
- aLocale,
- aFontColor));
-
- if(getExcluded())
- {
- // create a box with strikethrough from top left to bottom right
- const basegfx::BColor aActiveColor(Application::GetSettings().GetStyleSettings().GetActiveColor().getBColor());
- basegfx::B2DPolygon aStrikethrough;
-
- aStrikethrough.append(aNumberRange.getMinimum());
- aStrikethrough.append(aNumberRange.getMaximum());
-
- xRetval[nInsert++] = Primitive2DReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(
- basegfx::tools::createPolygonFromRect(aNumberRange), aActiveColor));
-
- xRetval[nInsert++] = Primitive2DReference(new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(
- aStrikethrough, aActiveColor));
- }
- }
-
- return xRetval;
-}
-
-SdPageObjectFadeNameNumberPrimitive::SdPageObjectFadeNameNumberPrimitive(
- const basegfx::B2DRange& rRange,
- const String& rPageName,
- sal_uInt32 nPageNumber,
- const Font& rPageNameFont,
- const Size& rPageNumberAreaModelSize,
- bool bShowFadeEffectIcon,
- bool bShowCommentsIcon,
- bool bExcluded)
-: SdPageObjectBasePrimitive(rRange),
- maPageName(rPageName),
- mnPageNumber(nPageNumber),
- maPageNameFont(rPageNameFont),
- maPageNumberAreaModelSize(rPageNumberAreaModelSize),
- mbShowFadeEffectIcon(bShowFadeEffectIcon),
- mbShowCommentsIcon(bShowCommentsIcon),
- mbExcluded(bExcluded)
-{
-}
-
-SdPageObjectFadeNameNumberPrimitive::~SdPageObjectFadeNameNumberPrimitive()
-{
-}
-
-bool SdPageObjectFadeNameNumberPrimitive::operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const
-{
- if(SdPageObjectBasePrimitive::operator==(rPrimitive))
- {
- const SdPageObjectFadeNameNumberPrimitive& rCompare = static_cast< const SdPageObjectFadeNameNumberPrimitive& >(rPrimitive);
-
- return (getPageName() == rCompare.getPageName()
- && getPageNumber() == rCompare.getPageNumber()
- && getPageNameFont() == rCompare.getPageNameFont()
- && getPageNumberAreaModelSize() == rCompare.getPageNumberAreaModelSize()
- && getShowFadeEffectIcon() == rCompare.getShowFadeEffectIcon()
- && getExcluded() == rCompare.getExcluded());
- }
-
- return false;
-}
-
-ImplPrimitrive2DIDBlock(SdPageObjectFadeNameNumberPrimitive, PRIMITIVE2D_ID_SDPAGEOBJECTFADENAMENUMBERPRIMITIVE)
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// createPrimitive2DSequence
-//
-// This method will replace the whole painting mechanism. Task is no longer to paint stuff to an OutDev,
-// but to provide the necessary geometrical information using primitives.
-
-Primitive2DSequence PageObjectViewObjectContact::createPrimitive2DSequence(const sdr::contact::DisplayInfo& rDisplayInfo) const
-{
- // OutputDevice* pDevice = rDisplayInfo.GetDIOutputDevice();
- OutputDevice* pDevice = GetObjectContact().TryToGetOutputDevice();
-
- // get primitive vector from parent class. Do remember the contents for later use; this
- // is done to create the page content renderer (see PagePrimitiveExtractor in svx) at the
- // original object and to setup the draw hierarchy there so that changes to VCs of displayed
- // objects will lead to InvalidatePartOfView-calls which will be forwarded from the helper-OC
- // to this VOC in calling a ActionChanged().
- //
- // This already produces the displayable page content as a primitive sequence, complete with
- // embedding in the page visualizer, clipping if needed and object and aspect ratio
- // preparations. It would thus be the base for creating the cached visualisation, too,
- // by just painting extactly this primitive sequence.
- //
- // Currently, this slows down PagePane display heavily. Reason is that the current mechanism
- // to react on a SdrObject change in an edit view is to react on the ModelChange and to completely
- // reset the PagePane (delete SdrPageObjs, re-create and layout them). This works, but kicks
- // the complete sequence of primitive creation at VOCs and VCs and their buffering out of
- // memory each time. So there are two choices:
- //
- // 1, disable getting the sequence of primtives
- // -> invalidate uses ModelChange
- // -> cache repaint uses complete view creation and repainting
- //
- // 2, create and use the sequence of primitives
- // -> invalidate would not need ModelChange, no destroy/recreate of SdrObjects, no rearrange,
- // the invalidate and the following repaint would exactly update the SdrPages involved and
- // use the DrawingLayer provided ActionChanged() invalidations over the VOCs and VCs
- // -> cache repaint could use the here offered sequence of primitives to re-create the bitmap
- // (just hand over the local member to the cache)
- //
- // For the moment i will use (1) and disable primitive creation for SdrPageObj contents here
-
- // const_cast< PageObjectViewObjectContact* >(this)->mxCurrentPageContents = ViewObjectContactOfPageObj::createPrimitive2DSequence(rDisplayInfo);
-
- // assert when this call is issued indirectly from the destructor of
- // this instance. This is not allowed and needs to be looked at
-#ifdef DBG_UTIL
- if(mbInDestructor)
- {
- OSL_ENSURE(false, "Higher call inside PageObjectViewObjectContact in destructor (!)");
- }
-#endif
-
- // Check if buffering can and shall be done.
- if (pDevice != NULL
- && !GetObjectContact().isOutputToPrinter()
- && !GetObjectContact().isOutputToRecordingMetaFile()
- && !mbInDestructor)
- {
- // get inner and outer logic rectangles. Use model data directly for creation. Do NOT use getBoundRect()/
- // getSnapRect() functionality; these will use the sequence of primitives in the long run itself. SdrPageObj
- // is a SdrObject, so use SdrObject::aOutRect as model data. Access using GetLastBoundRect() to not execute anything
- PageObjectViewContact& rPaObVOC(static_cast< PageObjectViewContact& >(GetViewContact()));
- const Rectangle aInnerLogic(rPaObVOC.GetPageObject().GetLastBoundRect());
-
- // get BitmapEx from cache. Do exactly the same as Paint_Preview() to avoid a repaint loop
- // caused by slightly different pixel sizes of what the cache sees as pixel size and what is
- // calculated here in discrete coordinates. This includes to not use LogicToPiyel on the Rectangle,
- // but to do the same as the GetBoundingBox() implementation
- const Rectangle aInnerPixel(Rectangle(pDevice->LogicToPixel(aInnerLogic.TopLeft()), pDevice->LogicToPixel(aInnerLogic.GetSize())));
- BitmapEx aBitmapEx(const_cast< PageObjectViewObjectContact* >(this)->GetPreview(rDisplayInfo, aInnerPixel));
-
- // prepare inner range
- const basegfx::B2DRange aInnerRange(aInnerLogic.Left(), aInnerLogic.Top(), aInnerLogic.Right(), aInnerLogic.Bottom());
-
- // provide default parameters
- String aPageName;
- Font aPageNameFont;
- sal_uInt32 nPageNumber(0);
- Size aPageNumberAreaModelSize;
- bool bShowFadeEffectIcon(false);
- bool bShowCommentsIcon(false);
- bool bExcluded(false);
-
- if(GetPage())
- {
- const SdPage* pPage = static_cast<const SdPage*>(GetPage());
-
- // decide if fade effect indicator will be painted
- if(pPage->getTransitionType() > 0)
- {
- bShowFadeEffectIcon = true;
- }
-
- bShowCommentsIcon = !pPage->getAnnotations().empty();
-
- // prepare PageName, PageNumber, font and AreaModelSize
- aPageName = pPage->GetName();
- aPageNameFont = *FontProvider::Instance().GetFont(*pDevice);
- nPageNumber = ((pPage->GetPageNum() - 1) / 2) + 1;
- aPageNumberAreaModelSize = GetPageDescriptor()->GetPageNumberAreaModelSize();
-
- if(!aPageName.Len())
- {
- aPageName = String(SdResId(STR_PAGE));
- aPageName += String::CreateFromInt32(nPageNumber);
- }
-
- // decide if page is excluded
- bExcluded = pPage->IsExcluded();
- }
-
- // create specialized primitives for focus, select and PagePreview itself
- const bool bCreateBitmap(!aBitmapEx.IsEmpty());
- const bool bCreateFocused(GetPageDescriptor()->IsFocused());
- const bool bCreateSelected(GetPageDescriptor()->IsSelected());
-
- const sal_uInt32 nCount(
- (bCreateBitmap ? 1 : 0) + // bitmap itself
- 1 + // border around bitmap (always)
- 1 + // FadeEffect, PageName and PageNumber visualisation (always)
- (bCreateFocused ? 1 : 0) + // create focused
- (bCreateSelected ? 1 : 0) // create selected
- );
- sal_uInt32 nInsert(0);
- Primitive2DSequence xRetval(nCount);
-
- if(bCreateBitmap)
- {
- // add selection indicator if used
- xRetval[nInsert++] = Primitive2DReference(new SdPageObjectPageBitmapPrimitive(aInnerRange, aBitmapEx));
- }
-
- if(true)
- {
- // add border (always)
- xRetval[nInsert++] = Primitive2DReference(new SdPageObjectBorderPrimitive(aInnerRange));
- }
-
- if(true)
- {
- // add fade effext, page name and number if used
- xRetval[nInsert++] = Primitive2DReference(new SdPageObjectFadeNameNumberPrimitive(
- aInnerRange,
- aPageName,
- nPageNumber,
- aPageNameFont,
- aPageNumberAreaModelSize,
- bShowFadeEffectIcon,
- bShowCommentsIcon,
- bExcluded));
- }
-
- if(bCreateSelected)
- {
- // add selection indicator if used
- xRetval[nInsert++] = Primitive2DReference(new SdPageObjectSelectPrimitive(aInnerRange));
- }
-
- if(bCreateFocused)
- {
- // add focus indicator if used
- xRetval[nInsert++] = Primitive2DReference(new SdPageObjectFocusPrimitive(aInnerRange, bCreateSelected));
- }
-
- return xRetval;
- }
- else
- {
- // Call parent. Output to printer or metafile will use vector data, not cached bitmaps
- return ViewObjectContactOfPageObj::createPrimitive2DSequence(rDisplayInfo);
- }
-}
-
-BitmapEx PageObjectViewObjectContact::CreatePreview (const DisplayInfo& /*rDisplayInfo*/)
-{
- const SdPage* pPage = static_cast<const SdPage*>(GetPage());
- OutputDevice* pDevice = GetObjectContact().TryToGetOutputDevice();
-
- if(pDevice)
- {
- Rectangle aPreviewPixelBox (GetBoundingBox(*pDevice,PreviewBoundingBox,PixelCoordinateSystem));
-
- PreviewRenderer aRenderer (pDevice);
- Image aPreview (aRenderer.RenderPage(
- pPage,
- aPreviewPixelBox.GetSize(),
- String()));
-
- return aPreview.GetBitmapEx();
- }
- else
- {
- return BitmapEx();
- }
-}
-
-
-
-
-BitmapEx PageObjectViewObjectContact::GetPreview (
- const DisplayInfo& rDisplayInfo,
- const Rectangle& rNewSizePixel)
-{
- BitmapEx aBitmap;
-
- try
- {
- // assert when this call is issued indirectly from the destructor of
- // this instance. This is not allowed and needs to be looked at
- OSL_ENSURE(!mbInDestructor, "Higher call inside PageObjectViewObjectContact in destructor (!)");
-
- if (!mbInDestructor)
- {
- if (mpCache != NULL)
- {
- aBitmap = mpCache->GetPreviewBitmap(
- GetPage(),
- rNewSizePixel.GetSize());
- mpCache->SetPreciousFlag(GetPage(), true);
- }
- else
- aBitmap = CreatePreview(rDisplayInfo);
- }
- }
- catch (const ::com::sun::star::uno::Exception&)
- {
- OSL_TRACE("PageObjectViewObjectContact::GetPreview: caught exception");
- }
-
- return aBitmap;
-}
-
-
-
-
-const SdrPage* PageObjectViewObjectContact::GetPage (void) const
-{
- return static_cast<PageObjectViewContact&>(GetViewContact()).GetPage();
-}
-
-
-
-
-void PageObjectViewObjectContact::ActionChanged (void)
-{
- // Even when we are called from destructor we still have to invalide
- // the preview bitmap in the cache.
- const SdrPage* pPage = GetPage();
-
- if(pPage)
- {
- SdDrawDocument* pDocument = dynamic_cast<SdDrawDocument*>(pPage->GetModel());
- if (mpCache!=NULL && pPage!=NULL && pDocument!=NULL)
- {
- cache::PageCacheManager::Instance()->InvalidatePreviewBitmap(
- pDocument->getUnoModel(),
- pPage);
- }
- }
-
- // call parent
- ViewObjectContactOfPageObj::ActionChanged();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// helper MouseOverEffectPrimitive
-//
-// Used to allow view-dependent primitive definition. For that purpose, the
-// initially created primitive (here: in createMouseOverEffectPrimitive2DSequence())
-// always has to be view-independent, but the decomposition is made view-dependent.
-// Very simple primitive which just remembers the discrete data and applies
-// it at decomposition time.
-
-class MouseOverEffectPrimitive : public drawinglayer::primitive2d::BufferedDecompositionPrimitive2D
-{
-private:
- basegfx::B2DRange maLogicRange;
- sal_uInt32 mnDiscreteOffset;
- sal_uInt32 mnDiscreteWidth;
- basegfx::BColor maRGBColor;
-
-protected:
- virtual drawinglayer::primitive2d::Primitive2DSequence create2DDecomposition(
- const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
-
-public:
- MouseOverEffectPrimitive(
- const basegfx::B2DRange& rLogicRange,
- sal_uInt32 nDiscreteOffset,
- sal_uInt32 nDiscreteWidth,
- const basegfx::BColor& rRGBColor)
- : drawinglayer::primitive2d::BufferedDecompositionPrimitive2D(),
- maLogicRange(rLogicRange),
- mnDiscreteOffset(nDiscreteOffset),
- mnDiscreteWidth(nDiscreteWidth),
- maRGBColor(rRGBColor)
- {}
-
- // data access
- const basegfx::B2DRange& getLogicRange() const { return maLogicRange; }
- sal_uInt32 getDiscreteOffset() const { return mnDiscreteOffset; }
- sal_uInt32 getDiscreteWidth() const { return mnDiscreteWidth; }
- const basegfx::BColor& getRGBColor() const { return maRGBColor; }
-
- virtual bool operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const;
-
- DeclPrimitrive2DIDBlock()
-};
-
-drawinglayer::primitive2d::Primitive2DSequence MouseOverEffectPrimitive::create2DDecomposition(
- const drawinglayer::geometry::ViewInformation2D& rViewInformation) const
-{
- // get logic sizes in object coordinate system
- const double fDiscreteWidth((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)).getLength());
- const double fOffset(fDiscreteWidth * getDiscreteOffset());
- const double fWidth(fDiscreteWidth * getDiscreteWidth());
-
- // create range (one pixel less to get a good fitting)
- basegfx::B2DRange aRange(
- getLogicRange().getMinimum(),
- getLogicRange().getMaximum() - basegfx::B2DTuple(fDiscreteWidth, fDiscreteWidth));
-
- // grow range
- aRange.grow(fOffset - (fWidth * 0.5));
-
- // create fat line with parameters. The formerly hand-painted edge
- // roundings will now be done using rounded edges of this fat line
- const basegfx::B2DPolygon aPolygon(basegfx::tools::createPolygonFromRect(aRange));
- const drawinglayer::attribute::LineAttribute aLineAttribute(getRGBColor(), fWidth);
- const drawinglayer::primitive2d::Primitive2DReference xReference(
- new drawinglayer::primitive2d::PolygonStrokePrimitive2D(
- aPolygon,
- aLineAttribute));
-
- return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
-}
-
-bool MouseOverEffectPrimitive::operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const
-{
- if(drawinglayer::primitive2d::BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const MouseOverEffectPrimitive& rCompare = static_cast< const MouseOverEffectPrimitive& >(rPrimitive);
-
- return (getLogicRange() == rCompare.getLogicRange()
- && getDiscreteOffset() == rCompare.getDiscreteOffset()
- && getDiscreteWidth() == rCompare.getDiscreteWidth()
- && getRGBColor() == rCompare.getRGBColor());
- }
-
- return false;
-}
-
-ImplPrimitrive2DIDBlock(MouseOverEffectPrimitive, PRIMITIVE2D_ID_SDMOUSEOVEREFFECTPRIMITIVE)
-
-//////////////////////////////////////////////////////////////////////////////
-
-drawinglayer::primitive2d::Primitive2DSequence PageObjectViewObjectContact::createMouseOverEffectPrimitive2DSequence()
-{
- drawinglayer::primitive2d::Primitive2DSequence aRetval;
-
- if(GetPageDescriptor()->IsSelected() && mpProperties.get() && mpProperties->IsShowSelection())
- {
- // When the selection frame is visualized the mouse over frame is not
- // visible and does not have to be created.
- }
- else
- {
- const PageObjectViewContact& rPaObVOC(static_cast<PageObjectViewContact&>(GetViewContact()));
- const Rectangle aBoundingBox(rPaObVOC.GetPageObject().GetLastBoundRect());
- const basegfx::B2DRange aLogicRange(aBoundingBox.Left(), aBoundingBox.Top(), aBoundingBox.Right(), aBoundingBox.Bottom());
- const basegfx::BColor aSelectionColor(mpProperties->GetSelectionColor().getBColor());
- const drawinglayer::primitive2d::Primitive2DReference aReference(
- new MouseOverEffectPrimitive(
- aLogicRange,
- mnMouseOverEffectOffset,
- mnMouseOverEffectThickness,
- aSelectionColor));
-
- aRetval = drawinglayer::primitive2d::Primitive2DSequence(&aReference, 1);
- }
-
- return aRetval;
-}
-
-
-
-
-SvBorder PageObjectViewObjectContact::CalculatePageModelBorder (
- OutputDevice* pDevice,
- int nPageCount)
-{
- SvBorder aModelBorder;
-
- if (pDevice != NULL)
- {
- // 1. Initialize the border with the values that do not depend on
- // the device.
- Size aTopLeftBorders (pDevice->PixelToLogic (Size (
- mnPageNumberOffset+1,
- mnSelectionIndicatorOffset + mnSelectionIndicatorThickness)));
- Size aBottomRightBorders (pDevice->PixelToLogic (Size (
- mnSelectionIndicatorOffset + mnSelectionIndicatorThickness,
- mnFadeEffectIndicatorOffset)));
- aModelBorder = SvBorder (
- aTopLeftBorders.Width(),
- aTopLeftBorders.Height(),
- aBottomRightBorders.Width(),
- aBottomRightBorders.Height());
-
-
- // 2. Add the device dependent values.
-
- // Calculate the area of the page number.
- Size aPageNumberModelSize (
- CalculatePageNumberAreaModelSize (pDevice, nPageCount));
-
- // Update the border.
- aModelBorder.Left() += aPageNumberModelSize.Width();
- // The height of the page number area is the same as the height of
- // the page name area.
- aModelBorder.Bottom() += aPageNumberModelSize.Height();
- }
-
- return aModelBorder;
-}
-
-
-
-
-Size PageObjectViewObjectContact::CalculatePageNumberAreaModelSize (
- OutputDevice* pDevice,
- int nPageCount)
-{
- // Set the correct font.
- Font aOriginalFont (pDevice->GetFont());
- pDevice->SetFont(*FontProvider::Instance().GetFont(*pDevice));
-
- String sPageNumberTemplate;
- if (nPageCount < 10)
- sPageNumberTemplate = String::CreateFromAscii("9");
- else if (nPageCount < 100)
- sPageNumberTemplate = String::CreateFromAscii("99");
- else if (nPageCount < 200)
- // Just for the case that 1 is narrower than 9.
- sPageNumberTemplate = String::CreateFromAscii("199");
- else if (nPageCount < 1000)
- sPageNumberTemplate = String::CreateFromAscii("999");
- else
- sPageNumberTemplate = String::CreateFromAscii("9999");
- // More then 9999 pages are not handled.
-
- Size aSize (
- pDevice->GetTextWidth (sPageNumberTemplate),
- pDevice->GetTextHeight ());
-
- pDevice->SetFont (aOriginalFont);
-
- return aSize;
-}
-
-
-
-
-model::SharedPageDescriptor
- PageObjectViewObjectContact::GetPageDescriptor (void) const
-{
- PageObjectViewContact& rViewContact (
- static_cast<PageObjectViewContact&>(GetViewContact()));
- PageObject& rPageObject (
- static_cast<PageObject&>(rViewContact.GetPageObject()));
- return rPageObject.GetDescriptor();
-}
-
-
-
-} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/slidesorter/view/SlsTheme.cxx b/sd/source/ui/slidesorter/view/SlsTheme.cxx
index 3c43c8917e70..ddc1e4ccd543 100644
--- a/sd/source/ui/slidesorter/view/SlsTheme.cxx
+++ b/sd/source/ui/slidesorter/view/SlsTheme.cxx
@@ -37,6 +37,7 @@
#include <vcl/outdev.hxx>
#include <vcl/image.hxx>
+#define USE_SYSTEM_SELECTION_COLOR
namespace sd { namespace slidesorter { namespace view {
@@ -61,14 +62,6 @@ namespace sd { namespace slidesorter { namespace view {
// Off grays
#define Arsenic 0x3b444b
-const static ColorData SelectionFill1ColorData = 0xb7daf0;
-const static ColorData SelectionFill2ColorData = 0x6db5e1;
-
-const static ColorData MouseOverFill1ColorData = 0x0e85cd;
-const static ColorData MouseOverFill2ColorData = 0x044c99;
-
-const static ColorData Border1ColorData = 0x6db5e1;
-const static ColorData Border2ColorData = 0x0e85cd;
const static ColorData BackgroundColorData = 0xffffff;
@@ -76,8 +69,25 @@ const static ColorData gnMouseOverColor = 0x59000000 | StellaBlue;
const static double gnCornerRadius = 4.0;
+
+ColorData ChangeLuminance (const ColorData aColorData, const int nValue)
+{
+ Color aColor (aColorData);
+ if (nValue > 0)
+ aColor.IncreaseLuminance(nValue);
+ else
+ aColor.DecreaseLuminance(-nValue);
+ return aColor.GetColor();
+}
+
+
+
+
Theme::Theme (const ::boost::shared_ptr<controller::Properties>& rpProperties)
: maBackgroundColor(rpProperties->GetBackgroundColor().GetColor()),
+ maNormalGradient(),
+ maSelectedGradient(),
+ maMouseOverGradient(),
maRawShadow(),
maInsertionIndicator()
{
@@ -85,6 +95,8 @@ Theme::Theme (const ::boost::shared_ptr<controller::Properties>& rpProperties)
maRawShadow = Image(SdResId(IMAGE_SHADOW)).GetBitmapEx();
maInsertionIndicator = Image(SdResId(IMAGE_INSERTION_INDICATOR_SELECT)).GetBitmapEx();
+
+ Update(rpProperties);
}
@@ -93,9 +105,40 @@ Theme::Theme (const ::boost::shared_ptr<controller::Properties>& rpProperties)
void Theme::Update (const ::boost::shared_ptr<controller::Properties>& rpProperties)
{
maBackgroundColor = rpProperties->GetBackgroundColor().GetColor();
+#ifdef USE_SYSTEM_SELECTION_COLOR
+ const ColorData aSelectionColor (rpProperties->GetSelectionColor().GetColor());
+ maSelectedGradient.maFillColor1 = ChangeLuminance(aSelectionColor, +50);
+ maSelectedGradient.maFillColor2 = ChangeLuminance(aSelectionColor, -10);
+ maSelectedGradient.maBorderColor1 = ChangeLuminance(aSelectionColor, -10);
+ maSelectedGradient.maBorderColor2 = ChangeLuminance(aSelectionColor, -30);
+
+ maMouseOverGradient.maFillColor1 = ChangeLuminance(aSelectionColor, -30);
+ maMouseOverGradient.maFillColor2 = ChangeLuminance(aSelectionColor, -90);
+ maMouseOverGradient.maBorderColor1 = ChangeLuminance(aSelectionColor, -30);
+ maMouseOverGradient.maBorderColor2 = ChangeLuminance(aSelectionColor, -10);
+
+#else
+
+ maSelectedGradient.maFillColor1 = 0xb7daf0;
+ maSelectedGradient.maFillColor2 = 0x6db5e1;
+ maSelectedGradient.maBorderColor1 = 0x6db5e1;
+ maSelectedGradient.maBorderColor2 = 0x0e85cd;
+
+ maMouseOverGradient.maFillColor1 = 0x0e85cd;
+ maMouseOverGradient.maFillColor2 = 0x044c99;
+ maMouseOverGradient.maBorderColor1 = 0x6db5e1;
+ maMouseOverGradient.maBorderColor2 = 0x0e85cd;
+#endif
+
+ maNormalGradient.maFillColor1 = maBackgroundColor;
+ maNormalGradient.maFillColor2 = maBackgroundColor;
+ maNormalGradient.maBorderColor1 = maBackgroundColor;
+ maNormalGradient.maBorderColor2 = maBackgroundColor;
}
+
+
::boost::shared_ptr<Font> Theme::CreateFont (
const FontType eType,
OutputDevice& rDevice) const
@@ -166,8 +209,14 @@ ColorData Theme::GetColor (const ColorType eType)
case PageNumberBorder:
return Azure;
+ case PageNumberColor:
+ return 0x0848a8f;
+
case Selection:
return StellaBlue;
+
+ case PreviewBorder:
+ return 0x000000;
}
return 0;
}
@@ -179,55 +228,40 @@ ColorData Theme::GetGradientColor (
const GradientColorType eType,
const GradientColorClass eClass)
{
+ GradientDescriptor* pDescriptor = NULL;
switch(eType)
{
case NormalPage:
- switch (eClass)
- {
- case Border1:
- case Border2:
- return maBackgroundColor;
-
- case Fill1:
- case Fill2:
- return maBackgroundColor;
- }
+ pDescriptor = &maNormalGradient;
break;
case SelectedPage:
- switch (eClass)
- {
- case Border1:
- return Border1ColorData;
-
- case Border2:
- return Border2ColorData;
-
- case Fill1:
- return SelectionFill1ColorData;
-
- case Fill2:
- return SelectionFill2ColorData;
- }
+ pDescriptor = &maSelectedGradient;
break;
case MouseOverPage:
- switch (eClass)
- {
- case Border1:
- return Border1ColorData;
-
- case Border2:
- return Border2ColorData;
-
- case Fill1:
- return MouseOverFill1ColorData;
+ pDescriptor = &maMouseOverGradient;
+ break;
- case Fill2:
- return MouseOverFill2ColorData;
- }
+ default:
+ OSL_ASSERT(false);
break;
}
+
+ if (pDescriptor != NULL)
+ {
+ switch (eClass)
+ {
+ case Border1: return pDescriptor->maBorderColor1;
+ case Border2: return pDescriptor->maBorderColor2;
+ case Fill1: return pDescriptor->maFillColor1;
+ case Fill2: return pDescriptor->maFillColor2;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ }
return 0;
}
diff --git a/sd/source/ui/toolpanel/TaskPaneViewShell.cxx b/sd/source/ui/toolpanel/TaskPaneViewShell.cxx
index 2d1475ca980c..287298fdca9b 100644
--- a/sd/source/ui/toolpanel/TaskPaneViewShell.cxx
+++ b/sd/source/ui/toolpanel/TaskPaneViewShell.cxx
@@ -89,7 +89,8 @@
#ifdef SHOW_TEST_PANEL
#include "TestPanel.hxx"
#endif
-//#define SHOW_COLOR_MENU
+
+#define SHOW_COLOR_MENU
#ifdef SHOW_COLOR_MENU
#include "TestMenu.hxx"
#endif
@@ -191,6 +192,7 @@ public:
class ResourceActivationClickHandler
{
public:
+ ResourceActivationClickHandler (void);
ResourceActivationClickHandler (
const ::boost::shared_ptr<FrameworkHelper>& rpFrameworkHelper,
const Reference<drawing::framework::XResourceId>& rxResourceId,
@@ -200,7 +202,7 @@ public:
private:
::boost::shared_ptr<FrameworkHelper> mpFrameworkHelper;
Reference<drawing::framework::XResourceId> mxResourceId;
- ControlContainer& mrControlContainer;
+ ControlContainer* mpControlContainer;
};
} // end of anonymouse namespace
@@ -299,7 +301,8 @@ void TaskPaneViewShell::Implementation::Setup (
pToolPanel->AddControl (
ColorMenu::CreateControlFactory(),
String::CreateFromAscii ("Color Test Menu"),
- 0);
+ 0,
+ ResourceActivationClickHandler());
#endif
#ifdef SHOW_TEST_PANEL
@@ -866,13 +869,23 @@ void PanelActivation::operator() (bool)
//===== ResourceActivationClickHandler ========================================
+ResourceActivationClickHandler::ResourceActivationClickHandler (void)
+ : mpFrameworkHelper(),
+ mxResourceId(),
+ mpControlContainer(NULL)
+{
+}
+
+
+
+
ResourceActivationClickHandler::ResourceActivationClickHandler (
const ::boost::shared_ptr<FrameworkHelper>& rpFrameworkHelper,
const Reference<drawing::framework::XResourceId>& rxResourceId,
ControlContainer& rControlContainer)
: mpFrameworkHelper(rpFrameworkHelper),
mxResourceId(rxResourceId),
- mrControlContainer(rControlContainer)
+ mpControlContainer(&rControlContainer)
{
}
@@ -881,11 +894,14 @@ ResourceActivationClickHandler::ResourceActivationClickHandler (
void ResourceActivationClickHandler::operator () (TitledControl& rTitledControl)
{
- mrControlContainer.SetExpansionState (
- &rTitledControl,
- ControlContainer::ES_EXPAND);
- mpFrameworkHelper->GetConfigurationController()->requestResourceActivation(
- mxResourceId, drawing::framework::ResourceActivationMode_REPLACE);
+ if (mxResourceId.is() && mpFrameworkHelper && mpControlContainer!=NULL)
+ {
+ mpControlContainer->SetExpansionState (
+ &rTitledControl,
+ ControlContainer::ES_EXPAND);
+ mpFrameworkHelper->GetConfigurationController()->requestResourceActivation(
+ mxResourceId, drawing::framework::ResourceActivationMode_REPLACE);
+ }
}
diff --git a/sd/source/ui/tools/PreviewRenderer.cxx b/sd/source/ui/tools/PreviewRenderer.cxx
index 770ca7fabf6c..4a166b74e1a1 100644
--- a/sd/source/ui/tools/PreviewRenderer.cxx
+++ b/sd/source/ui/tools/PreviewRenderer.cxx
@@ -418,8 +418,8 @@ void PreviewRenderer::ProvideView (DrawDocShell* pDocShell)
}
mpView->SetPreviewRenderer( sal_True );
mpView->SetBordVisible(FALSE);
- mpView->SetPageBorderVisible(FALSE);
- mpView->SetPageVisible(TRUE);
+ mpView->SetPageBorderVisible(TRUE);
+ mpView->SetPageVisible(FALSE);
}