/* * Copyright (C) 2003 by Unai Garro * Copyright (C) 2004 by Enrico Ros * Copyright (C) 2004 by Stephan Kulow * Copyright (C) 2004 by Oswald Buddenhagen * * 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 #include #include #include #include #include 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"