aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-04-03 20:22:13 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-04-03 20:22:13 +0000
commitea927e2c69bbc950877934a0a95914ef0a40c916 (patch)
treef97c5a96e2446dc72027ec9c30ad658941b546aa /src/plugins/Ui/skinned
parentd7b6e2cd38ca0ef2a750d1b42e7f1bd30af612b1 (diff)
downloadqmmp-ea927e2c69bbc950877934a0a95914ef0a40c916.tar.gz
qmmp-ea927e2c69bbc950877934a0a95914ef0a40c916.tar.bz2
qmmp-ea927e2c69bbc950877934a0a95914ef0a40c916.zip
fixed playlist paddings
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4814 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/skinned')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp2
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp132
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.h20
-rw-r--r--src/plugins/Ui/skinned/playlistheader.cpp22
-rw-r--r--src/plugins/Ui/skinned/playlistheader.h1
5 files changed, 82 insertions, 95 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 74f6da5d7..4912258d3 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -186,8 +186,6 @@ void ListWidget::paintEvent(QPaintEvent *)
{
m_drawer.drawDropLine(&painter, m_drop_index - m_first, width());
}
- //draw line
- m_drawer.drawVerticalLine(&painter, m_rows.count(), width(), rtl);
}
void ListWidget::mouseDoubleClickEvent (QMouseEvent *e)
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
index 0ab4ce884..a35807177 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -26,17 +26,19 @@
#include "skin.h"
#include "listwidgetdrawer.h"
-#define PADDING 3
+// |= number=|=row1=|=row2=|=extra= duration=|
ListWidgetDrawer::ListWidgetDrawer()
{
m_skin = Skin::instance();
+ m_column_manager = QmmpUiSettings::instance()->columnManager();
m_update = false;
m_show_anchor = false;
m_show_number = false;
m_align_numbres = false;
m_row_height = 0;
m_number_width = 0;
+ m_padding = 0;
readSettings();
loadColors();
}
@@ -67,6 +69,7 @@ void ListWidgetDrawer::readSettings()
m_update = true;
m_metrics = new QFontMetrics(m_font);
m_extra_metrics = new QFontMetrics(m_extra_font);
+ m_padding = m_metrics->width("9")/2;
m_row_height = m_metrics->lineSpacing() + 1;
}
@@ -92,15 +95,18 @@ void ListWidgetDrawer::calculateNumberWidth(int count)
{
//song numbers width
if(m_show_number && m_align_numbres && count)
- {
m_number_width = m_metrics->width("9") * QString::number(count).size();
- }
else
m_number_width = 0;
}
void ListWidgetDrawer::prepareRow(ListWidgetRow *row)
{
+ if(m_number_width)
+ row->numberColumnWidth = m_number_width + 2 * m_padding;
+ else
+ row->numberColumnWidth = 0;
+
if(row->flags & ListWidgetRow::GROUP)
{
row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight,
@@ -111,48 +117,39 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row)
if(m_show_number && !m_align_numbres)
row->titles[0].prepend(QString("%1").arg(row->number)+". ");
- row->x[ListWidgetRow::NUMBER] = row->x[ListWidgetRow::TITLE] = row->rect.left() + PADDING;
+ if(!row->length.isEmpty() || !row->extraString.isEmpty())
+ row->lengthColumnWidth = m_padding;
+ else
+ row->lengthColumnWidth = 0;
- if(m_number_width)
- {
- QString number = QString("%1").arg(row->number);
+ if(!row->length.isEmpty())
+ row->lengthColumnWidth += m_metrics->width(row->length) + m_padding;
- row->x[ListWidgetRow::NUMBER] += m_number_width - m_metrics->width(number);
- row->x[ListWidgetRow::TITLE] += m_number_width + m_metrics->width("9");
- }
+ if(!row->extraString.isEmpty())
+ row->lengthColumnWidth += m_extra_metrics->width(row->extraString) + m_padding;
- row->x[ListWidgetRow::LENGTH] = row->rect.right() - m_metrics->width(row->length) - PADDING;
- row->x[ListWidgetRow::EXTRA_STRING] = row->x[ListWidgetRow::LENGTH];
+ //elide title
+ int visible_width = row->rect.width() - row->lengthColumnWidth - row->numberColumnWidth;
- int extra_string_width = row->extraString.isEmpty() ? 0 : m_extra_metrics->width(row->extraString);
- if(extra_string_width)
+ if(row->titles.count() == 1 && !row->lengthColumnWidth)
{
- extra_string_width += row->length.isEmpty() ? 0 : m_extra_metrics->width("9")/2;
- row->x[ListWidgetRow::EXTRA_STRING] = row->x[ListWidgetRow::LENGTH] - extra_string_width;
+ row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, visible_width - 2 * m_padding);
+ return;
}
-
- //elide title
- int visible_width = row->x[ListWidgetRow::EXTRA_STRING] - row->x[ListWidgetRow::TITLE] -
- m_metrics->width("9");
-
- if( row->titles.count() == 1)
+ else if(row->titles.count() == 1)
{
- row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, visible_width);
+ row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, visible_width - m_padding);
return;
}
- int offset = 0;
- for(int i = 0; i < row->titles.count(); ++i)
+ for(int i = 0; i < row->titles.count() && visible_width > 0; ++i)
{
- int width = qMin(QmmpUiSettings::instance()->columnManager()->size(i) - m_metrics->width(9),
- visible_width - offset);
+ int width = qMin(QmmpUiSettings::instance()->columnManager()->size(i) - 2 * m_padding,
+ visible_width - 2 * m_padding);
- if(width <= 0)
- break;
row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width);
- offset += QmmpUiSettings::instance()->columnManager()->size(i);
+ visible_width -= QmmpUiSettings::instance()->columnManager()->size(i);
}
- //row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, title_width);
}
void ListWidgetDrawer::fillBackground(QPainter *painter, int width, int height)
@@ -209,60 +206,64 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool
painter->drawLine(sx - 45, sy, sx - 5, sy);
painter->drawLine(sx + m_metrics->width(row->titles[0]) + 5, sy,
row->rect.width(), sy);
+ if(row->numberColumnWidth)
+ {
+ painter->drawLine(row->rect.left() + row->numberColumnWidth, row->rect.top(),
+ row->rect.left() + row->numberColumnWidth, row->rect.bottom() + 1);
+ }
}
}
void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row)
{
int sy = row->rect.y() + m_metrics->overlinePos() - 1;
+ int sx = row->rect.x();
painter->setFont(m_font);
- painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
- if(m_number_width)
+ //|= number=|=col1 =|=col2 =|=extra=duration=|
+ if(row->numberColumnWidth)
{
+ sx += row->numberColumnWidth;
+ painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
QString number = QString("%1").arg(row->number);
- painter->drawText(row->x[ListWidgetRow::NUMBER], sy, number);
+ painter->drawText(sx - m_padding - m_metrics->width(number), sy, number);
+ painter->setPen(m_normal);
+ painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
}
- int offset = 0;
for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count(); i++)
{
- if(row->x[ListWidgetRow::TITLE] + offset >= row->x[ListWidgetRow::EXTRA_STRING] - m_metrics->width("9"))
+ if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth)
break;
- painter->drawText(row->x[ListWidgetRow::TITLE] + offset, sy, row->titles[i]);
- offset += QmmpUiSettings::instance()->columnManager()->size(i);
+ painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
+ painter->drawText(sx + m_padding, sy, row->titles[i]);
+ sx += QmmpUiSettings::instance()->columnManager()->size(i);
+
+ if(m_column_manager->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth)
+ {
+ painter->setPen(m_normal);
+ painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
+ }
}
- QString extra_string = row->extraString;
+ sx = row->rect.right() - m_padding;
+ painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
- if(!extra_string.isEmpty())
+ if(!row->length.isEmpty())
{
- painter->setFont(m_extra_font);
- painter->drawText(row->x[ListWidgetRow::EXTRA_STRING], sy, extra_string);
- painter->setFont(m_font);
+ sx -= m_metrics->width(row->length);
+ painter->drawText(sx, sy, row->length);
+ sx -= m_padding;
}
- if(!row->length.isEmpty())
- painter->drawText(row->x[ListWidgetRow::LENGTH], sy, row->length);
- if(QmmpUiSettings::instance()->columnManager()->count() == 1)
- return;
-
- offset = 0;
- painter->setPen(m_normal);
- for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count(); i++)
+ if(!row->extraString.isEmpty())
{
- offset += QmmpUiSettings::instance()->columnManager()->size(i);
-
- if(QmmpUiSettings::instance()->columnManager()->count() > 1 &&
- row->x[ListWidgetRow::TITLE] + offset < row->x[ListWidgetRow::EXTRA_STRING] - m_metrics->width("9"))
- {
- painter->drawLine(row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.top(),
- row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.bottom() + 1);
- }
+ sx -= m_extra_metrics->width(row->extraString);
+ painter->setFont(m_extra_font);
+ painter->drawText(sx, sy, row->extraString);
}
-
}
void ListWidgetDrawer::drawDropLine(QPainter *painter, int row_number, int width)
@@ -271,14 +272,3 @@ void ListWidgetDrawer::drawDropLine(QPainter *painter, int row_number, int width
painter->drawLine (5, row_number * m_row_height,
width - 5 , row_number * m_row_height);
}
-
-void ListWidgetDrawer::drawVerticalLine(QPainter *painter, int row_count, int width, bool rtl)
-{
- if(m_number_width)
- {
- painter->setPen(m_normal);
- int sx = rtl ? width - 10 - m_number_width - m_metrics->width("9")/2 - 1 :
- 5 + PADDING + m_number_width + m_metrics->width("9")/2 - 1;
- painter->drawLine(sx, 2, sx, (row_count + 1) * (1 + m_metrics->lineSpacing()) - m_metrics->descent());
- }
-}
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h
index 71b8137b1..0b221394d 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.h
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.h
@@ -27,19 +27,25 @@
#include <QRect>
#include <QFontMetrics>
-class Skin;
+
class QPainter;
+class Skin;
+class ColumnManager;
struct ListWidgetRow
{
ListWidgetRow()
{
flags = NO_FLAGS;
+ numberColumnWidth = 0;
+ lengthColumnWidth = 0;
}
QStringList titles;
QString length;
QString extraString;
int number;
+ int numberColumnWidth;
+ int lengthColumnWidth;
enum
{
NO_FLAGS = 0x00,
@@ -50,15 +56,6 @@ struct ListWidgetRow
};
int flags;
-
- enum
- {
- NUMBER = 0,
- TITLE,
- EXTRA_STRING,
- LENGTH
- };
- int x[LENGTH + 1];
QRect rect; //geometry
};
@@ -82,18 +79,19 @@ public:
void drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl);
void drawTrack(QPainter *painter, ListWidgetRow *row);
void drawDropLine(QPainter *painter, int row_number, int width);
- void drawVerticalLine(QPainter *painter, int row_count, int width, bool rtl);
private:
QColor m_normal, m_current, m_normal_bg, m_selected_bg;
Skin *m_skin;
QFontMetrics *m_metrics;
QFontMetrics *m_extra_metrics;
+ ColumnManager *m_column_manager;
QFont m_font, m_extra_font;
bool m_update;
bool m_show_number;
bool m_show_anchor;
bool m_align_numbres;
+ int m_padding;
int m_number_width;
int m_row_height;
};
diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp
index a13179879..eb53eef8c 100644
--- a/src/plugins/Ui/skinned/playlistheader.cpp
+++ b/src/plugins/Ui/skinned/playlistheader.cpp
@@ -35,13 +35,12 @@
#include "skin.h"
#include "playlistheader.h"
-#define PADDING 3
-
PlayListHeader::PlayListHeader(QWidget *parent) :
QWidget(parent)
{
setMouseTracking(true);
m_metrics = 0;
+ m_padding = 0;
m_show_number = false;
m_align_numbres = false;
m_number_width = 0;
@@ -81,6 +80,7 @@ void PlayListHeader::readSettings()
m_metrics = new QFontMetrics(m_font);
m_show_number = settings.value ("pl_show_numbers", true).toBool();
m_align_numbres = settings.value ("pl_align_numbers", false).toBool();
+ m_padding = m_metrics->width("9")/2;
settings.endGroup();
updateColumns();
}
@@ -99,9 +99,9 @@ void PlayListHeader::updateColumns()
m_rects.clear();
m_names.clear();
- int sx = 5 + PADDING;
+ int sx = 5;
if(m_number_width)
- sx += m_number_width + m_metrics->width("9");
+ sx += m_number_width + 2 * m_padding;
if(m_manager->count() == 1)
{
@@ -112,7 +112,7 @@ void PlayListHeader::updateColumns()
for(int i = 0; i < m_manager->count(); ++i)
{
- m_rects << QRect(sx, 0, m_manager->size(i)+1, height());
+ m_rects << QRect(sx, 0, m_manager->size(i), height());
m_names << m_metrics->elidedText(m_manager->name(i), Qt::ElideRight,
m_manager->size(i) - m_metrics->width("9"));
@@ -263,8 +263,8 @@ void PlayListHeader::paintEvent(QPaintEvent *)
if(m_number_width)
{
- painter.drawLine(m_rects.at(0).x() - m_metrics->width("9")/2 - 1, 0,
- m_rects.at(0).x() - m_metrics->width("9")/2 - 1, height());
+ painter.drawLine(m_rects.at(0).x(), 0,
+ m_rects.at(0).x(), height());
}
if(m_names.count() == 1)
@@ -280,7 +280,7 @@ void PlayListHeader::paintEvent(QPaintEvent *)
{
painter.setBrush(m_normal_bg);
painter.setPen(m_current);
- painter.drawRect(m_rects[i].x() - m_metrics->width("9")/2, 0,
+ painter.drawRect(m_rects[i].x(), 0,
m_rects[i].width(), height()-1);
painter.setBrush(m_normal);
painter.setPen(m_normal_bg);
@@ -290,15 +290,15 @@ void PlayListHeader::paintEvent(QPaintEvent *)
painter.drawText((m_rects[i].x() + m_rects[i].right())/2 - m_metrics->width(m_names[i])/2,
m_metrics->ascent(), m_names[i]);
- painter.drawLine(m_rects[i].right() - m_metrics->width("9")/2, 0,
- m_rects[i].right() - m_metrics->width("9")/2, height()+1);
+ painter.drawLine(m_rects[i].right()+1, 0,
+ m_rects[i].right()+1, height()+1);
}
if(m_task == MOVE)
{
painter.setPen(m_normal);
- painter.drawRect(m_mouse_pos.x() - m_press_offset - m_metrics->width("9")/2, 0,
+ painter.drawRect(m_mouse_pos.x() - m_press_offset, 0,
m_rects.at(m_pressed_column).width(), height());
painter.setPen(m_normal_bg);
diff --git a/src/plugins/Ui/skinned/playlistheader.h b/src/plugins/Ui/skinned/playlistheader.h
index 3282e3b98..b405d2ebf 100644
--- a/src/plugins/Ui/skinned/playlistheader.h
+++ b/src/plugins/Ui/skinned/playlistheader.h
@@ -77,6 +77,7 @@ private:
int m_pressed_column;
int m_old_size;
int m_press_offset;
+ int m_padding;
enum
{