Implemented dockwidget title rendering

wilder-pre-rebase
Hugo Pereira Da Costa 12 years ago
parent 112af93f6f
commit 3c6d4fd3d7
  1. 82
      kstyle/breezestyle.cpp
  2. 3
      kstyle/breezestyle.h

@ -714,6 +714,9 @@ namespace Breeze
case CE_TabBarTabLabel: fcn = &Style::drawTabBarTabLabelControl; break;
case CE_TabBarTabShape: fcn = &Style::drawTabBarTabShapeControl; break;
// dock widget titlebar
case CE_DockWidgetTitle: fcn = &Style::drawDockWidgetTitleControl; break;
// fallback
default: break;
@ -3565,6 +3568,85 @@ namespace Breeze
}
//___________________________________________________________________________________
bool Style::drawDockWidgetTitleControl( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
{
// cast option and check
const QStyleOptionDockWidget* dockWidgetOption = ::qstyleoption_cast<const QStyleOptionDockWidget*>( option );
if ( !dockWidgetOption ) return true;
const QPalette& palette( option->palette );
const State& flags( option->state );
const bool enabled( flags & State_Enabled );
const bool reverseLayout( option->direction == Qt::RightToLeft );
// cast to v2 to check vertical bar
const QStyleOptionDockWidgetV2 *v2 = qstyleoption_cast<const QStyleOptionDockWidgetV2*>( option );
const bool verticalTitleBar( v2 ? v2->verticalTitleBar : false );
const QRect buttonRect( subElementRect( dockWidgetOption->floatable ? SE_DockWidgetFloatButton : SE_DockWidgetCloseButton, option, widget ) );
// get rectangle and adjust to properly accounts for buttons
QRect rect( insideMargin( dockWidgetOption->rect, DockWidget_TitleMarginWidth ) );
if( verticalTitleBar )
{
if( buttonRect.isValid() ) rect.setTop( buttonRect.bottom()+1 );
} else if( reverseLayout ) {
if( buttonRect.isValid() ) rect.setLeft( buttonRect.right()+1 );
rect.adjust( 0,0,-4,0 );
} else {
if( buttonRect.isValid() ) rect.setRight( buttonRect.left()-1 );
rect.adjust( 4,0,0,0 );
}
QString title( dockWidgetOption->title );
QString tmpTitle = title;
// this is quite suboptimal
// and does not really work
if( tmpTitle.contains( QLatin1Char( '&' ) ) )
{
int pos = tmpTitle.indexOf( QLatin1Char( '&' ) );
if( !( tmpTitle.size()-1 > pos && tmpTitle.at( pos+1 ) == QLatin1Char( '&' ) ) ) tmpTitle.remove( pos, 1 );
}
int tw = dockWidgetOption->fontMetrics.width( tmpTitle );
int width = verticalTitleBar ? rect.height() : rect.width();
if( width < tw ) title = dockWidgetOption->fontMetrics.elidedText( title, Qt::ElideRight, width, Qt::TextShowMnemonic );
if( verticalTitleBar )
{
QSize size = rect.size();
size.transpose();
rect.setSize( size );
painter->save();
painter->translate( rect.left(), rect.top() + rect.width() );
painter->rotate( -90 );
painter->translate( -rect.left(), -rect.top() );
drawItemText( painter, rect, Qt::AlignLeft | Qt::AlignVCenter | _mnemonics->textFlags(), palette, enabled, title, QPalette::WindowText );
painter->restore();
} else {
drawItemText( painter, rect, Qt::AlignLeft | Qt::AlignVCenter | _mnemonics->textFlags(), palette, enabled, title, QPalette::WindowText );
}
return true;
}
//______________________________________________________________
bool Style::drawComboBoxComplexControl( const QStyleOptionComplex* option, QPainter* painter, const QWidget* widget ) const
{

@ -341,7 +341,6 @@ namespace Breeze
// virtual bool drawCapacityBarControl( const QStyleOption*, QPainter*, const QWidget* ) const;
virtual bool drawComboBoxLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
// virtual bool drawDockWidgetTitleControl( const QStyleOption*, QPainter*, const QWidget* ) const;
virtual bool drawMenuBarItemControl( const QStyleOption*, QPainter*, const QWidget* ) const;
virtual bool drawMenuItemControl( const QStyleOption*, QPainter*, const QWidget* ) const;
virtual bool drawProgressBarControl( const QStyleOption*, QPainter*, const QWidget* ) const;
@ -367,10 +366,10 @@ namespace Breeze
//! tabbar tabs.
virtual bool drawTabBarTabLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
virtual bool drawTabBarTabShapeControl( const QStyleOption*, QPainter*, const QWidget* ) const;
// virtual bool drawToolBarControl( const QStyleOption*, QPainter*, const QWidget* ) const;
// virtual bool drawToolBoxTabLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
// virtual bool drawToolBoxTabShapeControl( const QStyleOption*, QPainter*, const QWidget* ) const;
// virtual bool drawToolButtonLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
virtual bool drawDockWidgetTitleControl( const QStyleOption*, QPainter*, const QWidget* ) const;
//!@}

Loading…
Cancel
Save