15d39f272SZheng Fan /**************************************************************
25d39f272SZheng Fan  *
35d39f272SZheng Fan  * Licensed to the Apache Software Foundation (ASF) under one
45d39f272SZheng Fan  * or more contributor license agreements.  See the NOTICE file
55d39f272SZheng Fan  * distributed with this work for additional information
65d39f272SZheng Fan  * regarding copyright ownership.  The ASF licenses this file
75d39f272SZheng Fan  * to you under the Apache License, Version 2.0 (the
85d39f272SZheng Fan  * "License"); you may not use this file except in compliance
95d39f272SZheng Fan  * with the License.  You may obtain a copy of the License at
105d39f272SZheng Fan  *
115d39f272SZheng Fan  *   http://www.apache.org/licenses/LICENSE-2.0
125d39f272SZheng Fan  *
135d39f272SZheng Fan  * Unless required by applicable law or agreed to in writing,
145d39f272SZheng Fan  * software distributed under the License is distributed on an
155d39f272SZheng Fan  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165d39f272SZheng Fan  * KIND, either express or implied.  See the License for the
175d39f272SZheng Fan  * specific language governing permissions and limitations
185d39f272SZheng Fan  * under the License.
195d39f272SZheng Fan  *
205d39f272SZheng Fan  *************************************************************/
215d39f272SZheng Fan 
22*facb16e7SArmin Le Grand #include <svx/sidebar/SidebarDialControl.hxx>
235d39f272SZheng Fan #include "SidebarDialControlBmp.hxx"
245d39f272SZheng Fan 
255d39f272SZheng Fan #include <vcl/svapp.hxx>
265d39f272SZheng Fan 
275d39f272SZheng Fan namespace svx { namespace sidebar {
285d39f272SZheng Fan 
295d39f272SZheng Fan SidebarDialControl::SidebarDialControl (
305d39f272SZheng Fan     Window* pParent,
315d39f272SZheng Fan     const ResId& rResId)
325d39f272SZheng Fan     : svx::DialControl(pParent, rResId)
335d39f272SZheng Fan {
345d39f272SZheng Fan     mpImpl->mpBmpEnabled.reset(new SidebarDialControlBmp(*this));
355d39f272SZheng Fan     mpImpl->mpBmpDisabled.reset(new SidebarDialControlBmp(*this));
365d39f272SZheng Fan     mpImpl->mpBmpBuffered.reset(new SidebarDialControlBmp(*this));
375d39f272SZheng Fan     Init(GetOutputSizePixel());
385d39f272SZheng Fan }
395d39f272SZheng Fan 
405d39f272SZheng Fan 
415d39f272SZheng Fan 
425d39f272SZheng Fan 
435d39f272SZheng Fan SidebarDialControl::~SidebarDialControl (void)
445d39f272SZheng Fan {
455d39f272SZheng Fan }
465d39f272SZheng Fan 
475d39f272SZheng Fan 
485d39f272SZheng Fan 
495d39f272SZheng Fan 
505d39f272SZheng Fan void SidebarDialControl::MouseButtonDown( const MouseEvent& rMEvt )
515d39f272SZheng Fan {
525d39f272SZheng Fan     if( rMEvt.IsLeft() )
535d39f272SZheng Fan     {
545d39f272SZheng Fan         GrabFocus();
555d39f272SZheng Fan         CaptureMouse();
565d39f272SZheng Fan         mpImpl->mnOldAngle = mpImpl->mnAngle;
575d39f272SZheng Fan         HandleMouseEvent( rMEvt.GetPosPixel(), true );
585d39f272SZheng Fan     }
595d39f272SZheng Fan }
605d39f272SZheng Fan 
615d39f272SZheng Fan 
625d39f272SZheng Fan 
635d39f272SZheng Fan 
645d39f272SZheng Fan void SidebarDialControl::HandleMouseEvent( const Point& rPos, bool bInitial )
655d39f272SZheng Fan {
665d39f272SZheng Fan     long nX = rPos.X() - mpImpl->mnCenterX;
675d39f272SZheng Fan     long nY = mpImpl->mnCenterY - rPos.Y();
685d39f272SZheng Fan     double fH = sqrt( static_cast< double >( nX ) * nX + static_cast< double >( nY ) * nY );
695d39f272SZheng Fan     if( fH != 0.0 )
705d39f272SZheng Fan     {
715d39f272SZheng Fan         double fAngle = acos( nX / fH );
725d39f272SZheng Fan         sal_Int32 nAngle = static_cast< sal_Int32 >( fAngle / F_PI180 * 100.0 );
735d39f272SZheng Fan         if( nY < 0 )
745d39f272SZheng Fan             nAngle = 36000 - nAngle;
755d39f272SZheng Fan         if( bInitial )  // round to entire 15 degrees
765d39f272SZheng Fan             nAngle = ((nAngle + 750) / 1500) * 1500;
775d39f272SZheng Fan 
785d39f272SZheng Fan 		if (Application::GetSettings().GetLayoutRTL())
795d39f272SZheng Fan 			nAngle = 18000 - nAngle;
805d39f272SZheng Fan         SetRotation( nAngle, true );
815d39f272SZheng Fan     }
825d39f272SZheng Fan }
835d39f272SZheng Fan 
845d39f272SZheng Fan } } // end of namespace svx::sidebar
85