You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
3.8 KiB
181 lines
3.8 KiB
//=============================================================================
|
|
//
|
|
// File : kvi_pixmap.cpp
|
|
// Creation date : Sat Jun 24 2000 14:00:27 by Szymon Stefanek
|
|
//
|
|
// This file is part of the KVirc irc client distribution
|
|
// Copyright (C) 2000-2007 Szymon Stefanek (pragma at kvirc dot net)
|
|
//
|
|
// 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 opinion) 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.
|
|
//
|
|
//=============================================================================
|
|
|
|
|
|
#define __KVILIB__
|
|
|
|
|
|
#include "kvi_debug.h"
|
|
#include "kvi_pixmap.h"
|
|
#include "kvi_qstring.h"
|
|
|
|
#include <tqpainter.h>
|
|
|
|
KviPixmap::KviPixmap()
|
|
{
|
|
m_pPix = 0;
|
|
}
|
|
|
|
KviPixmap::KviPixmap(const char * path)
|
|
{
|
|
m_pPix = 0;
|
|
load(path);
|
|
}
|
|
|
|
KviPixmap::KviPixmap(const KviPixmap &pix)
|
|
{
|
|
m_pPix = 0;
|
|
m_szPath = pix.path();
|
|
|
|
if(!m_szPath.isEmpty())
|
|
{
|
|
if(pix.pixmap())
|
|
{
|
|
m_pPix = new TQPixmap(*(pix.pixmap()));
|
|
}
|
|
}
|
|
}
|
|
|
|
KviPixmap::~KviPixmap()
|
|
{
|
|
if(m_pPix)delete m_pPix;
|
|
m_pPix = 0; // just to be sure :)
|
|
}
|
|
|
|
bool KviPixmap::load(const char * path)
|
|
{
|
|
if(m_pPix)delete m_pPix;
|
|
m_pPix = 0;
|
|
m_szPath = path;
|
|
if(m_szPath.isEmpty())return false;
|
|
|
|
m_pPix = new TQPixmap(m_szPath);
|
|
|
|
if(m_pPix->isNull())
|
|
{
|
|
delete m_pPix;
|
|
m_pPix = 0;
|
|
m_szPath = "";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool KviPixmap::load(const TQString& path)
|
|
{
|
|
if(m_pPix)delete m_pPix;
|
|
m_pPix = 0;
|
|
m_szPath = path;
|
|
if(m_szPath.isEmpty())return false;
|
|
|
|
m_pPix = new TQPixmap(m_szPath);
|
|
|
|
if(m_pPix->isNull())
|
|
{
|
|
delete m_pPix;
|
|
m_pPix = 0;
|
|
m_szPath = "";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void KviPixmap::set(const TQPixmap &pix,const TQString &szPath)
|
|
{
|
|
if(pix.isNull())
|
|
{
|
|
setNull();
|
|
return;
|
|
}
|
|
|
|
if(m_pPix)delete m_pPix;
|
|
m_pPix = new TQPixmap(pix);
|
|
m_szPath = szPath;
|
|
}
|
|
|
|
|
|
void KviPixmap::setNull()
|
|
{
|
|
if(m_pPix)delete m_pPix;
|
|
m_pPix = 0;
|
|
m_szPath = "";
|
|
}
|
|
|
|
KviPixmap & KviPixmap::operator=(const KviPixmap &pix)
|
|
{
|
|
if(m_pPix == pix.m_pPix)return (*this); // self assignment (!!!)
|
|
if(KviTQString::equalCI(m_szPath,pix.path()))return (*this); // same pix
|
|
|
|
if(m_pPix)delete m_pPix;
|
|
m_pPix = 0;
|
|
m_szPath = pix.path();
|
|
|
|
if(!m_szPath.isEmpty())
|
|
{
|
|
if(pix.pixmap())
|
|
{
|
|
m_pPix = new TQPixmap(*(pix.pixmap()));
|
|
}
|
|
}
|
|
return (*this);
|
|
}
|
|
|
|
|
|
void KviPixmapUtils::drawPixmapWithPainter(TQPainter* p,TQPixmap * pix,int flags,const TQRect& paintRect,int iWidgetWidth,int iWidgetHeight,int dx,int dy)
|
|
{
|
|
if(!pix)return;
|
|
if(!flags)
|
|
{
|
|
p->drawTiledPixmap(paintRect.left(),paintRect.top(),paintRect.width(),paintRect.height(),*pix,dx,dy);
|
|
return;
|
|
}
|
|
|
|
int iPixWidth=pix->width();
|
|
int iPixHeight=pix->height();
|
|
int x=0;
|
|
int y=0;
|
|
|
|
if( !(flags & TQt::AlignHorizontal_Mask ))
|
|
x=-1;
|
|
else if ( flags & TQt::AlignRight )
|
|
x=iWidgetWidth - iPixWidth;
|
|
else if( flags & TQt::AlignHCenter )
|
|
x=(iWidgetWidth - iPixWidth)/2;
|
|
|
|
if( !(flags & TQt::AlignVertical_Mask ))
|
|
y=-1;
|
|
else if ( flags & TQt::AlignBottom )
|
|
y=iWidgetHeight - iPixHeight;
|
|
else if( flags & TQt::AlignVCenter )
|
|
y=(iWidgetHeight - iPixHeight)/2;
|
|
|
|
if(x==-1) {
|
|
p->drawTiledPixmap(paintRect.left(),y,paintRect.width(),iPixHeight,*pix,dx,dy);
|
|
} else if(y==-1) {
|
|
p->drawTiledPixmap(x,paintRect.top(),iPixWidth,paintRect.height(),*pix,dx,dy);
|
|
} else {
|
|
p->drawPixmap(x,y,*pix);
|
|
}
|
|
}
|