paysages: Added band previews to colorgradation editor.

git-svn-id: https://subversion.assembla.com/svn/thunderk/paysages@278 b1fd45b6-86a6-48da-8261-f70d1f35bdcc
This commit is contained in:
Michaël Lemaire 2012-03-18 19:51:06 +00:00 committed by ThunderK
parent f479af8417
commit 6f5c201df3
7 changed files with 135 additions and 34 deletions

1
TODO
View file

@ -1,4 +1,5 @@
- Implement scaling and scrolling on previews.
- Improve color gradation dialog (with curve editor ?).
- Replace FILE* by a custom type for Save and Load.
- Water and terrain LOD moves with the camera, fix it like in the wanderer.
- Restore render progress.

View file

@ -20,11 +20,27 @@ DialogColorGradation::DialogColorGradation(QWidget *parent, ColorGradation* grad
_current = colorGradationCreate();
colorGradationCopy(_base, _current);
setLayout(new QHBoxLayout());
setLayout(new QVBoxLayout());
_curve_editor = new WidgetCurveEditor(this);
layout()->addWidget(_curve_editor);
_preview_red = new PreviewColorGradation(this, gradation, COLORGRADATIONBAND_RED);
_preview_red->setMinimumHeight(50);
layout()->addWidget(_preview_red);
_preview_green = new PreviewColorGradation(this, gradation, COLORGRADATIONBAND_GREEN);
_preview_green->setMinimumHeight(50);
layout()->addWidget(_preview_green);
_preview_blue = new PreviewColorGradation(this, gradation, COLORGRADATIONBAND_BLUE);
_preview_blue->setMinimumHeight(50);
layout()->addWidget(_preview_blue);
_preview_final = new PreviewColorGradation(this, gradation, COLORGRADATIONBAND_FINAL);
_preview_final->setMinimumHeight(50);
layout()->addWidget(_preview_final);
_curve = curveCreate();
/*QObject::connect(button, SIGNAL(clicked()), this, SLOT(accept()));

View file

@ -4,6 +4,7 @@
#include <QDialog>
#include "baseform.h"
#include "widgetcurveeditor.h"
#include "previewcolorgradation.h"
#include "../lib_paysages/color.h"
#include "../lib_paysages/curve.h"
@ -32,6 +33,10 @@ private:
ColorGradation* _current;
Curve* _curve;
WidgetCurveEditor* _curve_editor;
PreviewColorGradation* _preview_red;
PreviewColorGradation* _preview_green;
PreviewColorGradation* _preview_blue;
PreviewColorGradation* _preview_final;
};
#endif

View file

@ -5,37 +5,14 @@
#include <QPainter>
#include <QColorDialog>
#include "dialogcolorgradation.h"
#include "previewcolorgradation.h"
#include "tools.h"
class ColorGradationPreview:public QWidget
{
public:
ColorGradationPreview(QWidget* parent, ColorGradation* gradation) : QWidget(parent)
{
this->gradation = gradation;
}
void paintEvent(QPaintEvent* event)
{
QPainter painter(this);
int width = this->width();
int height = this->height();
for (int x = 0; x < width; x++)
{
painter.setPen(colorToQColor(colorGradationGet(gradation, (double)x / (double)width)));
painter.drawLine(x, 0, x, height - 1);
}
}
ColorGradation* gradation;
};
InputColorGradation::InputColorGradation(QWidget* form, QString label, ColorGradation* value) : BaseInput(form, label)
{
_value = value;
_preview = new ColorGradationPreview(form, value);
_preview = new PreviewColorGradation(form, value, COLORGRADATIONBAND_FINAL);
_preview->setMinimumSize(200, 20);
_control = new QPushButton(tr("Edit"), form);

View file

@ -0,0 +1,68 @@
#include "previewcolorgradation.h"
#include <QVBoxLayout>
#include <QImage>
#include <QLabel>
#include <QColor>
#include <QPainter>
#include <QSlider>
#include <QScrollArea>
#include <QPushButton>
#include "baseform.h"
#include "tools.h"
#include "widgetcurveeditor.h"
/**************** Preview ****************/
PreviewColorGradation::PreviewColorGradation(QWidget* parent, ColorGradation* gradation, EnumColorGradationBand band) : QWidget(parent)
{
this->gradation = gradation;
this->band = band;
}
void PreviewColorGradation::paintEvent(QPaintEvent* event)
{
Curve* curve;
QPainter painter(this);
int width = this->width();
int height = this->height();
curve = curveCreate();
switch (band)
{
case COLORGRADATIONBAND_RED:
colorGradationGetRedCurve(gradation, curve);
break;
case COLORGRADATIONBAND_GREEN:
colorGradationGetGreenCurve(gradation, curve);
break;
case COLORGRADATIONBAND_BLUE:
colorGradationGetBlueCurve(gradation, curve);
break;
default:
break;
}
for (int x = 0; x < width; x++)
{
switch (band)
{
case COLORGRADATIONBAND_RED:
painter.setPen(QColor::fromRgbF(curveGetValue(curve, (double)x / (double)width), 0.0, 0.0));
break;
case COLORGRADATIONBAND_GREEN:
painter.setPen(QColor::fromRgbF(0.0, curveGetValue(curve, (double)x / (double)width), 0.0));
break;
case COLORGRADATIONBAND_BLUE:
painter.setPen(QColor::fromRgbF(0.0, 0.0, curveGetValue(curve, (double)x / (double)width)));
break;
case COLORGRADATIONBAND_FINAL:
painter.setPen(colorToQColor(colorGradationGet(gradation, (double)x / (double)width)));
break;
}
painter.drawLine(x, 0, x, height - 1);
}
curveDelete(curve);
}

View file

@ -0,0 +1,28 @@
#ifndef _PAYSAGES_QT_PREVIEWCOLORGRADATION_H_
#define _PAYSAGES_QT_PREVIEWCOLORGRADATION_H_
#include <QWidget>
#include "../lib_paysages/color.h"
typedef enum
{
COLORGRADATIONBAND_RED,
COLORGRADATIONBAND_GREEN,
COLORGRADATIONBAND_BLUE,
COLORGRADATIONBAND_FINAL
} EnumColorGradationBand;
class PreviewColorGradation:public QWidget
{
Q_OBJECT
public:
PreviewColorGradation(QWidget* parent, ColorGradation* gradation, EnumColorGradationBand band);
void paintEvent(QPaintEvent* event);
private:
ColorGradation* gradation;
EnumColorGradationBand band;
};
#endif

View file

@ -4,34 +4,40 @@
<context>
<name>BaseForm</name>
<message>
<location filename="../gui_qt/baseform.cpp" line="33"/>
<source>Layers : </source>
<translation type="obsolete">Niveaux :</translation>
<translation>Niveaux :</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="39"/>
<source>Add layer</source>
<translation type="obsolete">Ajouter un niveau</translation>
<translation>Ajouter un niveau</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="43"/>
<source>Delete layer</source>
<translation type="obsolete">Supprimer un niveau</translation>
<translation>Supprimer un niveau</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="73"/>
<source>Apply</source>
<translation type="obsolete">Appliquer</translation>
<translation>Appliquer</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="76"/>
<source>Revert</source>
<translation type="obsolete">Annuler les modifications</translation>
<translation>Annuler les modifications</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="239"/>
<source>Layer %1</source>
<translation type="obsolete">Niveau %1</translation>
<translation>Niveau %1</translation>
</message>
</context>
<context>
<name>DialogColorGradation</name>
<message>
<location filename="../gui_qt/dialogcolorgradation.cpp" line="34"/>
<location filename="../gui_qt/dialogcolorgradation.cpp" line="50"/>
<source>Paysages 3D - Color gradation editor</source>
<translation>Paysages 3D - Editeur de gradients de couleur</translation>
</message>
@ -492,7 +498,7 @@
<context>
<name>InputColorGradation</name>
<message>
<location filename="../gui_qt/inputcolorgradation.cpp" line="41"/>
<location filename="../gui_qt/inputcolorgradation.cpp" line="18"/>
<source>Edit</source>
<translation>Editer</translation>
</message>