Browse Source

Add CarlaStyle code

tags/1.9.4
falkTX 12 years ago
parent
commit
9455c06c22
5 changed files with 3945 additions and 0 deletions
  1. +3477
    -0
      source/theme/CarlaStyle.cpp
  2. +72
    -0
      source/theme/CarlaStyle.hpp
  3. +177
    -0
      source/theme/CarlaStyleAnimations.hpp
  4. +160
    -0
      source/theme/CarlaStylePrivate.hpp
  5. +59
    -0
      source/theme/Makefile

+ 3477
- 0
source/theme/CarlaStyle.cpp
File diff suppressed because it is too large
View File


+ 72
- 0
source/theme/CarlaStyle.hpp View File

@@ -0,0 +1,72 @@
/*
* Carla Qt4 Style, based on Qt5 fusion style
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the GPL3.txt file
*/

#ifndef __CARLA_STYLE_HPP__
#define __CARLA_STYLE_HPP__

#include <QtGui/QCommonStyle>
#include <QtGui/QStylePlugin>

class CarlaStylePrivate;

class CarlaStyle : public QCommonStyle
{
Q_OBJECT

public:
CarlaStyle();
~CarlaStyle();

QPalette standardPalette() const;
void drawPrimitive(PrimitiveElement elem,
const QStyleOption *option,
QPainter *painter, const QWidget *widget = 0) const;
void drawControl(ControlElement ce, const QStyleOption *option, QPainter *painter,
const QWidget *widget) const;
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
QPainter *painter, const QWidget *widget) const;
QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
const QSize &size, const QWidget *widget) const;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt,
SubControl sc, const QWidget *widget) const;
int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0,
QStyleHintReturn *returnData = 0) const;
void drawItemText(QPainter *painter, const QRect &rect,
int flags, const QPalette &pal, bool enabled,
const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const;
void polish(QWidget *widget);
void unpolish(QWidget *widget);

private:
CarlaStylePrivate* const d;
friend class CarlaStylePrivate;
};

class CarlaStylePlugin : public QStylePlugin
{
Q_OBJECT

public:
CarlaStylePlugin(QObject* parent = nullptr);
QStyle* create(const QString& key);
QStringList keys() const;
};

#endif // __CARLA_STYLE_HPP__

+ 177
- 0
source/theme/CarlaStyleAnimations.hpp View File

@@ -0,0 +1,177 @@
/*
* Carla Qt4 Style, based on Qt5 fusion style
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the GPL3.txt file
*/

#ifndef __CARLA_STYLE_ANIMATIONS_HPP__
#define __CARLA_STYLE_ANIMATIONS_HPP__

#include <QtCore/QAbstractAnimation>
#include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
#include <QtGui/QImage>
#include <QtGui/QWidget>

class CarlaStyleAnimation : public QAbstractAnimation
{
Q_OBJECT

public:
CarlaStyleAnimation(QObject* target)
: QAbstractAnimation(),
_delay(0),
_duration(-1),
_startTime(QTime::currentTime())
{
if (target != nullptr)
{
moveToThread(target->thread());
setParent(target);
}

connect(this, SIGNAL(finished()), SLOT(deleteLater()));
}

virtual ~CarlaStyleAnimation()
{
}

QObject* target() const
{
return parent();
}

int duration() const
{
return _duration;
}

void setDuration(int duration)
{
_duration = duration;
}

int delay() const
{
return _delay;
}

void setDelay(int delay)
{
_delay = delay;
}

QTime startTime() const
{
return _startTime;
}

void setStartTime(const QTime& time)
{
_startTime = time;
}

void updateTarget()
{
QEvent event(QEvent::HoverEnter);
QCoreApplication::sendEvent(target(), &event);
}

protected:
virtual bool isUpdateNeeded() const
{
return currentTime() > _delay;
}

virtual void updateCurrentTime(int /*time*/)
{
if (QObject* tgt = target())
{
if (tgt->isWidgetType())
{
QWidget* widget = static_cast<QWidget*>(tgt);
if (widget->window()->isMinimized() || ! widget->isVisible())
stop();
}

if (isUpdateNeeded())
updateTarget();
}
}

private:
int _delay;
int _duration;
QTime _startTime;
};

class CarlaProgressStyleAnimation : public CarlaStyleAnimation
{
Q_OBJECT

public:
CarlaProgressStyleAnimation(int speed, QObject* target)
: CarlaStyleAnimation(target),
_speed(speed),
_step(-1)
{
}

int animationStep() const
{
return currentTime() / (1000.0 / _speed);
}

int progressStep(int width) const
{
int step = animationStep();
int progress = (step * width / _speed) % width;
if (((step * width / _speed) % (2 * width)) >= width)
progress = width - progress;
return progress;
}

int speed() const
{
return _speed;
}

void setSpeed(int speed)
{
_speed = speed;
}

protected:
bool isUpdateNeeded() const
{
if (CarlaStyleAnimation::isUpdateNeeded())
{
int current = animationStep();
if (_step == -1 || _step != current)
{
_step = current;
return true;
}
}
return false;
}

private:
int _speed;
mutable int _step;
};

#endif // __CARLA_STYLE_ANIMATIONS_HPP__

+ 160
- 0
source/theme/CarlaStylePrivate.hpp View File

@@ -0,0 +1,160 @@
/*
* Carla Qt4 Style, based on Qt5 fusion style
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the GPL3.txt file
*/

#ifndef __CARLA_STYLE_PRIVATE_HPP__
#define __CARLA_STYLE_PRIVATE_HPP__

#include "CarlaStyle.hpp"
#include "CarlaStyleAnimations.hpp"

#include <QtCore/QHash>

class QStyleAnimation;

class CarlaStylePrivate : public QObject
{
Q_OBJECT

public:
enum {
menuItemHMargin = 3, // menu item hor text margin
menuArrowHMargin = 6, // menu arrow horizontal margin
menuRightBorder = 15, // right border on menus
menuCheckMarkWidth = 12 // checkmarks width on menus
};

CarlaStylePrivate(CarlaStyle* const style)
: kStyle(style),
fAnimationFps(60)
{
}

~CarlaStylePrivate()
{
qDeleteAll(fAnimations);
}

int animationFps() const
{
return fAnimationFps;
}

// Used for grip handles
QColor lightShade() const
{
return QColor(102, 102, 102, 90);
}

QColor darkShade() const
{
return QColor(0, 0, 0, 60);
}

QColor topShadow() const
{
return QColor(0, 0, 0, 18);
}

QColor innerContrastLine() const
{
return QColor(255, 255, 255, 30);
}

QColor highlight(const QPalette& pal) const
{
return pal.color(QPalette::Active, QPalette::Highlight);
}

QColor highlightedText(const QPalette& pal) const
{
return pal.color(QPalette::Active, QPalette::HighlightedText);
}

QColor outline(const QPalette& pal) const
{
if (! pal.window().texture().isNull())
return QColor(0, 0, 0, 160);
return pal.background().color().darker(140);
}

QColor highlightedOutline(const QPalette &pal) const
{
QColor highlightedOutline = highlight(pal).darker(125);
if (highlightedOutline.value() > 160)
highlightedOutline.setHsl(highlightedOutline.hue(), highlightedOutline.saturation(), 160);
return highlightedOutline;
}

QColor tabFrameColor(const QPalette& pal) const
{
if (! pal.button().texture().isNull())
return QColor(255, 255, 255, 8);
return buttonColor(pal).lighter(104);
}

QColor buttonColor(const QPalette& pal) const
{
QColor buttonColor = pal.button().color();
int val = qGray(buttonColor.rgb());
buttonColor = buttonColor.lighter(100 + qMax(1, (180 - val)/6));
buttonColor.setHsv(buttonColor.hue(), buttonColor.saturation() * 0.75, buttonColor.value());
return buttonColor;
}

QIcon tabBarcloseButtonIcon;

QList<const QObject*> animationTargets() const
{
return fAnimations.keys();
}

CarlaStyleAnimation* animation(const QObject* target) const
{
return fAnimations.value(target);
}

void startAnimation(CarlaStyleAnimation* animation) const
{
stopAnimation(animation->target());
kStyle->connect(animation, SIGNAL(destroyed()), SLOT(_removeAnimation()), Qt::UniqueConnection);
fAnimations.insert(animation->target(), animation);
animation->start();
}

void stopAnimation(const QObject* target) const
{
CarlaStyleAnimation* animation = fAnimations.take(target);
if (animation != nullptr && animation->state() != QAbstractAnimation::Stopped)
animation->stop();
}

private:
CarlaStyle* const kStyle;
int fAnimationFps;
mutable QHash<const QObject*, CarlaStyleAnimation*> fAnimations;

private slots:
void _removeAnimation()
{
QObject* animation = kStyle->sender();
if (animation != nullptr)
fAnimations.remove(animation->parent());
}
};

#endif // __CARLA_STYLE_PRIVATE_HPP__

+ 59
- 0
source/theme/Makefile View File

@@ -0,0 +1,59 @@
#!/usr/bin/make -f
# Makefile for theme #
# ------------------ #
# Created by falkTX
#

include ../Makefile.mk

# --------------------------------------------------------------

BUILD_CXX_FLAGS += -fvisibility=hidden -I.

ifeq ($(HAVE_QT5),true)
BUILD_CXX_FLAGS += $(shell pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets)
LINK_FLAGS += $(shell pkg-config --libs Qt5Core Qt5Gui Qt5Widgets)
else
BUILD_CXX_FLAGS += $(shell pkg-config --cflags QtCore QtGui)
LINK_FLAGS += $(shell pkg-config --libs QtCore QtGui)
endif

FILES = \
moc_CarlaStyle.cpp \
moc_CarlaStylePrivate.cpp \
moc_CarlaStyleAnimations.cpp \
resources.cpp

OBJS = \
CarlaStyle.cpp.o \
moc_CarlaStyle.cpp.o \
moc_CarlaStyleAnimations.cpp.o \
moc_CarlaStylePrivate.cpp.o

TARGET = ../libs/theme.a

# --------------------------------------------------------------

all: $(TARGET)

clean:
rm -f $(FILES) $(OBJS) $(TARGET)

debug:
$(MAKE) DEBUG=true

# --------------------------------------------------------------

$(TARGET): $(FILES) $(OBJS)
$(AR) rs $@ $(OBJS)

# --------------------------------------------------------------

%.cpp.o: %.cpp CarlaStyle.hpp moc_CarlaStyle.cpp
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

moc_%.cpp: %.hpp
$(MOC) $< -o $@

resources.cpp: ../../resources/resources-theme.qrc
$(RCC) $< -o $@

Loading…
Cancel
Save