KDE/kdebase/workspace/plasma/applets/tasks
Bill Egert
begert at gmail.com
Sun Feb 10 20:17:54 CET 2008
SVN commit 773306 by begert:
CCMAIL: Panel-devel at kde.org
Perhaps I need some more testing with the flowlayout. I still can reproduce problems with non-bottom panels with my changes reverted, but at least this removes anything these changes could have introduced.
M +45 -33 abstracttaskitem.cpp
M +19 -5 taskgroupitem.cpp
M +13 -2 taskgroupitem.h
M +8 -2 tasks.cpp
M +1 -1 windowtaskitem.cpp
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/abstracttaskitem.cpp #773305:773306
@@ -183,11 +183,12 @@
// A fixed maximum size is used instead of calculating the content size
// because overly-long task items make navigating around the task bar
// more difficult
- const QSizeF size(200, 200);
-
+ QSizeF size(200, 200);
+#if 0
//FIXME HARDCODE
- //QSizeF sz = QSizeF(MaxTaskIconSize + QFontMetricsF(QApplication::font()).width(text() + IconTextSpacing),
- // 200);
+ QSizeF sz = QSizeF(MaxTaskIconSize + QFontMetricsF(QApplication::font()).width(text() + IconTextSpacing),
+ 200);
+#endif
// kDebug() << "Task max size hint:" << sz;
@@ -223,16 +224,22 @@
if (option->state & QStyle::State_MouseOver
|| m_animId != -1
- || taskFlags() & TaskHasFocus) {
-
+ || taskFlags() & TaskHasFocus)
+ {
QLinearGradient background(boundingRect().topLeft(),
boundingRect().bottomLeft());
- QColor startColor = (taskFlags() & TaskHasFocus) ?
- colorScheme.background(KColorScheme::NormalBackground).color() :
- colorScheme.background(KColorScheme::AlternateBackground).color();
- QColor endColor = colorScheme.shade(startColor,KColorScheme::DarkShade);
+ QColor startColor;
+ QColor endColor;
+ if (taskFlags() & TaskHasFocus) {
+ startColor = colorScheme.background(KColorScheme::NormalBackground).color();
+ } else {
+ startColor = colorScheme.background(KColorScheme::AlternateBackground).color();
+ }
+
+ endColor = colorScheme.shade(startColor,KColorScheme::DarkShade);
+
const qreal pressedAlpha = 0.2;
qreal alpha = 0;
@@ -266,18 +273,19 @@
QSize AbstractTaskItem::layoutText(QTextLayout &layout, const QString &text,
const QSize &constraints) const
{
- const QFontMetrics metrics(layout.font());
- const int leading = metrics.leading();
+ QFontMetrics metrics(layout.font());
+ int leading = metrics.leading();
int height = 0;
- const int maxWidth = constraints.width();
+ int maxWidth = constraints.width();
int widthUsed = 0;
- const int lineSpacing = metrics.lineSpacing();
+ int lineSpacing = metrics.lineSpacing();
QTextLine line;
layout.setText(text);
layout.beginLayout();
- while ((line = layout.createLine()).isValid()) {
+ while ((line = layout.createLine()).isValid())
+ {
height += leading;
// Make the last line that will fit infinitely long.
@@ -314,42 +322,46 @@
// Create the alpha gradient for the fade out effect
QLinearGradient alphaGradient(0, 0, 1, 0);
alphaGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
- if (layout.textOption().textDirection() == Qt::LeftToRight) {
+ if (layout.textOption().textDirection() == Qt::LeftToRight)
+ {
alphaGradient.setColorAt(0, QColor(0, 0, 0, 255));
alphaGradient.setColorAt(1, QColor(0, 0, 0, 0));
- } else {
+ } else
+ {
alphaGradient.setColorAt(0, QColor(0, 0, 0, 0));
alphaGradient.setColorAt(1, QColor(0, 0, 0, 255));
}
- const QFontMetrics fm(layout.font());
- const int textHeight = layout.lineCount() * fm.lineSpacing();
- const QPointF position = textHeight < rect.height() ?
+ QFontMetrics fm(layout.font());
+ int textHeight = layout.lineCount() * fm.lineSpacing();
+ QPointF position = textHeight < rect.height() ?
QPointF(0, (rect.height() - textHeight) / 2) : QPointF(0, 0);
QList<QRect> fadeRects;
- const int fadeWidth = 30;
+ int fadeWidth = 30;
// Draw each line in the layout
- for (int i = 0; i < layout.lineCount(); i++) {
- const QTextLine line = layout.lineAt(i);
+ for (int i = 0; i < layout.lineCount(); i++)
+ {
+ QTextLine line = layout.lineAt(i);
line.draw(&p, position);
// Add a fade out rect to the list if the line is too long
- if (line.naturalTextWidth() > rect.width()) {
- const int x = int(qMin(line.naturalTextWidth(), (qreal)pixmap.width())) - fadeWidth;
- const int y = int(line.position().y() + position.y());
- const QRect r = QStyle::visualRect(layout.textOption().textDirection(), pixmap.rect(),
+ if (line.naturalTextWidth() > rect.width())
+ {
+ int x = int(qMin(line.naturalTextWidth(), (qreal)pixmap.width())) - fadeWidth;
+ int y = int(line.position().y() + position.y());
+ QRect r = QStyle::visualRect(layout.textOption().textDirection(), pixmap.rect(),
QRect(x, y, fadeWidth, int(line.height())));
fadeRects.append(r);
}
}
// Reduce the alpha in each fade out rect using the alpha gradient
- if (!fadeRects.isEmpty()) {
+ if (!fadeRects.isEmpty())
+ {
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
- foreach (const QRect &rect, fadeRects) {
+ foreach (const QRect &rect, fadeRects)
p.fillRect(rect, alphaGradient);
- }
}
p.end();
@@ -359,8 +371,8 @@
QTextOption AbstractTaskItem::textOption() const
{
- const Qt::LayoutDirection direction = QApplication::layoutDirection();
- const Qt::Alignment alignment = QStyle::visualAlignment(direction, Qt::AlignLeft | Qt::AlignVCenter);
+ Qt::LayoutDirection direction = QApplication::layoutDirection();
+ Qt::Alignment alignment = QStyle::visualAlignment(direction, Qt::AlignLeft | Qt::AlignVCenter);
QTextOption option;
option.setTextDirection(direction);
@@ -374,7 +386,7 @@
QSizeF bounds = boundingRect().size();
//leave enough space for the text. usefull in vertical panel
bounds.setWidth(qMax(bounds.width() / 3, qMin(minimumSize().height(), bounds.width())));
- const QSize iconSize = _icon.actualSize(bounds.toSize());
+ QSize iconSize = _icon.actualSize(bounds.toSize());
return QStyle::alignedRect(QApplication::layoutDirection(), Qt::AlignLeft | Qt::AlignVCenter,
iconSize, boundingRect().toRect());
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/taskgroupitem.cpp #773305:773306
@@ -44,9 +44,11 @@
m_geometryUpdateTimerId(-1)
{
//setAcceptDrops(true);
- m_layout = new Plasma::FlowLayout(this);
+
+ m_layout = new Plasma::BoxLayout(Plasma::BoxLayout::LeftToRight, this);
m_layout->setMargin(0);
m_layout->setSpacing(5);
+ m_layout->setMultiRow(true);
}
QSizeF TaskGroupItem::maximumSize() const
@@ -155,7 +157,7 @@
//if _activeTask < _tasks.count() the new _activeTask
//will be _activeTask+1, else it will be 1
_tasks[(_activeTask+1)%_tasks.count()].task->activate();
- } else {
+ }else{
//if _activeTask > 1 the new _activeTask
//will be _activeTask-1, else it will be _tasks.count()
_tasks[(_tasks.count() + _activeTask -1 )%_tasks.count()].task->activate();
@@ -208,6 +210,18 @@
return _borderStyle;
}
+void TaskGroupItem::setDirection(Plasma::BoxLayout::Direction dir)
+{
+ m_layout->setDirection(dir);
+
+ m_layout->setMultiRow(dir != Plasma::BoxLayout::TopToBottom);
+}
+
+Plasma::BoxLayout::Direction TaskGroupItem::direction()
+{
+ return m_layout->direction();
+}
+
void TaskGroupItem::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *)
@@ -244,8 +258,8 @@
const QStyleOptionGraphicsItem *option,
const QRectF &area)
{
- const QFont smallFont = KGlobalSettings::smallestReadableFont();
- const QFontMetrics smallFontMetrics(smallFont);
+ QFont smallFont = KGlobalSettings::smallestReadableFont();
+ QFontMetrics smallFontMetrics(smallFont);
if (_color.isValid()) {
painter->setPen(QPen(Qt::NoPen));
@@ -274,7 +288,7 @@
// FIXME Check KColorScheme usage here
QLinearGradient titleGradient(titleArea.topLeft(), titleArea.bottomLeft());
- KColorScheme colorScheme(QPalette::Active, KColorScheme::View, Plasma::Theme::self()->colors());
+ KColorScheme colorScheme(QPalette::Active, KColorScheme::View, Plasma::Theme::self()->colors());
titleGradient.setColorAt(0, colorScheme.shade(_color,KColorScheme::DarkShade));
titleGradient.setColorAt(1, colorScheme.shade(_color,KColorScheme::MidShade));
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/taskgroupitem.h #773305:773306
@@ -24,7 +24,7 @@
#include "abstracttaskitem.h"
// Plasma
-#include <plasma/layouts/flowlayout.h>
+#include <plasma/layouts/boxlayout.h>
/**
* A graphics item which holds a group of tasks.
@@ -102,6 +102,17 @@
QColor color() const;
/**
+ * Sets the direction in which tasks are laid out.
+ * @param dir direction
+ */
+ void setDirection(Plasma::BoxLayout::Direction dir);
+
+ /**
+ * @returns direction in which tasks are laid out, default RightToLeft
+ */
+ Plasma::BoxLayout::Direction direction();
+
+ /**
* Sets whether the task group is collapsed.
* TODO: Document me
*/
@@ -176,7 +187,7 @@
int _caretIndex;
bool _allowSubGroups;
int m_geometryUpdateTimerId;
- Plasma::FlowLayout *m_layout;
+ Plasma::BoxLayout *m_layout;
static const int CaretWidth = 5;
static const int GroupBorderWidth = 16;
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/tasks.cpp #773305:773306
@@ -127,9 +127,9 @@
void Tasks::registerWindowTasks()
{
- const TaskManager::TaskManager *manager = TaskManager::TaskManager::self();
+ TaskManager::TaskManager *manager = TaskManager::TaskManager::self();
- const TaskManager::TaskDict tasks = manager->tasks();
+ TaskManager::TaskDict tasks = manager->tasks();
QMapIterator<WId,TaskPtr> iter(tasks);
while (iter.hasNext()) {
@@ -201,6 +201,12 @@
void Tasks::constraintsUpdated(Plasma::Constraints constraints)
{
if (constraints & Plasma::LocationConstraint) {
+ if (formFactor() == Plasma::Vertical) {
+ m_rootTaskGroup->setDirection(Plasma::BoxLayout::TopToBottom);
+ } else {
+ m_rootTaskGroup->setDirection(Plasma::BoxLayout::LeftToRight);
+ }
+
foreach (AbstractTaskItem *taskItem, m_windowTaskItems) {
WindowTaskItem *windowTaskItem = dynamic_cast<WindowTaskItem *>(taskItem);
if (windowTaskItem) {
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/windowtaskitem.cpp #773305:773306
@@ -94,7 +94,7 @@
}
// basic title and icon
- const QPixmap iconPixmap = _task->icon(preferredIconSize().width(),
+ QPixmap iconPixmap = _task->icon(preferredIconSize().width(),
preferredIconSize().height(),
true);
if (_showTooltip) {
More information about the Panel-devel
mailing list