Kaydet (Commit) 9a81ba66 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

refactor FrameSelector to use RenderContext

Change-Id: I53123245277a76aa6f782e589d10b82e3dc1d9e7
üst 37b8f4e0
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
#include <algorithm> #include <algorithm>
#include <math.h> #include <math.h>
#include "frmselimpl.hxx" #include <frmselimpl.hxx>
#include "AccessibleFrameSelector.hxx" #include <AccessibleFrameSelector.hxx>
#include <svx/dialmgr.hxx> #include <svx/dialmgr.hxx>
#include <com/sun/star/accessibility/AccessibleEventId.hpp> #include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp> #include <com/sun/star/accessibility/AccessibleStateType.hpp>
...@@ -60,9 +60,8 @@ size_t GetIndexFromFrameBorderType( FrameBorderType eBorder ) ...@@ -60,9 +60,8 @@ size_t GetIndexFromFrameBorderType( FrameBorderType eBorder )
return static_cast< size_t >( eBorder ) - 1; return static_cast< size_t >( eBorder ) - 1;
} }
namespace
{
namespace {
/** Space between outer control border and any graphical element of the control. */ /** Space between outer control border and any graphical element of the control. */
const long FRAMESEL_GEOM_OUTER = 2; const long FRAMESEL_GEOM_OUTER = 2;
...@@ -80,7 +79,6 @@ const long FRAMESEL_GEOM_ADD_CLICK_OUTER = 5; ...@@ -80,7 +79,6 @@ const long FRAMESEL_GEOM_ADD_CLICK_OUTER = 5;
const long FRAMESEL_GEOM_ADD_CLICK_INNER = 2; const long FRAMESEL_GEOM_ADD_CLICK_INNER = 2;
/** Returns the corresponding flag for a frame border. */ /** Returns the corresponding flag for a frame border. */
FrameSelFlags lclGetFlagFromType( FrameBorderType eBorder ) FrameSelFlags lclGetFlagFromType( FrameBorderType eBorder )
{ {
...@@ -301,12 +299,12 @@ void FrameSelectorImpl::Initialize( FrameSelFlags nFlags ) ...@@ -301,12 +299,12 @@ void FrameSelectorImpl::Initialize( FrameSelFlags nFlags )
void FrameSelectorImpl::InitColors() void FrameSelectorImpl::InitColors()
{ {
const StyleSettings& rSett = mrFrameSel.GetSettings().GetStyleSettings(); const StyleSettings& rSettings = mrFrameSel.GetSettings().GetStyleSettings();
maBackCol = rSett.GetFieldColor(); maBackCol = rSettings.GetFieldColor();
mbHCMode = rSett.GetHighContrastMode(); mbHCMode = rSettings.GetHighContrastMode();
maArrowCol = rSett.GetFieldTextColor(); maArrowCol = rSettings.GetFieldTextColor();
maMarkCol.operator=( maBackCol ).Merge( maArrowCol, mbHCMode ? 0x80 : 0xC0 ); maMarkCol.operator=(maBackCol).Merge(maArrowCol, mbHCMode ? 0x80 : 0xC0);
maHCLineCol = rSett.GetLabelTextColor(); maHCLineCol = rSettings.GetLabelTextColor();
} }
void FrameSelectorImpl::InitArrowImageList() void FrameSelectorImpl::InitArrowImageList()
...@@ -595,8 +593,8 @@ void FrameSelectorImpl::DrawArrows( const FrameBorder& rBorder ) ...@@ -595,8 +593,8 @@ void FrameSelectorImpl::DrawArrows( const FrameBorder& rBorder )
void FrameSelectorImpl::DrawAllArrows() void FrameSelectorImpl::DrawAllArrows()
{ {
for( FrameBorderCIter aIt( maEnabBorders ); aIt.Is(); ++aIt ) for(FrameBorderCIter aIt(maEnabBorders); aIt.Is(); ++aIt)
DrawArrows( **aIt ); DrawArrows(**aIt);
} }
Color FrameSelectorImpl::GetDrawLineColor( const Color& rColor ) const Color FrameSelectorImpl::GetDrawLineColor( const Color& rColor ) const
...@@ -669,29 +667,29 @@ void FrameSelectorImpl::DrawVirtualDevice() ...@@ -669,29 +667,29 @@ void FrameSelectorImpl::DrawVirtualDevice()
mbFullRepaint = false; mbFullRepaint = false;
} }
void FrameSelectorImpl::CopyVirDevToControl() void FrameSelectorImpl::CopyVirDevToControl(vcl::RenderContext& rRenderContext)
{ {
if( mbFullRepaint ) if (mbFullRepaint)
DrawVirtualDevice(); DrawVirtualDevice();
mrFrameSel.DrawBitmap( maVirDevPos, mpVirDev->GetBitmap( Point( 0, 0 ), mpVirDev->GetOutputSizePixel() ) ); rRenderContext.DrawBitmap(maVirDevPos, mpVirDev->GetBitmap(Point(0, 0), mpVirDev->GetOutputSizePixel()));
} }
void FrameSelectorImpl::DrawAllTrackingRects() void FrameSelectorImpl::DrawAllTrackingRects()
{ {
tools::PolyPolygon aPPoly; tools::PolyPolygon aPPoly;
if( mrFrameSel.IsAnyBorderSelected() ) if (mrFrameSel.IsAnyBorderSelected())
{ {
for( SelFrameBorderCIter aIt( maEnabBorders ); aIt.Is(); ++aIt ) for(SelFrameBorderCIter aIt( maEnabBorders ); aIt.Is(); ++aIt)
(*aIt)->MergeFocusToPolyPolygon( aPPoly ); (*aIt)->MergeFocusToPolyPolygon(aPPoly);
aPPoly.Move( maVirDevPos.X(), maVirDevPos.Y() ); aPPoly.Move(maVirDevPos.X(), maVirDevPos.Y());
} }
else else
// no frame border selected -> draw tracking rectangle around entire control // no frame border selected -> draw tracking rectangle around entire control
aPPoly.Insert( Polygon( Rectangle( maVirDevPos, mpVirDev->GetOutputSizePixel() ) ) ); aPPoly.Insert(Polygon(Rectangle(maVirDevPos, mpVirDev->GetOutputSizePixel())));
aPPoly.Optimize( PolyOptimizeFlags::CLOSE ); aPPoly.Optimize(PolyOptimizeFlags::CLOSE);
for( sal_uInt16 nIdx = 0, nCount = aPPoly.Count(); nIdx < nCount; ++nIdx ) for(sal_uInt16 nIdx = 0, nCount = aPPoly.Count(); nIdx < nCount; ++nIdx)
mrFrameSel.InvertTracking( aPPoly.GetObject( nIdx ), SHOWTRACK_SMALL | SHOWTRACK_WINDOW ); mrFrameSel.InvertTracking(aPPoly.GetObject(nIdx), SHOWTRACK_SMALL | SHOWTRACK_WINDOW);
} }
Point FrameSelectorImpl::GetDevPosFromMousePos( const Point& rMousePos ) const Point FrameSelectorImpl::GetDevPosFromMousePos( const Point& rMousePos ) const
...@@ -1044,10 +1042,10 @@ Rectangle FrameSelector::GetClickBoundRect( FrameBorderType eBorder ) const ...@@ -1044,10 +1042,10 @@ Rectangle FrameSelector::GetClickBoundRect( FrameBorderType eBorder ) const
} }
// virtual functions from base class // virtual functions from base class
void FrameSelector::Paint( vcl::RenderContext& /*rRenderContext*/, const Rectangle& ) void FrameSelector::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
{ {
mxImpl->CopyVirDevToControl(); mxImpl->CopyVirDevToControl(rRenderContext);
if( HasFocus() ) if (HasFocus())
mxImpl->DrawAllTrackingRects(); mxImpl->DrawAllTrackingRects();
} }
......
...@@ -28,73 +28,80 @@ ...@@ -28,73 +28,80 @@
namespace svx { namespace svx {
namespace a11y { class AccFrameSelector; } namespace a11y {
class AccFrameSelector;
}
class FrameBorder class FrameBorder
{ {
public: public:
explicit FrameBorder( FrameBorderType eType ); explicit FrameBorder(FrameBorderType eType);
inline FrameBorderType GetType() const { return meType; } inline FrameBorderType GetType() const
{
return meType;
}
inline bool IsEnabled() const { return mbEnabled; } inline bool IsEnabled() const
void Enable( FrameSelFlags nFlags ); {
return mbEnabled;
}
void Enable(FrameSelFlags nFlags);
inline FrameBorderState GetState() const { return meState; } inline FrameBorderState GetState() const
void SetState( FrameBorderState eState ); {
return meState;
}
void SetState(FrameBorderState eState);
inline bool IsSelected() const { return mbSelected; } inline bool IsSelected() const { return mbSelected; }
inline void Select( bool bSelect ) { mbSelected = bSelect; } inline void Select( bool bSelect ) { mbSelected = bSelect; }
const editeng::SvxBorderLine& GetCoreStyle() const { return maCoreStyle; } const editeng::SvxBorderLine& GetCoreStyle() const { return maCoreStyle; }
void SetCoreStyle( const editeng::SvxBorderLine* pStyle ); void SetCoreStyle( const editeng::SvxBorderLine* pStyle );
inline void SetUIColorPrim( const Color& rColor ) {maUIStyle.SetColorPrim( rColor ); } inline void SetUIColorPrim( const Color& rColor ) {maUIStyle.SetColorPrim( rColor ); }
inline void SetUIColorSecn( const Color& rColor ) {maUIStyle.SetColorSecn( rColor ); } inline void SetUIColorSecn( const Color& rColor ) {maUIStyle.SetColorSecn( rColor ); }
inline void SetUIColorGap( bool bUseIt, const Color& rColor ) {maUIStyle.SetColorGap(bUseIt, rColor);} inline void SetUIColorGap( bool bUseIt, const Color& rColor ) {maUIStyle.SetColorGap(bUseIt, rColor);}
inline const frame::Style& GetUIStyle() const { return maUIStyle; } inline const frame::Style& GetUIStyle() const { return maUIStyle; }
inline void ClearFocusArea() { maFocusArea.Clear(); } inline void ClearFocusArea() { maFocusArea.Clear(); }
void AddFocusPolygon( const Polygon& rFocus ); void AddFocusPolygon( const Polygon& rFocus );
void MergeFocusToPolyPolygon( tools::PolyPolygon& rPPoly ) const; void MergeFocusToPolyPolygon( tools::PolyPolygon& rPPoly ) const;
inline void ClearClickArea() { maClickArea.Clear(); } inline void ClearClickArea() { maClickArea.Clear(); }
void AddClickRect( const Rectangle& rRect ); void AddClickRect( const Rectangle& rRect );
bool ContainsClickPoint( const Point& rPos ) const; bool ContainsClickPoint( const Point& rPos ) const;
Rectangle GetClickBoundRect() const; Rectangle GetClickBoundRect() const;
void SetKeyboardNeighbors( void SetKeyboardNeighbors(FrameBorderType eLeft, FrameBorderType eRight,
FrameBorderType eLeft, FrameBorderType eRight, FrameBorderType eTop, FrameBorderType eBottom);
FrameBorderType eTop, FrameBorderType eBottom ); FrameBorderType GetKeyboardNeighbor( sal_uInt16 nKeyCode ) const;
FrameBorderType GetKeyboardNeighbor( sal_uInt16 nKeyCode ) const;
private: private:
const FrameBorderType meType; /// Frame border type (position in control). const FrameBorderType meType; /// Frame border type (position in control).
FrameBorderState meState; /// Frame border state (on/off/don't care). FrameBorderState meState; /// Frame border state (on/off/don't care).
editeng::SvxBorderLine maCoreStyle; /// Core style from application. editeng::SvxBorderLine maCoreStyle; /// Core style from application.
frame::Style maUIStyle; /// Internal style to draw lines. frame::Style maUIStyle; /// Internal style to draw lines.
FrameBorderType meKeyLeft; /// Left neighbor for keyboard control. FrameBorderType meKeyLeft; /// Left neighbor for keyboard control.
FrameBorderType meKeyRight; /// Right neighbor for keyboard control. FrameBorderType meKeyRight; /// Right neighbor for keyboard control.
FrameBorderType meKeyTop; /// Upper neighbor for keyboard control. FrameBorderType meKeyTop; /// Upper neighbor for keyboard control.
FrameBorderType meKeyBottom; /// Lower neighbor for keyboard control. FrameBorderType meKeyBottom; /// Lower neighbor for keyboard control.
tools::PolyPolygon maFocusArea; /// Focus drawing areas. tools::PolyPolygon maFocusArea; /// Focus drawing areas.
tools::PolyPolygon maClickArea; /// Mouse click areas. tools::PolyPolygon maClickArea; /// Mouse click areas.
bool mbEnabled; /// true = Border enabled in control. bool mbEnabled : 1; /// true = Border enabled in control.
bool mbSelected; /// true = Border selected in control. bool mbSelected : 1; /// true = Border selected in control.
}; };
typedef std::vector< FrameBorder* > FrameBorderPtrVec; typedef std::vector< FrameBorder* > FrameBorderPtrVec;
struct FrameSelectorImpl : public Resource struct FrameSelectorImpl : public Resource
{ {
typedef ::com::sun::star::uno::Reference< typedef css::uno::Reference<css::accessibility::XAccessible> XAccessibleRef;
::com::sun::star::accessibility::XAccessible > XAccessibleRef; typedef std::vector<a11y::AccFrameSelector*> AccessibleImplVec;
typedef std::vector< a11y::AccFrameSelector* > AccessibleImplVec; typedef std::vector<XAccessibleRef> XAccessibleRefVec;
typedef std::vector< XAccessibleRef > XAccessibleRefVec;
FrameSelector& mrFrameSel; /// The control itself. FrameSelector& mrFrameSel; /// The control itself.
ScopedVclPtr<VirtualDevice> mpVirDev; /// For all buffered drawing operations. ScopedVclPtr<VirtualDevice> mpVirDev; /// For all buffered drawing operations.
...@@ -114,7 +121,7 @@ struct FrameSelectorImpl : public Resource ...@@ -114,7 +121,7 @@ struct FrameSelectorImpl : public Resource
FrameBorder maVer; /// All data of inner vertical frame border. FrameBorder maVer; /// All data of inner vertical frame border.
FrameBorder maTLBR; /// All data of top-left to bottom-right frame border. FrameBorder maTLBR; /// All data of top-left to bottom-right frame border.
FrameBorder maBLTR; /// All data of bottom-left to top-right frame border. FrameBorder maBLTR; /// All data of bottom-left to top-right frame border.
editeng::SvxBorderLine maCurrStyle; /// Current style and color for new borders. editeng::SvxBorderLine maCurrStyle; /// Current style and color for new borders.
frame::Array maArray; /// Frame link array to draw an array of frame borders. frame::Array maArray; /// Frame link array to draw an array of frame borders.
FrameSelFlags mnFlags; /// Flags for enabled frame borders. FrameSelFlags mnFlags; /// Flags for enabled frame borders.
...@@ -188,7 +195,7 @@ struct FrameSelectorImpl : public Resource ...@@ -188,7 +195,7 @@ struct FrameSelectorImpl : public Resource
/** Draws all contents of the control. */ /** Draws all contents of the control. */
void DrawVirtualDevice(); void DrawVirtualDevice();
/** Copies contents of the virtual device to the control. */ /** Copies contents of the virtual device to the control. */
void CopyVirDevToControl(); void CopyVirDevToControl(vcl::RenderContext& rRenderContext);
/** Draws tracking rectangles for all selected frame borders. */ /** Draws tracking rectangles for all selected frame borders. */
void DrawAllTrackingRects(); void DrawAllTrackingRects();
...@@ -244,11 +251,11 @@ template< typename Cont, typename Iter, typename Pred > ...@@ -244,11 +251,11 @@ template< typename Cont, typename Iter, typename Pred >
class FrameBorderIterBase class FrameBorderIterBase
{ {
public: public:
typedef Cont container_type; typedef Cont container_type;
typedef Iter iterator_type; typedef Iter iterator_type;
typedef Pred predicate_type; typedef Pred predicate_type;
typedef typename Cont::value_type value_type; typedef typename Cont::value_type value_type;
typedef FrameBorderIterBase< Cont, Iter, Pred > this_type; typedef FrameBorderIterBase<Cont, Iter, Pred> this_type;
explicit FrameBorderIterBase( container_type& rCont ); explicit FrameBorderIterBase( container_type& rCont );
inline bool Is() const { return maIt != maEnd; } inline bool Is() const { return maIt != maEnd; }
...@@ -285,8 +292,6 @@ typedef FrameBorderIterBase< const FrameBorderPtrVec, FrameBorderPtrVec::const_i ...@@ -285,8 +292,6 @@ typedef FrameBorderIterBase< const FrameBorderPtrVec, FrameBorderPtrVec::const_i
typedef FrameBorderIterBase< FrameBorderPtrVec, FrameBorderPtrVec::iterator, FrameBorderSelected_Pred > typedef FrameBorderIterBase< FrameBorderPtrVec, FrameBorderPtrVec::iterator, FrameBorderSelected_Pred >
SelFrameBorderIter; SelFrameBorderIter;
} // namespace svx } // namespace svx
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment