From d4344b7bba288cc97c0cf05f13ebdeb53285b8c8 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Da Costa Date: Sat, 7 Nov 2009 03:33:53 +0000 Subject: [PATCH] added the possibility to hide decoration 'titlebar', but not decoration 'border' in window-specific override rules svn path=/trunk/KDE/kdebase/workspace/; revision=1046005 --- .../oxygen/config/oxygenexceptiondialog.cpp | 2 + .../oxygen/config/oxygenexceptiondialog.ui | 21 ++++++++- clients/oxygen/oxygen.cpp | 3 +- clients/oxygen/oxygenbutton.cpp | 2 + clients/oxygen/oxygenclient.cpp | 45 ++++++++++++------- clients/oxygen/oxygenclient.h | 2 + clients/oxygen/oxygenconfiguration.cpp | 8 ++++ clients/oxygen/oxygenconfiguration.h | 12 +++++ 8 files changed, 74 insertions(+), 21 deletions(-) diff --git a/clients/oxygen/config/oxygenexceptiondialog.cpp b/clients/oxygen/config/oxygenexceptiondialog.cpp index 8a4125a5d8..36b402154f 100644 --- a/clients/oxygen/config/oxygenexceptiondialog.cpp +++ b/clients/oxygen/config/oxygenexceptiondialog.cpp @@ -124,6 +124,7 @@ namespace Oxygen ui.sizeGripComboBox->setCurrentIndex( ui.sizeGripComboBox->findText( exception.sizeGripModeName( true ) ) ); ui.separatorComboBox->setCurrentIndex( ui.separatorComboBox->findText( exception.drawSeparator() ? yes:no ) ); ui.titleOutlineComboBox->setCurrentIndex( ui.titleOutlineComboBox->findText( exception.drawTitleOutline() ? yes:no ) ); + ui.hideTitleBar->setChecked( exception.hideTitleBar() ); // mask for( CheckBoxMap::iterator iter = checkboxes_.begin(); iter != checkboxes_.end(); ++iter ) @@ -144,6 +145,7 @@ namespace Oxygen // flags exception.setDrawSeparator( ui.separatorComboBox->currentText() == yes ); exception.setDrawTitleOutline( ui.titleOutlineComboBox->currentText() == yes ); + exception.setHideTitleBar( ui.hideTitleBar->isChecked() ); // mask unsigned int mask = OxygenException::None; diff --git a/clients/oxygen/config/oxygenexceptiondialog.ui b/clients/oxygen/config/oxygenexceptiondialog.ui index ee825174de..fd896db702 100644 --- a/clients/oxygen/config/oxygenexceptiondialog.ui +++ b/clients/oxygen/config/oxygenexceptiondialog.ui @@ -6,8 +6,8 @@ 0 0 - 463 - 311 + 460 + 352 @@ -109,6 +109,23 @@ + + + + Hide window title bar + + + + + + + QFrame::HLine + + + QFrame::Sunken + + + diff --git a/clients/oxygen/oxygen.cpp b/clients/oxygen/oxygen.cpp index 9fc01a6c7e..0d7a53ad1a 100644 --- a/clients/oxygen/oxygen.cpp +++ b/clients/oxygen/oxygen.cpp @@ -228,7 +228,6 @@ namespace Oxygen if( iter->regExp().indexIn( value ) < 0 ) continue; - OxygenConfiguration configuration( defaultConfiguration() ); // propagate all features found in mask to the output configuration @@ -237,7 +236,7 @@ namespace Oxygen if( iter->mask() & OxygenException::DrawSeparator ) configuration.setDrawSeparator( iter->drawSeparator() ); if( iter->mask() & OxygenException::TitleOutline ) configuration.setDrawTitleOutline( iter->drawTitleOutline() ); if( iter->mask() & OxygenException::SizeGripMode ) configuration.setSizeGripMode( iter->sizeGripMode() ); - + configuration.setHideTitleBar( iter->hideTitleBar() ); return configuration; } diff --git a/clients/oxygen/oxygenbutton.cpp b/clients/oxygen/oxygenbutton.cpp index a34ff2a4e1..d9f7f658dd 100644 --- a/clients/oxygen/oxygenbutton.cpp +++ b/clients/oxygen/oxygenbutton.cpp @@ -166,6 +166,8 @@ namespace Oxygen void OxygenButton::paintEvent(QPaintEvent *event) { + if( client_.configuration().hideTitleBar() ) return; + QPainter painter(this); painter.setClipRect(this->rect().intersected( event->rect() ) ); painter.setRenderHints(QPainter::Antialiasing); diff --git a/clients/oxygen/oxygenclient.cpp b/clients/oxygen/oxygenclient.cpp index af4efe638b..a42dc97ab5 100644 --- a/clients/oxygen/oxygenclient.cpp +++ b/clients/oxygen/oxygenclient.cpp @@ -224,13 +224,13 @@ namespace Oxygen } - //___________________________________________ + //___________________________________________ int OxygenClient::layoutMetric(LayoutMetric lm, bool respectWindowState, const KCommonDecorationButton *btn) const { bool maximized( isMaximized() ); int frameBorder( configuration().frameBorder() ); - int buttonSize( configuration().buttonSize() ); + int buttonSize( configuration().hideTitleBar() ? 0 : configuration().buttonSize() ); switch (lm) { @@ -270,9 +270,15 @@ namespace Oxygen case LM_TitleEdgeTop: { int border = 0; - if( !( respectWindowState && maximized )) + if( frameBorder == OxygenConfiguration::BorderNone && configuration().hideTitleBar() ) { + + border = 0; + + } else if( !( respectWindowState && maximized )) { + border = TFRAMESIZE; + } return border; @@ -952,23 +958,28 @@ namespace Oxygen painter.restore(); } - // title bounding rect - painter.setFont( options()->font(isActive(), false) ); - QRect boundingRect( titleBoundingRect( &painter, caption() ) ); - if( isActive() && configuration().drawTitleOutline() ) + if( !configuration().hideTitleBar() ) { - renderTitleOutline( &painter, boundingRect.adjusted( - -layoutMetric( LM_TitleBorderLeft ), - -layoutMetric( LM_TitleEdgeTop ), - layoutMetric( LM_TitleBorderRight ), 0 ), palette ); + + // title bounding rect + painter.setFont( options()->font(isActive(), false) ); + QRect boundingRect( titleBoundingRect( &painter, caption() ) ); + if( isActive() && configuration().drawTitleOutline() ) + { + renderTitleOutline( &painter, boundingRect.adjusted( + -layoutMetric( LM_TitleBorderLeft ), + -layoutMetric( LM_TitleEdgeTop ), + layoutMetric( LM_TitleBorderRight ), 0 ), palette ); + } + + // title text + renderTitleText( &painter, boundingRect, titlebarTextColor( backgroundPalette( widget(), palette ) ) ); + + // separator + if( drawSeparator() ) renderSeparator(&painter, frame, widget(), color ); + } - // title text - renderTitleText( &painter, boundingRect, titlebarTextColor( backgroundPalette( widget(), palette ) ) ); - - // separator - if( drawSeparator() ) renderSeparator(&painter, frame, widget(), color ); - } //_________________________________________________________________ diff --git a/clients/oxygen/oxygenclient.h b/clients/oxygen/oxygenclient.h index 1fa5104533..584ecda7e8 100644 --- a/clients/oxygen/oxygenclient.h +++ b/clients/oxygen/oxygenclient.h @@ -78,6 +78,7 @@ namespace Oxygen return ( timeLineIsRunning() || isActive() ) && configuration().drawSeparator() && + !configuration().hideTitleBar() && !configuration().drawTitleOutline(); } @@ -224,6 +225,7 @@ namespace Oxygen return configuration().useAnimations() && !configuration().drawTitleOutline() && + !configuration().hideTitleBar() && !isPreview(); } diff --git a/clients/oxygen/oxygenconfiguration.cpp b/clients/oxygen/oxygenconfiguration.cpp index 16852a8c2b..9d24327d31 100644 --- a/clients/oxygen/oxygenconfiguration.cpp +++ b/clients/oxygen/oxygenconfiguration.cpp @@ -39,6 +39,7 @@ namespace Oxygen sizeGripMode_( SizeGripWhenNeeded ), drawSeparator_( false ), drawTitleOutline_( false ), + hideTitleBar_( false ), useOxygenShadows_( true ), useAnimations_( true ), animationsDuration_( 150 ) @@ -86,6 +87,11 @@ namespace Oxygen OxygenConfig::DRAW_TITLE_OUTLINE, defaultConfiguration.drawTitleOutline() ) ); + // hide title bar + setHideTitleBar( group.readEntry( + OxygenConfig::HIDE_TITLEBAR, + defaultConfiguration.hideTitleBar() ) ); + // oxygen shadows setUseOxygenShadows( group.readEntry( OxygenConfig::USE_OXYGEN_SHADOWS, @@ -114,6 +120,7 @@ namespace Oxygen group.writeEntry( OxygenConfig::DRAW_SEPARATOR, drawSeparator() ); group.writeEntry( OxygenConfig::DRAW_TITLE_OUTLINE, drawTitleOutline() ); + group.writeEntry( OxygenConfig::HIDE_TITLEBAR, hideTitleBar() ); group.writeEntry( OxygenConfig::USE_OXYGEN_SHADOWS, useOxygenShadows() ); group.writeEntry( OxygenConfig::USE_ANIMATIONS, useAnimations() ); group.writeEntry( OxygenConfig::ANIMATIONS_DURATION, animationsDuration() ); @@ -280,6 +287,7 @@ namespace Oxygen sizeGripMode() == other.sizeGripMode() && drawSeparator() == other.drawSeparator() && drawTitleOutline() == other.drawTitleOutline() && + hideTitleBar() == other.hideTitleBar() && useOxygenShadows() == other.useOxygenShadows() && useAnimations() == other.useAnimations() && animationsDuration() == other.animationsDuration(); diff --git a/clients/oxygen/oxygenconfiguration.h b/clients/oxygen/oxygenconfiguration.h index 228f65289e..129df7b2a1 100644 --- a/clients/oxygen/oxygenconfiguration.h +++ b/clients/oxygen/oxygenconfiguration.h @@ -39,6 +39,7 @@ namespace OxygenConfig static const QString BLEND_COLOR = "BlendColor"; static const QString SIZE_GRIP_MODE = "SizeGripMode"; static const QString USE_OXYGEN_SHADOWS = "UseOxygenShadows"; + static const QString HIDE_TITLEBAR = "HideTitleBar"; static const QString USE_ANIMATIONS = "UseAnimations"; static const QString ANIMATIONS_DURATION = "AnimationsDuration"; @@ -225,6 +226,14 @@ namespace Oxygen virtual void setDrawTitleOutline( bool value ) { drawTitleOutline_ = value; } + //! hide title bar + virtual bool hideTitleBar( void ) const + { return hideTitleBar_; } + + //! hide title bar + virtual void setHideTitleBar( bool value ) + { hideTitleBar_ = value; } + //! oxygen shadows virtual bool useOxygenShadows( void ) const { return useOxygenShadows_; } @@ -272,6 +281,9 @@ namespace Oxygen //! active window title outline bool drawTitleOutline_; + //! hide titlebar completely (but not window border) + bool hideTitleBar_; + //! oxygen shadows bool useOxygenShadows_;