diff options
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/accessibility/AccessibleFrameSelector.cxx | 442 | ||||
-rw-r--r-- | svx/source/dialog/frmsel.cxx | 78 | ||||
-rw-r--r-- | svx/source/inc/AccessibleFrameSelector.hxx | 111 | ||||
-rw-r--r-- | svx/source/inc/frmselimpl.hxx | 6 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbcontrl.cxx | 11 |
5 files changed, 268 insertions, 380 deletions
diff --git a/svx/source/accessibility/AccessibleFrameSelector.cxx b/svx/source/accessibility/AccessibleFrameSelector.cxx index 4f31f7665b7c..e180bec3538b 100644 --- a/svx/source/accessibility/AccessibleFrameSelector.cxx +++ b/svx/source/accessibility/AccessibleFrameSelector.cxx @@ -54,55 +54,35 @@ using ::com::sun::star::awt::XFocusListener; using namespace ::com::sun::star::accessibility; -AccFrameSelector::AccFrameSelector( FrameSelector& rFrameSel, FrameBorderType eBorder ) : - mpFrameSel( &rFrameSel ), - meBorder( eBorder ), - maFocusListeners( maFocusMutex ), - maPropertyListeners( maPropertyMutex ), - mnClientId( 0 ) -{ - if ( mpFrameSel ) - { - mpFrameSel->AddEventListener( LINK( this, AccFrameSelector, WindowEventListener ) ); - } -} - - -AccFrameSelector::~AccFrameSelector() +AccFrameSelector::AccFrameSelector(FrameSelector& rFrameSel) + : mpFrameSel(&rFrameSel) { - RemoveFrameSelEventListener(); } - -void AccFrameSelector::RemoveFrameSelEventListener() +AccFrameSelector::~AccFrameSelector() { - if ( mpFrameSel ) - { - mpFrameSel->RemoveEventListener( LINK( this, AccFrameSelector, WindowEventListener ) ); - } } +IMPLEMENT_FORWARD_XINTERFACE2( AccFrameSelector, OAccessibleComponentHelper, OAccessibleHelper_Base ) +IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccFrameSelector, OAccessibleComponentHelper, OAccessibleHelper_Base ) Reference< XAccessibleContext > AccFrameSelector::getAccessibleContext( ) { return this; } - sal_Int32 AccFrameSelector::getAccessibleChildCount( ) { SolarMutexGuard aGuard; IsValid(); - return (meBorder == FrameBorderType::NONE) ? mpFrameSel->GetEnabledBorderCount() : 0; + return mpFrameSel->GetEnabledBorderCount(); } Reference< XAccessible > AccFrameSelector::getAccessibleChild( sal_Int32 i ) { SolarMutexGuard aGuard; IsValid(); - Reference< XAccessible > xRet; - if( meBorder == FrameBorderType::NONE ) - xRet = mpFrameSel->GetChildAccessible( i ); + Reference< XAccessible > xRet = mpFrameSel->GetChildAccessible( i ); if( !xRet.is() ) throw RuntimeException(); return xRet; @@ -112,86 +92,34 @@ Reference< XAccessible > AccFrameSelector::getAccessibleParent( ) { SolarMutexGuard aGuard; IsValid(); - Reference< XAccessible > xRet; - if(meBorder == FrameBorderType::NONE) - xRet = mpFrameSel->GetParent()->GetAccessible(); - else - xRet = mpFrameSel->CreateAccessible(); + Reference< XAccessible > xRet = mpFrameSel->getAccessibleParent(); return xRet; } -sal_Int32 AccFrameSelector::getAccessibleIndexInParent( ) -{ - SolarMutexGuard aGuard; - IsValid(); - - sal_Int32 nIdx = 0; - if( meBorder == FrameBorderType::NONE ) - { - vcl::Window* pTabPage = mpFrameSel->GetParent(); - if (!pTabPage) - return nIdx; - sal_Int32 nChildren = pTabPage->GetChildCount(); - for( nIdx = 0; nIdx < nChildren; ++nIdx ) - if( pTabPage->GetChild( static_cast< sal_uInt16 >( nIdx ) ) == mpFrameSel ) - break; - } - else - nIdx = mpFrameSel->GetEnabledBorderIndex( meBorder ); - - if( nIdx < 0 ) - throw RuntimeException(); - return nIdx; -} - sal_Int16 AccFrameSelector::getAccessibleRole( ) { - return meBorder == FrameBorderType::NONE ? AccessibleRole::OPTION_PANE : AccessibleRole::CHECK_BOX; + return AccessibleRole::OPTION_PANE; } OUString AccFrameSelector::getAccessibleDescription( ) { SolarMutexGuard aGuard; IsValid(); - return SvxResId(RID_SVXSTR_FRMSEL_DESCRIPTIONS[static_cast<sal_uInt32>(meBorder)].first); + return SvxResId(RID_SVXSTR_FRMSEL_DESCRIPTIONS[0].first); } OUString AccFrameSelector::getAccessibleName( ) { SolarMutexGuard aGuard; IsValid(); - return SvxResId(RID_SVXSTR_FRMSEL_TEXTS[static_cast<sal_uInt32>(meBorder)].first); + return SvxResId(RID_SVXSTR_FRMSEL_TEXTS[0].first); } Reference< XAccessibleRelationSet > AccFrameSelector::getAccessibleRelationSet( ) { SolarMutexGuard aGuard; IsValid(); - utl::AccessibleRelationSetHelper* pHelper; - Reference< XAccessibleRelationSet > xRet = pHelper = new utl::AccessibleRelationSetHelper; - if(meBorder == FrameBorderType::NONE) - { - //add the label relation - vcl::Window *pLabeledBy = mpFrameSel->GetAccessibleRelationLabeledBy(); - if ( pLabeledBy && pLabeledBy != mpFrameSel ) - { - AccessibleRelation aLabelRelation; - aLabelRelation.RelationType = AccessibleRelationType::LABELED_BY; - aLabelRelation.TargetSet.realloc(1); - aLabelRelation.TargetSet.getArray()[0] = pLabeledBy->GetAccessible(); - pHelper->AddRelation(aLabelRelation); - } - vcl::Window* pMemberOf = mpFrameSel->GetAccessibleRelationMemberOf(); - if ( pMemberOf && pMemberOf != mpFrameSel ) - { - AccessibleRelation aMemberOfRelation; - aMemberOfRelation.RelationType = AccessibleRelationType::MEMBER_OF; - aMemberOfRelation.TargetSet.realloc(1); - aMemberOfRelation.TargetSet.getArray()[0] = pMemberOf->GetAccessible(); - pHelper->AddRelation(aMemberOfRelation); - } - } - return xRet; + return mpFrameSel->get_accessible_relation_set(); } Reference< XAccessibleStateSet > AccFrameSelector::getAccessibleStateSet( ) @@ -225,9 +153,7 @@ Reference< XAccessibleStateSet > AccFrameSelector::getAccessibleStateSet( ) pStateSetHelper->AddState(AccessibleStateType::SENSITIVE); } - bool bIsParent = meBorder == FrameBorderType::NONE; - if(mpFrameSel->HasFocus() && - (bIsParent || mpFrameSel->IsBorderSelected(meBorder))) + if (mpFrameSel->HasFocus()) { pStateSetHelper->AddState(AccessibleStateType::ACTIVE); pStateSetHelper->AddState(AccessibleStateType::FOCUSED); @@ -237,290 +163,236 @@ Reference< XAccessibleStateSet > AccFrameSelector::getAccessibleStateSet( ) return xRet; } -Locale AccFrameSelector::getLocale( ) +Reference< XAccessible > AccFrameSelector::getAccessibleAtPoint( + const css::awt::Point& aPt ) { - return Application::GetSettings().GetUILanguageTag().getLocale(); + SolarMutexGuard aGuard; + IsValid(); + //aPt is relative to the frame selector + return mpFrameSel->GetChildAccessible( Point( aPt.X, aPt.Y ) ); } -sal_Bool AccFrameSelector::containsPoint( const css::awt::Point& aPt ) +void AccFrameSelector::grabFocus( ) { SolarMutexGuard aGuard; IsValid(); - //aPt is relative to the frame selector - return mpFrameSel->ContainsClickPoint( Point( aPt.X, aPt.Y ) ); + mpFrameSel->GrabFocus(); } -Reference< XAccessible > AccFrameSelector::getAccessibleAtPoint( - const css::awt::Point& aPt ) +sal_Int32 AccFrameSelector::getForeground( ) { SolarMutexGuard aGuard; - IsValid(); - //aPt is relative to the frame selector - return mpFrameSel->GetChildAccessible( Point( aPt.X, aPt.Y ) ); + + //see FrameSelector::Paint + const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); + return sal_Int32(rStyles.GetLabelTextColor()); +} + +sal_Int32 AccFrameSelector::getBackground( ) +{ + SolarMutexGuard aGuard; + + //see FrameSelector::Paint + const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); + return sal_Int32(rStyles.GetDialogColor()); } -css::awt::Rectangle AccFrameSelector::getBounds( ) +css::awt::Rectangle AccFrameSelector::implGetBounds() { SolarMutexGuard aGuard; IsValid(); - Size aSz; - Point aPos; - switch(meBorder) - { - case FrameBorderType::NONE: - aSz = mpFrameSel->GetSizePixel(); - aPos = mpFrameSel->GetPosPixel(); - break; - default: - const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder ); - aPos = aSpot.TopLeft(); - aSz = aSpot.GetSize(); - } + css::awt::Rectangle aRet; - aRet.X = aPos.X(); - aRet.Y = aPos.Y(); - aRet.Width = aSz.Width(); - aRet.Height = aSz.Height(); + + const Point aOutPos; + Size aOutSize(mpFrameSel->GetOutputSizePixel()); + + aRet.X = aOutPos.X(); + aRet.Y = aOutPos.Y(); + aRet.Width = aOutSize.Width(); + aRet.Height = aOutSize.Height(); + return aRet; } +void AccFrameSelector::IsValid() +{ + if(!mpFrameSel) + throw RuntimeException(); +} -css::awt::Point AccFrameSelector::getLocation( ) +void AccFrameSelector::Invalidate() { - SolarMutexGuard aGuard; - IsValid(); - Point aPos; - switch(meBorder) - { - case FrameBorderType::NONE: - aPos = mpFrameSel->GetPosPixel(); - break; - default: - const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder ); - aPos = aSpot.TopLeft(); - } - css::awt::Point aRet(aPos.X(), aPos.Y()); - return aRet; + mpFrameSel = nullptr; } +AccFrameSelectorChild::AccFrameSelectorChild(FrameSelector& rFrameSel, FrameBorderType eBorder) + : mpFrameSel(&rFrameSel) + , meBorder(eBorder) +{ +} -css::awt::Point AccFrameSelector::getLocationOnScreen( ) +AccFrameSelectorChild::~AccFrameSelectorChild() +{ +} + +IMPLEMENT_FORWARD_XINTERFACE2( AccFrameSelectorChild, OAccessibleComponentHelper, OAccessibleHelper_Base ) +IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccFrameSelectorChild, OAccessibleComponentHelper, OAccessibleHelper_Base ) + +Reference< XAccessibleContext > AccFrameSelectorChild::getAccessibleContext( ) +{ + return this; +} + +sal_Int32 AccFrameSelectorChild::getAccessibleChildCount( ) { SolarMutexGuard aGuard; IsValid(); - Point aPos; - switch(meBorder) - { - case FrameBorderType::NONE: - aPos = mpFrameSel->GetPosPixel(); - break; - default: - const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder ); - aPos = aSpot.TopLeft(); - } - aPos = mpFrameSel->OutputToAbsoluteScreenPixel( aPos ); - css::awt::Point aRet(aPos.X(), aPos.Y()); - return aRet; + return 0; } +Reference< XAccessible > AccFrameSelectorChild::getAccessibleChild( sal_Int32 ) +{ + throw RuntimeException(); +} -css::awt::Size AccFrameSelector::getSize( ) +Reference< XAccessible > AccFrameSelectorChild::getAccessibleParent( ) { SolarMutexGuard aGuard; IsValid(); - Size aSz; - switch(meBorder) - { - case FrameBorderType::NONE: - aSz = mpFrameSel->GetSizePixel(); - break; - default: - const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder ); - aSz = aSpot.GetSize(); - } - css::awt::Size aRet(aSz.Width(), aSz.Height()); - return aRet; + Reference< XAccessible > xRet = mpFrameSel->CreateAccessible(); + return xRet; } -void AccFrameSelector::grabFocus( ) +sal_Int16 AccFrameSelectorChild::getAccessibleRole( ) +{ + return AccessibleRole::CHECK_BOX; +} + +OUString AccFrameSelectorChild::getAccessibleDescription( ) { SolarMutexGuard aGuard; IsValid(); - mpFrameSel->GrabFocus(); + return SvxResId(RID_SVXSTR_FRMSEL_DESCRIPTIONS[static_cast<sal_uInt32>(meBorder)].first); } -sal_Int32 AccFrameSelector::getForeground( ) +OUString AccFrameSelectorChild::getAccessibleName( ) { SolarMutexGuard aGuard; IsValid(); - return sal_Int32(mpFrameSel->GetControlForeground()); + return SvxResId(RID_SVXSTR_FRMSEL_TEXTS[static_cast<sal_uInt32>(meBorder)].first); } -sal_Int32 AccFrameSelector::getBackground( ) +Reference< XAccessibleRelationSet > AccFrameSelectorChild::getAccessibleRelationSet( ) { SolarMutexGuard aGuard; IsValid(); - return sal_Int32(mpFrameSel->GetControlBackground()); + utl::AccessibleRelationSetHelper* pHelper; + Reference< XAccessibleRelationSet > xRet = pHelper = new utl::AccessibleRelationSetHelper; + return xRet; } -void AccFrameSelector::addAccessibleEventListener( const Reference< XAccessibleEventListener >& xListener ) +Reference< XAccessibleStateSet > AccFrameSelectorChild::getAccessibleStateSet( ) { SolarMutexGuard aGuard; + utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper; + Reference< XAccessibleStateSet > xRet = pStateSetHelper; - if ( xListener.is() ) + if(!mpFrameSel) + pStateSetHelper->AddState(AccessibleStateType::DEFUNC); + else { - if ( !mnClientId ) + const sal_Int16 aStandardStates[] = { - mnClientId = ::comphelper::AccessibleEventNotifier::registerClient(); + AccessibleStateType::EDITABLE, + AccessibleStateType::FOCUSABLE, + AccessibleStateType::MULTI_SELECTABLE, + AccessibleStateType::SELECTABLE, + AccessibleStateType::SHOWING, + AccessibleStateType::VISIBLE, + AccessibleStateType::OPAQUE, + 0}; + sal_Int16 nState = 0; + while(aStandardStates[nState]) + { + pStateSetHelper->AddState(aStandardStates[nState++]); + } + if(mpFrameSel->IsEnabled()) + { + pStateSetHelper->AddState(AccessibleStateType::ENABLED); + pStateSetHelper->AddState(AccessibleStateType::SENSITIVE); } - ::comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener ); - } -} - -void AccFrameSelector::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& xListener ) -{ - SolarMutexGuard aGuard; - if ( xListener.is() && mnClientId != 0 && - ::comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener ) == 0 ) - { - // no listeners anymore - // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client), - // and at least to us not firing any events anymore, in case somebody calls - // NotifyAccessibleEvent, again - ::comphelper::AccessibleEventNotifier::TClientId nId( mnClientId ); - mnClientId = 0; - ::comphelper::AccessibleEventNotifier::revokeClient( nId ); + if (mpFrameSel->HasFocus() && mpFrameSel->IsBorderSelected(meBorder)) + { + pStateSetHelper->AddState(AccessibleStateType::ACTIVE); + pStateSetHelper->AddState(AccessibleStateType::FOCUSED); + pStateSetHelper->AddState(AccessibleStateType::SELECTED); + } } + return xRet; } -OUString AccFrameSelector::getImplementationName( ) -{ - return OUString("AccFrameSelector"); -} - -sal_Bool AccFrameSelector::supportsService( const OUString& rServiceName ) +Reference< XAccessible > AccFrameSelectorChild::getAccessibleAtPoint( + const css::awt::Point& aPt ) { - return cppu::supportsService(this, rServiceName); + SolarMutexGuard aGuard; + IsValid(); + //aPt is relative to the frame selector + return mpFrameSel->GetChildAccessible( Point( aPt.X, aPt.Y ) ); } -Sequence< OUString > AccFrameSelector::getSupportedServiceNames( ) +css::awt::Rectangle AccFrameSelectorChild::implGetBounds( ) { - Sequence< OUString > aRet(3); - OUString* pArray = aRet.getArray(); - pArray[0] = "Accessible"; - pArray[1] = "AccessibleContext"; - pArray[2] = "AccessibleComponent"; + SolarMutexGuard aGuard; + IsValid(); + const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder ); + Point aPos = aSpot.TopLeft(); + Size aSz = aSpot.GetSize(); + css::awt::Rectangle aRet; + aRet.X = aPos.X(); + aRet.Y = aPos.Y(); + aRet.Width = aSz.Width(); + aRet.Height = aSz.Height(); return aRet; } -void AccFrameSelector::IsValid() +void AccFrameSelectorChild::grabFocus( ) { - if(!mpFrameSel) - throw RuntimeException(); + SolarMutexGuard aGuard; + IsValid(); + mpFrameSel->GrabFocus(); } -void AccFrameSelector::NotifyFocusListeners(bool bGetFocus) +sal_Int32 AccFrameSelectorChild::getForeground( ) { SolarMutexGuard aGuard; - css::awt::FocusEvent aEvent; - aEvent.FocusFlags = 0; - if(bGetFocus) - { - GetFocusFlags nFocusFlags = mpFrameSel->GetGetFocusFlags(); - if(nFocusFlags & GetFocusFlags::Tab) - aEvent.FocusFlags |= css::awt::FocusChangeReason::TAB; - if(nFocusFlags & GetFocusFlags::CURSOR) - aEvent.FocusFlags |= css::awt::FocusChangeReason::CURSOR; - if(nFocusFlags & GetFocusFlags::Mnemonic) - aEvent.FocusFlags |= css::awt::FocusChangeReason::MNEMONIC; - if(nFocusFlags & GetFocusFlags::Forward) - aEvent.FocusFlags |= css::awt::FocusChangeReason::FORWARD; - if(nFocusFlags & GetFocusFlags::Backward) - aEvent.FocusFlags |= css::awt::FocusChangeReason::BACKWARD; - if(nFocusFlags & GetFocusFlags::Around) - aEvent.FocusFlags |= css::awt::FocusChangeReason::AROUND; - if(nFocusFlags & GetFocusFlags::UniqueMnemonic) - aEvent.FocusFlags |= css::awt::FocusChangeReason::UNIQUEMNEMONIC; - } - aEvent.Temporary = false; - - Reference < XAccessibleContext > xThis( this ); - aEvent.Source = xThis; - ::comphelper::OInterfaceIteratorHelper2 aIter( maFocusListeners ); - while( aIter.hasMoreElements() ) - { - Reference < XFocusListener > xListener( aIter.next(), UNO_QUERY ); - if(bGetFocus) - xListener->focusGained( aEvent ); - else - xListener->focusLost( aEvent ); - } + //see FrameSelector::Paint + const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); + return sal_Int32(rStyles.GetLabelTextColor()); } - -IMPL_LINK( AccFrameSelector, WindowEventListener, VclWindowEvent&, rEvent, void ) +sal_Int32 AccFrameSelectorChild::getBackground( ) { - vcl::Window* pWindow = rEvent.GetWindow(); - DBG_ASSERT( pWindow, "AccFrameSelector::WindowEventListener: no window!" ); - if ( pWindow->IsAccessibilityEventsSuppressed() && ( rEvent.GetId() != VclEventId::ObjectDying ) ) - return; + SolarMutexGuard aGuard; - switch ( rEvent.GetId() ) - { - case VclEventId::WindowGetFocus: - { - if ( meBorder == FrameBorderType::NONE ) - { - Any aOldValue, aNewValue; - aNewValue <<= AccessibleStateType::FOCUSED; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); - } - } - break; - case VclEventId::WindowLoseFocus: - { - if ( meBorder == FrameBorderType::NONE ) - { - Any aOldValue, aNewValue; - aOldValue <<= AccessibleStateType::FOCUSED; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); - } - } - break; - default: - { - } - break; - } + //see FrameSelector::Paint + const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); + return sal_Int32(rStyles.GetDialogColor()); } - -void AccFrameSelector::NotifyAccessibleEvent( const sal_Int16 _nEventId, - const Any& _rOldValue, const Any& _rNewValue ) +void AccFrameSelectorChild::IsValid() { - if ( mnClientId ) - { - Reference< XInterface > xSource( *this ); - AccessibleEventObject aEvent( xSource, _nEventId, _rNewValue, _rOldValue ); - ::comphelper::AccessibleEventNotifier::addEvent( mnClientId, aEvent ); - } + if(!mpFrameSel) + throw RuntimeException(); } - -void AccFrameSelector::Invalidate() +void AccFrameSelectorChild::Invalidate() { - RemoveFrameSelEventListener(); mpFrameSel = nullptr; - EventObject aEvent; - Reference < XAccessibleContext > xThis( this ); - aEvent.Source = xThis; - maFocusListeners.disposeAndClear( aEvent ); - maPropertyListeners.disposeAndClear( aEvent ); } - } } diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx index fd1e7ddab1ed..c8340e80726f 100644 --- a/svx/source/dialog/frmsel.cxx +++ b/svx/source/dialog/frmsel.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/accessibility/AccessibleEventId.hpp> #include <com/sun/star/accessibility/AccessibleStateType.hpp> #include <vcl/settings.hxx> +#include <vcl/svapp.hxx> #include <drawinglayer/processor2d/processor2dtools.hxx> #include <bitmaps.hlst> @@ -261,8 +262,6 @@ FrameSelectorImpl::FrameSelectorImpl( FrameSelector& rFrameSel ) : FrameSelectorImpl::~FrameSelectorImpl() { - if( mxAccess.is() ) - mxAccess->Invalidate(); for( auto aIt = maChildVec.begin(), aEnd = maChildVec.end(); aIt != aEnd; ++aIt ) if( aIt->is() ) (*aIt)->Invalidate(); @@ -290,7 +289,7 @@ void FrameSelectorImpl::Initialize( FrameSelFlags nFlags ) void FrameSelectorImpl::InitColors() { - const StyleSettings& rSettings = mrFrameSel.GetSettings().GetStyleSettings(); + const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings(); maBackCol = rSettings.GetFieldColor(); mbHCMode = rSettings.GetHighContrastMode(); maArrowCol = rSettings.GetFieldTextColor(); @@ -346,7 +345,7 @@ void FrameSelectorImpl::InitArrowImageList() void FrameSelectorImpl::InitGlobalGeometry() { - Size aCtrlSize( mrFrameSel.CalcOutputSize( mrFrameSel.GetSizePixel() ) ); + Size aCtrlSize(mrFrameSel.GetOutputSizePixel()); /* nMinSize is the lower of width and height (control will always be squarish). FRAMESEL_GEOM_OUTER is the minimal distance between inner control border and any element. */ @@ -513,8 +512,6 @@ void FrameSelectorImpl::sizeChanged() InitGlobalGeometry(); InitBorderGeometry(); - // correct background around the used area - mrFrameSel.SetBackground( Wallpaper( maBackCol ) ); DoInvalidate( true ); } @@ -709,7 +706,7 @@ void FrameSelectorImpl::CopyVirDevToControl(vcl::RenderContext& rRenderContext) rRenderContext.DrawBitmapEx(maVirDevPos, mpVirDev->GetBitmapEx(Point(0, 0), mpVirDev->GetOutputSizePixel())); } -void FrameSelectorImpl::DrawAllTrackingRects() +void FrameSelectorImpl::DrawAllTrackingRects(vcl::RenderContext& rRenderContext) { tools::PolyPolygon aPPoly; if (mrFrameSel.IsAnyBorderSelected()) @@ -723,8 +720,9 @@ void FrameSelectorImpl::DrawAllTrackingRects() aPPoly.Insert( tools::Polygon(tools::Rectangle(maVirDevPos, mpVirDev->GetOutputSizePixel()))); aPPoly.Optimize(PolyOptimizeFlags::CLOSE); + for(sal_uInt16 nIdx = 0, nCount = aPPoly.Count(); nIdx < nCount; ++nIdx) - mrFrameSel.InvertTracking(aPPoly.GetObject(nIdx), ShowTrackFlags::Small | ShowTrackFlags::TrackWindow); + rRenderContext.Invert(aPPoly.GetObject(nIdx), InvertFlags::TrackFrame); } Point FrameSelectorImpl::GetDevPosFromMousePos( const Point& rMousePos ) const @@ -735,7 +733,7 @@ Point FrameSelectorImpl::GetDevPosFromMousePos( const Point& rMousePos ) const void FrameSelectorImpl::DoInvalidate( bool bFullRepaint ) { mbFullRepaint |= bFullRepaint; - mrFrameSel.Invalidate( InvalidateFlags::NoErase ); + mrFrameSel.Invalidate(); } // frame border state and style @@ -757,7 +755,7 @@ void FrameSelectorImpl::SetBorderState( FrameBorder& rBorder, FrameBorderState e else rBorder.SetState( eState ); if (pFrameSelector) - pFrameSelector->NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOld, aNew ); + pFrameSelector->NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOld, aNew ); DoInvalidate( true ); } @@ -816,22 +814,23 @@ bool FrameSelectorImpl::SelectedBordersEqual() const return bEqual; } -FrameSelector::FrameSelector(vcl::Window* pParent) - : Control(pParent, WB_BORDER|WB_TABSTOP) +FrameSelector::FrameSelector() { - // not in c'tor init list (avoid warning about usage of *this) - mxImpl.reset( new FrameSelectorImpl( *this ) ); - EnableRTL( false ); // #107808# don't mirror the mouse handling } -FrameSelector::~FrameSelector() +void FrameSelector::SetDrawingArea(weld::DrawingArea* pDrawingArea) { - disposeOnce(); + Size aPrefSize = pDrawingArea->get_ref_device().LogicToPixel(Size(61, 65), MapMode(MapUnit::MapAppFont)); + pDrawingArea->set_size_request(aPrefSize.Width(), aPrefSize.Height()); + CustomWidgetController::SetDrawingArea(pDrawingArea); + mxImpl.reset( new FrameSelectorImpl( *this ) ); + EnableRTL( false ); // #107808# don't mirror the mouse handling } -extern "C" SAL_DLLPUBLIC_EXPORT void makeSvxFrameSelector(VclPtr<vcl::Window> & rRet, VclPtr<vcl::Window> & pParent, VclBuilder::stringmap &) +FrameSelector::~FrameSelector() { - rRet = VclPtr<FrameSelector>::Create(pParent); + if( mxAccess.is() ) + mxAccess->Invalidate(); } void FrameSelector::Initialize( FrameSelFlags nFlags ) @@ -1023,9 +1022,9 @@ void FrameSelector::SetColorToSelection( const Color& rColor ) // accessibility Reference< XAccessible > FrameSelector::CreateAccessible() { - if( !mxImpl->mxAccess.is() ) - mxImpl->mxAccess = new a11y::AccFrameSelector( *this, FrameBorderType::NONE ); - return mxImpl->mxAccess.get(); + if( !mxAccess.is() ) + mxAccess = new a11y::AccFrameSelector(*this); + return mxAccess.get(); } Reference< XAccessible > FrameSelector::GetChildAccessible( FrameBorderType eBorder ) @@ -1036,7 +1035,7 @@ Reference< XAccessible > FrameSelector::GetChildAccessible( FrameBorderType eBor { --nVecIdx; if( !mxImpl->maChildVec[ nVecIdx ].is() ) - mxImpl->maChildVec[ nVecIdx ] = new a11y::AccFrameSelector( *this, eBorder ); + mxImpl->maChildVec[ nVecIdx ] = new a11y::AccFrameSelectorChild( *this, eBorder ); xRet = mxImpl->maChildVec[ nVecIdx ].get(); } return xRet; @@ -1078,7 +1077,7 @@ void FrameSelector::Paint(vcl::RenderContext& rRenderContext, const tools::Recta { mxImpl->CopyVirDevToControl(rRenderContext); if (HasFocus()) - mxImpl->DrawAllTrackingRects(); + mxImpl->DrawAllTrackingRects(rRenderContext); } void FrameSelector::MouseButtonDown( const MouseEvent& rMEvt ) @@ -1167,7 +1166,7 @@ void FrameSelector::MouseButtonDown( const MouseEvent& rMEvt ) } } -void FrameSelector::KeyInput( const KeyEvent& rKEvt ) +bool FrameSelector::KeyInput( const KeyEvent& rKEvt ) { bool bHandled = false; vcl::KeyCode aKeyCode = rKEvt.GetKeyCode(); @@ -1214,8 +1213,9 @@ void FrameSelector::KeyInput( const KeyEvent& rKEvt ) break; } } - if( !bHandled ) - Window::KeyInput(rKEvt); + if (bHandled) + return true; + return CustomWidgetController::KeyInput(rKEvt); } void FrameSelector::GetFocus() @@ -1225,8 +1225,6 @@ void FrameSelector::GetFocus() mxImpl->SelectBorder( *mxImpl->maEnabBorders.front(), true ); mxImpl->DoInvalidate( false ); - if( mxImpl->mxAccess.is() ) - mxImpl->mxAccess->NotifyFocusListeners( true ); if (IsAnyBorderSelected()) { FrameBorderType borderType = FrameBorderType::NONE; @@ -1250,36 +1248,27 @@ void FrameSelector::GetFocus() } for( SelFrameBorderIter aIt( mxImpl->maEnabBorders ); aIt.Is(); ++aIt ) mxImpl->SetBorderState( **aIt, FrameBorderState::Show ); - Control::GetFocus(); + CustomWidgetController::GetFocus(); } void FrameSelector::LoseFocus() { mxImpl->DoInvalidate( false ); - if( mxImpl->mxAccess.is() ) - mxImpl->mxAccess->NotifyFocusListeners( false ); - Control::LoseFocus(); + CustomWidgetController::LoseFocus(); } -void FrameSelector::DataChanged( const DataChangedEvent& rDCEvt ) +void FrameSelector::StyleUpdated() { - Control::DataChanged( rDCEvt ); - if( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) ) - mxImpl->InitVirtualDevice(); + mxImpl->InitVirtualDevice(); + CustomWidgetController::StyleUpdated(); } void FrameSelector::Resize() { - Control::Resize(); + CustomWidgetController::Resize(); mxImpl->sizeChanged(); } -Size FrameSelector::GetOptimalSize() const -{ - return LogicToPixel(Size(61, 65), MapMode(MapUnit::MapAppFont)); -} - - template< typename Cont, typename Iter, typename Pred > FrameBorderIterBase< Cont, Iter, Pred >::FrameBorderIterBase( container_type& rCont ) : maIt( rCont.begin() ), @@ -1295,7 +1284,6 @@ FrameBorderIterBase< Cont, Iter, Pred >& FrameBorderIterBase< Cont, Iter, Pred > return *this; } - } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/inc/AccessibleFrameSelector.hxx b/svx/source/inc/AccessibleFrameSelector.hxx index e7482b9e1c87..177780f6afc4 100644 --- a/svx/source/inc/AccessibleFrameSelector.hxx +++ b/svx/source/inc/AccessibleFrameSelector.hxx @@ -29,91 +29,110 @@ #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> #include <tools/link.hxx> #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer2.hxx> -#include <comphelper/accessibleeventnotifier.hxx> +#include <comphelper/accessibleselectionhelper.hxx> #include <svx/framebordertype.hxx> #include <vcl/vclptr.hxx> -class VclSimpleEvent; -class VclWindowEvent; - namespace svx { class FrameSelector; namespace a11y { +typedef ::cppu::ImplHelper1<css::accessibility::XAccessible> OAccessibleHelper_Base; -class AccFrameSelector final : - public ::cppu::WeakImplHelper< - css::accessibility::XAccessible, - css::accessibility::XAccessibleContext, - css::accessibility::XAccessibleComponent, - css::accessibility::XAccessibleEventBroadcaster, - css::lang::XServiceInfo - > +class AccFrameSelector final : public ::comphelper::OAccessibleComponentHelper, + public OAccessibleHelper_Base { public: - explicit AccFrameSelector( FrameSelector& rFrameSel, FrameBorderType eBorder ); - + explicit AccFrameSelector(FrameSelector& rFrameSel); virtual ~AccFrameSelector() override; - //XAccessible - virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override; + DECLARE_XINTERFACE( ) + DECLARE_XTYPEPROVIDER( ) + + //XAccessibleComponent + virtual void SAL_CALL grabFocus( ) override; + virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; //XAccessibleContext virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override; - virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override; virtual sal_Int16 SAL_CALL getAccessibleRole( ) override; virtual OUString SAL_CALL getAccessibleDescription( ) override; virtual OUString SAL_CALL getAccessibleName( ) override; virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; - virtual css::lang::Locale SAL_CALL getLocale( ) override; - //XAccessibleComponent - virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override; - virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; - virtual css::awt::Rectangle SAL_CALL getBounds( ) override; - virtual css::awt::Point SAL_CALL getLocation( ) override; - virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override; - virtual css::awt::Size SAL_CALL getSize( ) override; - virtual void SAL_CALL grabFocus( ) override; + //XAccessible + virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override; + virtual sal_Int32 SAL_CALL getForeground( ) override; virtual sal_Int32 SAL_CALL getBackground( ) override; - // XAccessibleEventBroadcaster - virtual void SAL_CALL addAccessibleEventListener ( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener) override; - virtual void SAL_CALL removeAccessibleEventListener ( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener) override; - - //XServiceInfo - virtual OUString SAL_CALL getImplementationName( ) override; - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; + void NotifyAccessibleEvent(const sal_Int16 _nEventId, const css::uno::Any& _rOldValue, const css::uno::Any& _rNewValue) + { + ::comphelper::OAccessibleComponentHelper::NotifyAccessibleEvent(_nEventId, _rOldValue, _rNewValue); + } void Invalidate(); - void NotifyFocusListeners(bool bGetFocus); - void NotifyAccessibleEvent( const sal_Int16 _nEventId, const css::uno::Any& _rOldValue, const css::uno::Any& _rNewValue ); private: - DECL_LINK( WindowEventListener, VclWindowEvent&, void ); + // OCommonAccessibleComponent + /// implements the calculation of the bounding rectangle + virtual css::awt::Rectangle implGetBounds( ) override; /// @throws css::uno::RuntimeException void IsValid(); - void RemoveFrameSelEventListener(); - VclPtr<FrameSelector> mpFrameSel; - ::osl::Mutex maFocusMutex; - ::osl::Mutex maPropertyMutex; + FrameSelector* mpFrameSel; +}; - FrameBorderType meBorder; +class AccFrameSelectorChild final : public ::comphelper::OAccessibleComponentHelper, + public OAccessibleHelper_Base +{ +public: + explicit AccFrameSelectorChild( FrameSelector& rFrameSel, FrameBorderType eBorder ); - ::comphelper::OInterfaceContainerHelper2 maFocusListeners; - ::comphelper::OInterfaceContainerHelper2 maPropertyListeners; + virtual ~AccFrameSelectorChild() override; - ::comphelper::AccessibleEventNotifier::TClientId mnClientId; + DECLARE_XINTERFACE( ) + DECLARE_XTYPEPROVIDER( ) + + //XAccessibleComponent + virtual void SAL_CALL grabFocus( ) override; + virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; + + //XAccessibleContext + virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override; + virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override; + virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override; + virtual sal_Int16 SAL_CALL getAccessibleRole( ) override; + virtual OUString SAL_CALL getAccessibleDescription( ) override; + virtual OUString SAL_CALL getAccessibleName( ) override; + virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; + virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; + + //XAccessible + virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override; + + virtual sal_Int32 SAL_CALL getForeground( ) override; + virtual sal_Int32 SAL_CALL getBackground( ) override; + + void Invalidate(); + +private: + // OCommonAccessibleComponent + /// implements the calculation of the bounding rectangle + virtual css::awt::Rectangle implGetBounds( ) override; + + /// @throws css::uno::RuntimeException + void IsValid(); + + FrameSelector* mpFrameSel; + + FrameBorderType meBorder; }; diff --git a/svx/source/inc/frmselimpl.hxx b/svx/source/inc/frmselimpl.hxx index 21c35ddd758d..29791d7ee540 100644 --- a/svx/source/inc/frmselimpl.hxx +++ b/svx/source/inc/frmselimpl.hxx @@ -30,6 +30,7 @@ namespace svx { namespace a11y { class AccFrameSelector; + class AccFrameSelectorChild; } class FrameBorder @@ -138,8 +139,7 @@ struct FrameSelectorImpl bool mbAutoSelect; /// true = Auto select a frame border, if focus reaches control. bool mbHCMode; /// true = High contrast mode. - rtl::Reference<a11y::AccFrameSelector> mxAccess; /// Pointer to accessibility object of the control. - std::vector<rtl::Reference<a11y::AccFrameSelector>> + std::vector<rtl::Reference<a11y::AccFrameSelectorChild>> maChildVec; /// Pointers to accessibility objects for frame borders. explicit FrameSelectorImpl( FrameSelector& rFrameSel ); ~FrameSelectorImpl(); @@ -185,7 +185,7 @@ struct FrameSelectorImpl void CopyVirDevToControl(vcl::RenderContext& rRenderContext); /** Draws tracking rectangles for all selected frame borders. */ - void DrawAllTrackingRects(); + void DrawAllTrackingRects(vcl::RenderContext& rRenderContext); /** Converts a mouse position to the virtual device position. */ Point GetDevPosFromMousePos( const Point& rMousePos ) const; diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index a0bcc10d34e9..62a0015bf901 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -1743,6 +1743,15 @@ bool SvxColorWindow::IsNoSelection() const return !mpButtonAutoColor->IsVisible() && !mpButtonNoneColor->IsVisible(); } +bool ColorWindow::IsNoSelection() const +{ + if (!mxColorSet->IsNoSelection()) + return false; + if (!mxRecentColorSet->IsNoSelection()) + return false; + return !mxButtonAutoColor->get_visible() && !mxButtonNoneColor->get_visible(); +} + void SvxColorWindow::statusChanged( const css::frame::FeatureStateEvent& rEvent ) { if (rEvent.FeatureURL.Complete == ".uno:ColorTableState") @@ -3840,7 +3849,7 @@ void ColorListBox::ShowPreview(const NamedColor &rColor) xDevice->SetLineColor(rStyleSettings.GetDisableColor()); xDevice->DrawRect(aRect); - m_xButton->set_image(*xDevice); + m_xButton->set_image(xDevice.get()); m_xButton->set_label(rColor.second); } |