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.
182 lines
5.0 KiB
182 lines
5.0 KiB
/*
|
|
* Copyright (C) 2003 by Unai Garro <ugarro@users.sourceforge.net>
|
|
* Copyright (C) 2004 by Enrico Ros <rosenric@dei.unipd.it>
|
|
* Copyright (C) 2004 by Stephan Kulow <coolo@kde.org>
|
|
* Copyright (C) 2004 by Oswald Buddenhagen <ossi@kde.org>
|
|
*
|
|
* 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 "tdmrect.h"
|
|
#include "tdmthemer.h"
|
|
#include "tdmconfig.h"
|
|
|
|
#include <kimageeffect.h>
|
|
#include <kdebug.h>
|
|
|
|
#include <tqimage.h>
|
|
#include <tqpainter.h>
|
|
#include <tqwidget.h>
|
|
#include <tqlayout.h>
|
|
|
|
extern bool argb_visual_available;
|
|
|
|
KdmRect::KdmRect( KdmItem *parent, const TQDomNode &node, const char *name )
|
|
: KdmItem( parent, node, name )
|
|
{
|
|
init( node, name );
|
|
}
|
|
|
|
KdmRect::KdmRect( TQWidget *parent, const TQDomNode &node, const char *name )
|
|
: KdmItem( parent, node, name )
|
|
{
|
|
init( node, name );
|
|
}
|
|
|
|
void
|
|
KdmRect::init( const TQDomNode &node, const char * )
|
|
{
|
|
itemType = "rect";
|
|
|
|
// Set default values for rect (note: strings are already Null)
|
|
rect.normal.alpha = 1;
|
|
rect.active.present = false;
|
|
rect.prelight.present = false;
|
|
rect.hasBorder = false;
|
|
|
|
// A rect can have no properties (defaults to parent ones)
|
|
if (node.isNull())
|
|
return;
|
|
|
|
// Read RECT ID
|
|
TQDomNode n = node;
|
|
TQDomElement elRect = n.toElement();
|
|
|
|
// Read RECT TAGS
|
|
TQDomNodeList childList = node.childNodes();
|
|
for (uint nod = 0; nod < childList.count(); nod++) {
|
|
TQDomNode child = childList.item( nod );
|
|
TQDomElement el = child.toElement();
|
|
TQString tagName = el.tagName();
|
|
|
|
if (tagName == "normal") {
|
|
parseColor( el.attribute( "color", TQString::null ), rect.normal.color );
|
|
rect.normal.alpha = el.attribute( "alpha", "1.0" ).toFloat();
|
|
parseFont( el.attribute( "font", "Sans 14" ), rect.normal.font );
|
|
} else if (tagName == "active") {
|
|
rect.active.present = true;
|
|
parseColor( el.attribute( "color", TQString::null ), rect.active.color );
|
|
rect.active.alpha = el.attribute( "alpha", "1.0" ).toFloat();
|
|
parseFont( el.attribute( "font", "Sans 14" ), rect.active.font );
|
|
} else if (tagName == "prelight") {
|
|
rect.prelight.present = true;
|
|
parseColor( el.attribute( "color", TQString::null ), rect.prelight.color );
|
|
rect.prelight.alpha = el.attribute( "alpha", "1.0" ).toFloat();
|
|
parseFont( el.attribute( "font", "Sans 14" ), rect.prelight.font );
|
|
} else if (tagName == "border")
|
|
rect.hasBorder = true;
|
|
}
|
|
}
|
|
|
|
void
|
|
KdmRect::drawContents( TQPainter *p, const TQRect &r )
|
|
{
|
|
// choose the correct rect class
|
|
RectStruct::RectClass *rClass = &rect.normal;
|
|
if (state == Sactive && rect.active.present)
|
|
rClass = &rect.active;
|
|
if (state == Sprelight && rect.prelight.present)
|
|
rClass = &rect.prelight;
|
|
|
|
if (rClass->alpha <= 0 || !rClass->color.isValid())
|
|
return;
|
|
|
|
if (rClass->alpha == 1)
|
|
p->fillRect( area, TQBrush( rClass->color ) );
|
|
else {
|
|
// if ((_compositor.isEmpty()) || (!argb_visual_available)) {
|
|
// Software blend only (no compositing support)
|
|
TQRect backRect = r;
|
|
backRect.moveBy( area.x(), area.y() );
|
|
TQPixmap backPixmap( backRect.size() );
|
|
bitBlt( &backPixmap, TQPoint( 0, 0 ), p->device(), backRect );
|
|
TQImage backImage = backPixmap.convertToImage();
|
|
KImageEffect::blend( rClass->color, backImage, rClass->alpha );
|
|
p->drawImage( backRect.x(), backRect.y(), backImage );
|
|
// area.moveBy(1,1);
|
|
// }
|
|
// else {
|
|
// // We have compositing support!
|
|
// }
|
|
}
|
|
}
|
|
|
|
void
|
|
KdmRect::statusChanged()
|
|
{
|
|
KdmItem::statusChanged();
|
|
if (!rect.active.present && !rect.prelight.present)
|
|
return;
|
|
if ((state == Sprelight && !rect.prelight.present) ||
|
|
(state == Sactive && !rect.active.present))
|
|
return;
|
|
needUpdate();
|
|
}
|
|
|
|
/*
|
|
void
|
|
KdmRect::setAttribs( TQWidget *widget )
|
|
{
|
|
widget->setFont( rect.normal.font );
|
|
}
|
|
|
|
void
|
|
KdmRect::recursiveSetAttribs( TQLayoutItem *li )
|
|
{
|
|
TQWidget *w;
|
|
TQLayout *l;
|
|
|
|
if ((w = li->widget()))
|
|
setAttribs( w );
|
|
else if ((l = li->layout())) {
|
|
TQLayoutIterator it = l->iterator();
|
|
for (TQLayoutItem *itm = it.current(); itm; itm = ++it)
|
|
recursiveSetAttribs( itm );
|
|
}
|
|
}
|
|
|
|
void
|
|
KdmRect::setLayoutItem( TQLayoutItem *item )
|
|
{
|
|
KdmItem::setLayoutItem( item );
|
|
recursiveSetAttribs( item );
|
|
}
|
|
*/
|
|
|
|
void
|
|
KdmRect::setWidget( TQWidget *widget )
|
|
{
|
|
if ( rect.normal.color.isValid() && widget )
|
|
{
|
|
TQPalette p = widget->palette();
|
|
p.setColor( TQPalette::Normal, TQColorGroup::Text, rect.normal.color );
|
|
widget->setPalette(p);
|
|
}
|
|
KdmItem::setWidget( widget );
|
|
//setAttribs( widget );
|
|
}
|
|
|
|
#include "tdmrect.moc"
|