/* * dragsupport.cpp - part of abakus * Copyright (C) 2004, 2005 Michael Pyne * * 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. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #include #include "dragsupport.h" namespace DragSupport { TQPixmap makePixmap(const TQString &text, const TQFont &font) { TQColor background(234, 178, 230); TQFontMetrics fm(font); int height = 2 * fm.height(); TQSize bonusSize (height, 0); TQSize size(fm.width(text), height); TQImage image(size + bonusSize, 32); image.setAlphaBuffer(false); image.fill(0); // All transparent pixels image.setAlphaBuffer(true); TQPixmap pix(size + bonusSize); pix.fill(TQt::magenta); // Watch for incoming hacks TQPainter painter(&pix); painter.setFont(font); // Outline black, background white painter.setPen(TQt::black); painter.setBrush(background); // roundRect is annoying in that the four "pies" in each corner aren't // circular, they're elliptical. Try to make the radii force it circular // again. painter.drawRoundRect(pix.rect(), 75 * pix.height() / pix.width(), 75); // Alias better names for some constants. int textLeft = height / 2; // Draw text painter.setPen(TQt::black); painter.drawText(textLeft, height / 4, size.width(), size.height(), 0, text); TQImage overlay(pix.convertToImage()); // The images should have the same size, copy pixels from overlay to the // bottom unless the pixel is called magenta. The pixels we don't copy // are transparent in the TQImage, and will remain transparent when // converted to a TQPixmap. for(int i = 0; i < image.width(); ++i) for(int j = 0; j < image.height(); ++j) { if(TQColor(overlay.pixel(i, j)) != TQt::magenta) image.setPixel(i, j, overlay.pixel(i, j)); } pix.convertFromImage(image); return pix; } } // DragSupport