/*************************************************************************** labelutils.cpp - description ------------------- begin : Sam Okt 26 2002 copyright : (C) 2002 by Dominik Seichter email : domseichter@web.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "labelutils.h" // TQt includes #include #include #include #include #include // KDE includes #include #include #include // own includes #include "printersettings.h" #define CONVERSION_FACTOR 25.4000508001016 LabelUtils::LabelUtils() { } LabelUtils::~LabelUtils() { } double LabelUtils::pixelToMm( double pixel, const TQPaintDevice* device, int mode ) { TQPaintDeviceMetrics pdm( device ? device : TDEApplication::desktop() ); if( mode == DpiX ) return (pixel * CONVERSION_FACTOR) / (double)pdm.logicalDpiX(); else return (pixel * CONVERSION_FACTOR) / (double)pdm.logicalDpiY(); } double LabelUtils::mmToPixel( double mm, const TQPaintDevice* device, int mode ) { if( !mm ) return 0; // We don't get valid metrics from the printer - and we want a better resolution // anyway (it's the PS driver that takes care of the printer resolution). TQPaintDeviceMetrics pdm( device ? device : TDEApplication::desktop() ); // tqDebug("DpiX=%i", pdm.logicalDpiX()); // tqDebug("DpiY=%i", pdm.logicalDpiY()); if( mode == DpiX ) return (mm / CONVERSION_FACTOR) * (double)pdm.logicalDpiX(); else return (mm / CONVERSION_FACTOR) * (double)pdm.logicalDpiY(); } double LabelUtils::pixelToPixelX( double unit, const TQPaintDevice* src, const TQPaintDevice* dest ) { TQPaintDeviceMetrics p1( src ); TQPaintDeviceMetrics p2( dest ); return ( unit * (double)p2.logicalDpiX() ) / (double)p1.logicalDpiX(); } double LabelUtils::pixelToPixelY( double unit, const TQPaintDevice* src, const TQPaintDevice* dest ) { TQPaintDeviceMetrics p1( src ); TQPaintDeviceMetrics p2( dest ); //return pixelToPixelX( unit, src, dest ); return ( unit * (double)p2.logicalDpiY() ) / (double)p1.logicalDpiY(); } const TQString LabelUtils::getTypeFromCaption( const TQString & cap ) { // TODO: remove this function TQString search = cap.right( cap.length() - cap.find(":") - 1 ).lower().stripWhiteSpace(); return search; } const TQString LabelUtils::getModeFromCaption( const TQString & cap ) { return cap.left( cap.find(":") ).lower().stripWhiteSpace(); } TQSize LabelUtils::stringSize( const TQString & t ) { TQSimpleRichText srt( t, TDEApplication::font() ); TQSize s; s.setWidth( srt.widthUsed() ); s.setHeight( srt.height() ); return s; } TQPixmap* LabelUtils::drawString(const TQString & t, int w, int h, double rot) { TQSimpleRichText srt(t, TDEApplication::font()); int width = (w > 0) ? w : srt.widthUsed(); int height = (h > 0) ? h : srt.height(); srt.setWidth( width ); TQPixmap* pix; TQPainter painter; if (rot == 0.0) { TQBitmap bm(width, height); bm.fill(TQt::color0); //transtqparent painter.begin(&bm); painter.save(); painter.setPen(TQt::color1); TQColorGroup cg; cg.setColor(TQColorGroup::Foreground, TQt::color1); cg.setColor(TQColorGroup::Text, TQt::color1); cg.setColor(TQColorGroup::Base, TQt::color0); srt.draw(&painter, 0, 0, bm.rect(), cg); painter.restore(); painter.end(); pix = new TQPixmap(width, height); pix->fill(TQt::white); pix->setMask(bm); if (!pix->isNull()) { painter.begin(pix); painter.setPen(TQt::black); TQColorGroup cg; srt.draw(&painter, 0, 0, pix->rect(), cg); painter.end(); } } else { int w2 = (w > 0) ? w : srt.widthUsed(); int h2 = (h > 0) ? h : srt.height(); TQWMatrix wm; wm.rotate(rot); TQSize s = LabelUtils::stringSize(t); TQPixmap* tmp = LabelUtils::drawString(t, s.width(), s.height()); TQPixmap* p = new TQPixmap(w2, h2); p->fill(TQt::white); painter.begin(p); painter.drawPixmap(0, 0, tmp->xForm(wm)); painter.end(); p->setMask(p->createHeuristicMask()); pix = p; delete tmp; } return pix; }