/* This file is part of the KDE project Copyright (C) 2001-2005 David Faure This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "KoTextZoomHandler.h" #include #include #include #include // Layout text at 1440 DPI // Well, not really always 1440 DPI, but always 20 times the point size // This is constant, no need to litterally apply 1440 DPI at all resolutions. int KoTextZoomHandler::m_layoutUnitFactor = 20; #if 0 int KoTextZoomHandler::fontSizeToLayoutUnit( double ptSizeFloat, bool forPrint ) const { return ptToLayoutUnit( ptSizeFloat / ( m_zoomedResolutionY * ( forPrint ? 1.0 : (72.0 / KoGlobal::dpiY()) ) ) ); } #endif double KoTextZoomHandler::layoutUnitToFontSize( int luSize, bool /*forPrint*/ ) const { // TQt will use TQPaintDevice::x11AppDpiY() to go from pt to pixel for fonts return layoutUnitPtToPt( luSize ) * m_zoomedResolutionY #ifdef TQ_WS_X11 / POINT_TO_INCH(TQPaintDevice::x11AppDpiY()) #endif ; } int KoTextZoomHandler::layoutUnitToPixelX( int x, int w ) const { // We call layoutUnitToPixelX on the right value, i.e. x+w-1, // and then determine the height from the result (i.e. right-left+1). // Calling layoutUnitToPixelX(w) leads to rounding problems. return layoutUnitToPixelY( x + w - 1 ) - layoutUnitToPixelY( x ) + 1; } int KoTextZoomHandler::layoutUnitToPixelY( int y, int h ) const { // We call layoutUnitToPixelY on the bottom value, i.e. y+h-1, // and then determine the height from the result (i.e. bottom-top+1). // Calling layoutUnitToPixelY(h) leads to rounding problems. return layoutUnitToPixelY( y + h - 1 ) - layoutUnitToPixelY( y ) + 1; } int KoTextZoomHandler::layoutUnitToPixelX( int lupix ) const { return int( static_cast( lupix * m_zoomedResolutionX ) / ( static_cast( m_layoutUnitFactor ) * m_resolutionX ) ); } int KoTextZoomHandler::layoutUnitToPixelY( int lupix ) const { // tqRound replaced with a truncation, too many problems (e.g. bottom of parags) return int( static_cast( lupix * m_zoomedResolutionY ) / ( static_cast( m_layoutUnitFactor ) * m_resolutionY ) ); } int KoTextZoomHandler::pixelToLayoutUnitX( int x ) const { return tqRound( static_cast( x * m_layoutUnitFactor * m_resolutionX ) / m_zoomedResolutionX ); } int KoTextZoomHandler::pixelToLayoutUnitY( int y ) const { return tqRound( static_cast( y * m_layoutUnitFactor * m_resolutionY ) / m_zoomedResolutionY ); }