Skip to content

Commit

Permalink
Allow WidgetTab to use artwork tabs (@StCyr) (#3569)
Browse files Browse the repository at this point in the history
* First version of artwork tabs for the InstrumentTrackWindow.

This version can only display & manage artwork tabs, which breaks
the InstrumentSoundShapingView as it still uses text tabs.

I'm planing to improve this implementation to let these artwork tabs fall back
to text mode when no artwork is given. This would solve the problem of the
InstrumentSoundShapingView.

* Second version of artwork tabs for the InstrumentTrackWindow.

This version will draw an artwork tab when the TabWidget::addTab function is given
a pixmapName. Otherwise, when pixmapName is NULL, it will fall back drawing a text
tab.

* Created artwork for the artwork tabs.

* 1st PoC for autosizeable artwork tabs.

* TabWidget is 20 pixels tall when it's going to display artwork tabs.

* Added tooltip support for the TabWidget class.

Atm, tooltips are simply tabs' name.

* Imported artworks from RebeccaDeField

* Reverted to 12px tall TabWidget

* Fine tuning for the positioning of artwork tabs: Take into account the caption 'space.

* New artwork for the ENV/LFO tab (has now an ADSR-based look)

* 1) Tabs in TabWidget class have now a "tooltip" attribute. So that they can now show
more meaningfull information then simply the tab's name.
2) Fixed the compilation problem with QT5

* Fine tuning the positioning of highlighted artwork tabs.

* Fixed an issue in TabWidget's artwork tabs autosize function that makes gdb crash
with SIGFPE.

* TabWidget is 17 pixels tall when it's going to display artwork tabs.

* Removed underscore prefix for function parameters as coding convention has changed.

