- better handling of custom property for isMenuTitle

- added hasAlteredBackground property to track scrollbar background
- properly render background behind scrollbars in widget whose background has been altered.

fixed
wilder-pre-rebase
Hugo Pereira Da Costa 10 years ago
parent c50b113d37
commit 716d738cc0
  1. 1
      kstyle/breezepropertynames.cpp
  2. 2
      kstyle/breezepropertynames.h
  3. 41
      kstyle/breezestyle.cpp
  4. 3
      kstyle/breezestyle.h

@ -30,5 +30,6 @@ namespace Breeze
const char PropertyNames::sidePanelView[] = "_kde_side_panel_view";
const char PropertyNames::toolButtonAlignment[] = "_kde_toolButton_alignment";
const char PropertyNames::menuTitle[] = "_breeze_toolButton_menutitle";
const char PropertyNames::alteredBackground[] = "_breeze_altered_background";
}

@ -26,7 +26,6 @@ namespace Breeze
struct PropertyNames
{
static const char noAnimations[];
static const char noWindowGrab[];
static const char netWMForceShadow[];
@ -34,6 +33,7 @@ namespace Breeze
static const char sidePanelView[];
static const char toolButtonAlignment[];
static const char menuTitle[];
static const char alteredBackground[];
};
}

@ -1041,8 +1041,15 @@ namespace Breeze
painter.setClipRegion( static_cast<QPaintEvent*>( event )->region() );
painter.setPen( Qt::NoPen );
painter.setBrush( viewport->palette().color( viewport->backgroundRole() ) );
// decide background color
const QPalette::ColorRole role( viewport->backgroundRole() );
QColor background;
if( role == QPalette::Window && hasAlteredBackground( viewport ) ) background = _helper->frameBackgroundColor( viewport->palette() );
else background = viewport->palette().color( role );
painter.setBrush( background );
// render
foreach( auto* child, children )
{ painter.drawRect( child->geometry() ); }
@ -6816,8 +6823,13 @@ namespace Breeze
//____________________________________________________________________
bool Style::isMenuTitle( const QWidget* widget ) const
{
// check widget
if( !widget ) return false;
if( widget->property( PropertyNames::menuTitle ).toBool() ) return true;
// check property
const QVariant property( widget->property( PropertyNames::menuTitle ) );
if( property.isValid() ) return property.toBool();
// detect menu toolbuttons
QWidget* parent = widget->parentWidget();
@ -6832,8 +6844,33 @@ namespace Breeze
}
const_cast<QWidget*>(widget)->setProperty( PropertyNames::menuTitle, false );
return false;
}
//____________________________________________________________________
bool Style::hasAlteredBackground( const QWidget* widget ) const
{
// check widget
if( !widget ) return false;
// check property
const QVariant property( widget->property( PropertyNames::alteredBackground ) );
if( property.isValid() ) return property.toBool();
// check if widget is of relevant type
bool hasAlteredBackground( false );
if( const QGroupBox* groupBox = qobject_cast<const QGroupBox*>( widget ) ) hasAlteredBackground = !groupBox->isFlat();
else if( const QTabWidget* tabWidget = qobject_cast<const QTabWidget*>( widget ) ) hasAlteredBackground = !tabWidget->documentMode();
else if( qobject_cast<const QMenu*>( widget ) ) hasAlteredBackground = true;
else if( StyleConfigData::dockWidgetDrawFrame() && qobject_cast<const QDockWidget*>( widget ) ) hasAlteredBackground = true;
if( widget->parentWidget() && !hasAlteredBackground ) hasAlteredBackground = this->hasAlteredBackground( widget->parentWidget() );
const_cast<QWidget*>(widget)->setProperty( PropertyNames::alteredBackground, hasAlteredBackground );
return hasAlteredBackground;
}
}

@ -457,6 +457,9 @@ namespace Breeze
//* return true if passed widget is a menu title (KMenu::addTitle)
bool isMenuTitle( const QWidget* ) const;
//* return true if passed widget is a menu title (KMenu::addTitle)
bool hasAlteredBackground( const QWidget* ) const;
private:
//*@name scrollbar button types (for addLine and subLine )

Loading…
Cancel
Save