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.
kvirc/src/kvilib/ext/kvi_pixmap.cpp

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);
}
}