(Request at https://github.com/LMMS/lmms/pull/2599/files/dccf9f411996c8c866ff1086b65f15020ef08cd9#r61165005)

Cyrille

* Removed background gradient for TabWidget as LMMS is going to a more flat design.

Cyrille

* Increased the graphical TabWidget's height by 2 pixels for eye-candy.

The InstrumentTrackWindow's height has been increased by the same amount.

Cyrille

* Removed gradient in GrouBox widgets as LMMS is going for a more flattened design.

Cyrille

* Made the background of TabWidget themeable

Cyrille

* The highlighting color for a TabWidget'selected tab is now themeable.

* Made TabWidget's Title text and tab text themeable.

* Added a darker background to the TabWidget's tab bar.

* Further flatened the design of TabWidget

* Flatened the design of the GroupBox widget

* Fine tuning the placement of TabWidgets' highlighting background
+ some code cleaning in TabWidgets

* Made the TabWidget's title background and borders themeable

* TabWidget - Artwork tabs: Do not change the icon color when it is highlighted

* TabWidget: Made the artworks' color themeable

* Adapted format to follow LMMS coding conventions

* Some more blank spaces to tabs translation to comply with LMMS coding standards.

* Some more blank spaces to tabs translation to comply with LMMS coding standards.

* Revert "TabWidget: Made the artworks' color themeable"

This reverts commit 5b162c0.

Conflicts:
	src/gui/widgets/TabWidget.cpp

Reason: Artwork's color themeability had the side-effect that it removed the artworks' alpha
channel, thus making them ugly.

* Made GroupBox's background color themeable

* Update background color, only use one set of images

* Use name as tooltip, more descriptive names

* Update icons and colors

* more things

* formatting fixes

* Remove update() from constructor
  • Loading branch information
Umcaruje authored May 31, 2017
1 parent 9bdc011 commit 53772c0
Show file tree
Hide file tree
Showing 14 changed files with 286 additions and 148 deletions.
Binary file added data/themes/default/env_lfo_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/func_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/fx_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/midi_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/misc_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/plugin_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions data/themes/default/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,19 @@ PianoRoll {
qproperty-textShadow: #fff;
}

TabWidget {
background-color: #262b30;
qproperty-tabText: rgba(255, 255, 255, 180);
qproperty-tabTitleText: #fff;
qproperty-tabSelected: #323940;
qproperty-tabBackground: #181b1f;
qproperty-tabBorder: #181b1f;
}

GroupBox {
background-color: #262b30;
}

/* main toolbar oscilloscope - can have transparent bg now */

VisualizationWidget {
Expand Down
2 changes: 1 addition & 1 deletion include/GroupBox.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class GroupBox : public QWidget, public BoolModelView

protected:
virtual void mousePressEvent( QMouseEvent * _me );
virtual void resizeEvent( QResizeEvent * _re );
virtual void paintEvent( QPaintEvent * _pe );


private:
Expand Down
50 changes: 41 additions & 9 deletions include/TabWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,47 @@
#include <QWidget>
#include <QtCore/QMap>

const int TEXT_TAB_HEIGHT = 14;
const int GRAPHIC_TAB_HEIGHT = 17;

class TabWidget : public QWidget
{
Q_OBJECT
public:
TabWidget( const QString & _caption, QWidget * _parent );
TabWidget( const QString & _caption, QWidget * _parent, bool usePixmap = false );
virtual ~TabWidget();

void addTab( QWidget * _w, const QString & _name, int _idx = -1 );
void addTab( QWidget * w, const QString & name, const char *pixmap = NULL, int idx = -1 );

void setActiveTab( int _idx );
void setActiveTab( int idx );

int findTabAtPos( const QPoint *pos );

inline int activeTab() const
{
return( m_activeTab );
}

// Themeability
Q_PROPERTY( QColor tabText READ tabText WRITE setTabText)
Q_PROPERTY( QColor tabTitleText READ tabTitleText WRITE setTabTitleText)
Q_PROPERTY( QColor tabSelected READ tabSelected WRITE setTabSelected)
Q_PROPERTY( QColor tabBackground READ tabBackground WRITE setTabBackground)
Q_PROPERTY( QColor tabBorder READ tabBorder WRITE setTabBorder)

QColor tabText() const;
void setTabText( const QColor & c );
QColor tabTitleText() const;
void setTabTitleText( const QColor & c );
QColor tabSelected() const;
void setTabSelected( const QColor & c );
QColor tabBackground() const;
void setTabBackground( const QColor & c );
QColor tabBorder() const;
void setTabBorder( const QColor & c );

protected:
virtual bool event( QEvent * event );
virtual void mousePressEvent( QMouseEvent * _me );
virtual void paintEvent( QPaintEvent * _pe );
virtual void resizeEvent( QResizeEvent * _re );
Expand All @@ -57,16 +79,26 @@ class TabWidget : public QWidget
private:
struct widgetDesc
{
QWidget * w; // ptr to widget
QString name; // name for widget
int nwidth; // width of name when painting
QWidget * w; // ptr to widget
const char * pixmap; // artwork for the widget
QString name; // name for widget
int nwidth; // width of name when painting (only valid for text tab)
} ;
typedef QMap<int, widgetDesc> widgetStack;

widgetStack m_widgets;
int m_activeTab;
QString m_caption;
quint8 m_tabheight;

int m_activeTab;
QString m_caption; // Tab caption, used as the tooltip text on icon tabs
quint8 m_tabbarHeight; // The height of the tab bar
quint8 m_tabheight; // The height of the tabs
bool m_usePixmap; // true if the tabs are to be displayed with icons. False for text tabs.

QColor m_tabText; // The color of the tabs' text.
QColor m_tabTitleText; // The color of the TabWidget's title text.
QColor m_tabSelected; // The highlighting color for the selected tab.
QColor m_tabBackground; // The TabWidget's background color.
QColor m_tabBorder; // The TabWidget's borders color.
} ;

#endif
2 changes: 1 addition & 1 deletion src/gui/widgets/EffectRackView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ EffectRackView::EffectRackView( EffectChain* model, QWidget* parent ) :
ModelView( NULL, this )
{
QVBoxLayout* mainLayout = new QVBoxLayout( this );
mainLayout->setMargin( 0 );
mainLayout->setMargin( 5 );

m_effectsGroupBox = new GroupBox( tr( "EFFECTS CHAIN" ) );
mainLayout->addWidget( m_effectsGroupBox );
Expand Down
54 changes: 7 additions & 47 deletions src/gui/widgets/GroupBox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ GroupBox::GroupBox( const QString & _caption, QWidget * _parent ) :
m_caption( _caption ),
m_titleBarHeight( 11 )
{
updatePixmap();

m_led = new PixmapButton( this, _caption );
m_led->setCheckable( true );
m_led->move( 3, 0 );
Expand Down Expand Up @@ -84,60 +82,22 @@ void GroupBox::mousePressEvent( QMouseEvent * _me )



void GroupBox::resizeEvent( QResizeEvent * _ev )
void GroupBox::paintEvent( QPaintEvent * pe )
{
updatePixmap();
QWidget::resizeEvent( _ev );
}

QPainter p( this );


void GroupBox::updatePixmap()
{
QColor bg_color = QApplication::palette().color( QPalette::Active,
QPalette::Background );
QPixmap pm( size() );
pm.fill( bg_color/*.dark( 132 )*/ );

QPainter p( &pm );
// Draw background
p.fillRect( 0, 0, width() - 1, height() - 1, p.background() );

// outer rect
p.setPen( bg_color.dark( 150 ) );
p.setPen( p.background().color().dark( 150 ) );
p.drawRect( 0, 0, width() - 1, height() - 1 );

// brighter line at bottom/right
p.setPen( bg_color.light( 150 ) );
p.drawLine( width() - 1, 0, width() - 1, height() - 1 );
p.drawLine( 0, height() - 1, width() - 1, height() - 1 );

// draw groupbox-titlebar
QLinearGradient g( 0, 0, 0, m_titleBarHeight );
g.setColorAt( 0, bg_color.darker( 250 ) );
g.setColorAt( 0.1, bg_color.lighter( 120 ) );
g.setColorAt( 1, bg_color.darker( 250 ) );
p.fillRect( 2, 2, width() - 4, m_titleBarHeight, g );

// draw line below titlebar
p.setPen( bg_color.dark( 400 ) );
p.drawLine( 1, m_titleBarHeight + 1, width() - 3, m_titleBarHeight + 1 );

// black inner rect
p.drawRect( 1, 1, width() - 3, height() - 3 );
p.fillRect( 1, 1, width() - 2, m_titleBarHeight + 1, p.background().color().darker( 150 ) );


//p.setPen( QColor( 255, 255, 255 ) );
// draw text
p.setPen( palette().color( QPalette::Active, QPalette::Text ) );
p.setFont( pointSize<8>( font() ) );
p.drawText( 22, m_titleBarHeight, m_caption );

QPalette pal = palette();
pal.setBrush( backgroundRole(), QBrush( pm ) );
setPalette( pal );
}







3 changes: 2 additions & 1 deletion src/gui/widgets/InstrumentSoundShapingView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ InstrumentSoundShapingView::InstrumentSoundShapingView( QWidget * _parent ) :
{
m_envLfoViews[i] = new EnvelopeAndLfoView( m_targetsTabWidget );
m_targetsTabWidget->addTab( m_envLfoViews[i],
tr( InstrumentSoundShaping::targetNames[i][0].toUtf8().constData() ) );
tr( InstrumentSoundShaping::targetNames[i][0].toUtf8().constData() ),
NULL );
}


Expand Down
Loading

0 comments on commit 53772c0

Please sign in to comment.