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