blob: 245bb51ca452577dc98bfb74d272182056023da2 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include <svx/sidebar/SidebarDialControl.hxx>
#include "SidebarDialControlBmp.hxx"
#include <vcl/svapp.hxx>
namespace svx { namespace sidebar {
SidebarDialControl::SidebarDialControl (
Window* pParent,
const ResId& rResId)
: svx::DialControl(pParent, rResId)
{
mpImpl->mpBmpEnabled.reset(new SidebarDialControlBmp(*this));
mpImpl->mpBmpDisabled.reset(new SidebarDialControlBmp(*this));
mpImpl->mpBmpBuffered.reset(new SidebarDialControlBmp(*this));
Init(GetOutputSizePixel());
}
SidebarDialControl::~SidebarDialControl (void)
{
}
void SidebarDialControl::MouseButtonDown( const MouseEvent& rMEvt )
{
if( rMEvt.IsLeft() )
{
GrabFocus();
CaptureMouse();
mpImpl->mnOldAngle = mpImpl->mnAngle;
HandleMouseEvent( rMEvt.GetPosPixel(), true );
}
}
void SidebarDialControl::HandleMouseEvent( const Point& rPos, bool bInitial )
{
long nX = rPos.X() - mpImpl->mnCenterX;
long nY = mpImpl->mnCenterY - rPos.Y();
double fH = sqrt( static_cast< double >( nX ) * nX + static_cast< double >( nY ) * nY );
if( fH != 0.0 )
{
double fAngle = acos( nX / fH );
sal_Int32 nAngle = static_cast< sal_Int32 >( fAngle / F_PI180 * 100.0 );
if( nY < 0 )
nAngle = 36000 - nAngle;
if( bInitial ) // round to entire 15 degrees
nAngle = ((nAngle + 750) / 1500) * 1500;
if (Application::GetSettings().GetLayoutRTL())
nAngle = 18000 - nAngle;
SetRotation( nAngle, true );
}
}
} } // end of namespace svx::sidebar
// eof