diff --git a/gui_qt/baseform.cpp b/gui_qt/baseform.cpp new file mode 100644 index 0000000..a0d6c6c --- /dev/null +++ b/gui_qt/baseform.cpp @@ -0,0 +1,104 @@ +#include "baseform.h" + +#include +#include +#include +#include +#include + +class DoubleSliderWidget:public QWidget +{ +public: + DoubleSliderWidget(QWidget* parent, double* value, double min, double max, double small_step, double large_step): + QWidget(parent), + value(value), min(min), max(max), small_step(small_step), large_step(large_step) + { + setObjectName("_form_doubleslider_"); + + setLayout(new QHBoxLayout()); + + slider = new QSlider(this); + slider->setOrientation(Qt::Horizontal); + slider->setMinimum(min / small_step); + slider->setMaximum(max / small_step); + slider->setValue(*value / small_step); + slider->setTickInterval(large_step / small_step); + slider->setTickPosition(QSlider::TicksBelow); + + layout()->addWidget(slider); + } + + void revert() + { + slider->setValue(*value / small_step); + } + +private: + QSlider* slider; + double* value; + double min; + double max; + double small_step; + double large_step; +}; + +BaseForm::BaseForm(QWidget* parent) : + QWidget(parent) +{ + QWidget* hwidget; + QWidget* buttons; + QVBoxLayout* vlayout; + QHBoxLayout* hlayout; + + vlayout = new QVBoxLayout(); + hlayout = new QHBoxLayout(); + + hwidget = new QWidget(this); + + previews = new QWidget(this); + previews->setLayout(new QVBoxLayout()); + + form = new QWidget(this); + form->setLayout(new QGridLayout()); + + buttons = new QWidget(this); + + hlayout->addWidget(previews); + hlayout->addWidget(form); + vlayout->addWidget(hwidget); + vlayout->addWidget(buttons); + + hwidget->setLayout(hlayout); + this->setLayout(vlayout); +} + +void BaseForm::revertConfig() +{ + QList list_previews = previews->findChildren("_form_preview_"); + for (int i = 0; i < list_previews.size(); i++) + { + list_previews[i]->redraw(); + } + + QList list_doubles = form->findChildren("_form_doubleslider_"); + for (int i = 0; i < list_doubles.size(); i++) + { + list_doubles[i]->revert(); + } +} + +void BaseForm::addPreview(Preview* preview, QString label) +{ + previews->layout()->addWidget(new QLabel(label, previews)); + previews->layout()->addWidget(preview); + preview->setObjectName("_form_preview_"); +} + +void BaseForm::addDoubleSlider(QString label, double* value, double min, double max, double small_step, double large_step) +{ + QGridLayout* layout = (QGridLayout*)form->layout(); + int row = layout->rowCount(); + + layout->addWidget(new QLabel(label, form), row, 0); + layout->addWidget(new DoubleSliderWidget(form, value, min, max, small_step, large_step), row, 1); +} diff --git a/gui_qt/baseform.h b/gui_qt/baseform.h new file mode 100644 index 0000000..274950f --- /dev/null +++ b/gui_qt/baseform.h @@ -0,0 +1,24 @@ +#ifndef _GUI_QT_BASEFORM_H_ +#define _GUI_QT_BASEFORM_H_ + +#include +#include "preview.h" + +class BaseForm:public QWidget +{ +public: + BaseForm(QWidget* parent); + +public slots: + virtual void revertConfig(); + +protected: + void addPreview(Preview* preview, QString label); + void addDoubleSlider(QString label, double* value, double min, double max, double small_step, double large_step); + +private: + QWidget* previews; + QWidget* form; +}; + +#endif // _GUI_QT_BASEFORM_H_ diff --git a/gui_qt/formwater.cpp b/gui_qt/formwater.cpp index effd540..6e60a9a 100644 --- a/gui_qt/formwater.cpp +++ b/gui_qt/formwater.cpp @@ -1,7 +1,7 @@ #include "preview.h" #include "formwater.h" -#include "ui_formwater.h" #include +#include #include #include "../lib_paysages/terrain.h" @@ -122,45 +122,32 @@ private: /**************** Form ****************/ FormWater::FormWater(QWidget *parent) : - QWidget(parent), - ui(new Ui::FormWater) + BaseForm(parent) { - ui->setupUi(this); - - findChild("water_configs")->setCurrentIndex(0); - _definition = waterCreateDefinition(); - previewCoverage = new PreviewCoverage(findChild("water_preview_coverage")); - previewColor = new PreviewColor(findChild("water_preview_color")); + previewCoverage = new PreviewCoverage(this); + previewColor = new PreviewColor(this); + addPreview(previewCoverage, QString("Coverage preview")); + addPreview(previewColor, QString("Color preview")); - QObject::connect(findChild("water_height"), SIGNAL(valueChanged(int)), this, SLOT(configChange())); - QObject::connect(findChild("water_transparency"), SIGNAL(valueChanged(int)), this, SLOT(configChange())); - QObject::connect(findChild("water_reflection"), SIGNAL(valueChanged(int)), this, SLOT(configChange())); - QObject::connect(findChild("water_depth_limit"), SIGNAL(valueChanged(int)), this, SLOT(configChange())); + addDoubleSlider("Height", &_definition.height, -20.0, 20.0, 0.1, 1.0); + addDoubleSlider("Transparency", &_definition.transparency, 0.0, 1.0, 0.001, 0.1); + addDoubleSlider("Reflection", &_definition.reflection, 0.0, 1.0, 0.001, 0.1); + addDoubleSlider("Depth filtering", &_definition.transparency_depth, 0.0, 100.0, 0.5, 5.0); revertConfig(); } -FormWater::~FormWater() -{ - delete ui; -} - -void FormWater::dataUpdated() -{ - revertConfig(); -} - void FormWater::configChange() { - _definition.height = (double)findChild("water_height")->value() / 10.0; + /*_definition.height = (double)findChild("water_height")->value() / 10.0; _definition.transparency = (double)findChild("water_transparency")->value() / 1000.0; _definition.reflection = (double)findChild("water_reflection")->value() / 1000.0; _definition.transparency_depth = (double)findChild("water_depth_limit")->value() / 10.0; previewCoverage->redraw(); - previewColor->redraw(); + previewColor->redraw();*/ } void FormWater::applyConfig() @@ -172,12 +159,5 @@ void FormWater::applyConfig() void FormWater::revertConfig() { waterCopyDefinition(waterGetDefinition(), &_definition); - - findChild("water_height")->setValue(_definition.height * 10.0); - findChild("water_transparency")->setValue(_definition.transparency * 1000.0); - findChild("water_reflection")->setValue(_definition.reflection * 1000.0); - findChild("water_depth_limit")->setValue(_definition.transparency_depth * 10.0); - - previewCoverage->redraw(); - previewColor->redraw(); + BaseForm::revertConfig(); } diff --git a/gui_qt/formwater.h b/gui_qt/formwater.h index 1948b33..7aa596c 100644 --- a/gui_qt/formwater.h +++ b/gui_qt/formwater.h @@ -1,32 +1,25 @@ -#ifndef FORMWATER_H -#define FORMWATER_H +#ifndef _GUI_QT_FORMWATER_H_ +#define _GUI_QT_FORMWATER_H_ #include #include "preview.h" +#include "baseform.h" -namespace Ui { - class FormWater; -} - -class FormWater : public QWidget +class FormWater : public BaseForm { Q_OBJECT public: explicit FormWater(QWidget *parent = 0); - ~FormWater(); - - void dataUpdated(); public slots: + virtual void revertConfig(); void configChange(); void applyConfig(); - void revertConfig(); private: - Ui::FormWater *ui; Preview* previewCoverage; Preview* previewColor; }; -#endif // FORMWATER_H +#endif // _GUI_QT_FORMWATER_H_ diff --git a/gui_qt/formwater.ui b/gui_qt/formwater.ui deleted file mode 100644 index 6557ab9..0000000 --- a/gui_qt/formwater.ui +++ /dev/null @@ -1,344 +0,0 @@ - - - FormWater - - - - 0 - 0 - 739 - 591 - - - - Form - - - - - 279 - 550 - 451 - 31 - - - - - - - Apply - - - - - - - Revert - - - - - - - - - 10 - 10 - 258 - 566 - - - - - - - - 0 - 0 - - - - Coverage preview - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - - 256 - 256 - - - - - 256 - 256 - - - - - 256 - 256 - - - - - - - - - 0 - 0 - - - - Color preview - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - - 256 - 256 - - - - - 256 - 256 - - - - - 256 - 256 - - - - - - - - - - 280 - 10 - 451 - 531 - - - - 2 - - - - - 0 - 0 - 451 - 438 - - - - Coverage - - - - - 0 - 0 - 451 - 431 - - - - - QFormLayout::AllNonFixedFieldsGrow - - - - - Height - - - - - - - -300 - - - 300 - - - Qt::Horizontal - - - - - - - - - - 0 - 0 - 451 - 438 - - - - Waves - - - - - - 0 - 0 - 451 - 438 - - - - Colors - - - - - 0 - 0 - 451 - 431 - - - - - QFormLayout::AllNonFixedFieldsGrow - - - - - Transparency - - - - - - - 1000 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 100 - - - - - - - Reflection - - - - - - - 1000 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 100 - - - - - - - Surface color - - - - - - - PushButton - - - - - - - Depth color - - - - - - - Depth limit - - - - - - - PushButton - - - - - - - 500 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 10 - - - - - - - - - - - diff --git a/gui_qt/paysages-qt.pro b/gui_qt/paysages-qt.pro index 5cf949e..a34cda8 100644 --- a/gui_qt/paysages-qt.pro +++ b/gui_qt/paysages-qt.pro @@ -14,10 +14,11 @@ LIBS += -L../lib_paysages/ -lpaysages HEADERS += ../lib_paysages/shared/functions.h ../lib_paysages/shared/types.h \ mainwindow.h \ formwater.h \ - preview.h -FORMS += mainwindow.ui \ - formwater.ui + preview.h \ + baseform.h +FORMS += mainwindow.ui SOURCES += main.cc \ mainwindow.cpp \ formwater.cpp \ - preview.cpp + preview.cpp \ + baseform.cpp diff --git a/gui_qt/preview.cpp b/gui_qt/preview.cpp index 140747e..0f1c394 100644 --- a/gui_qt/preview.cpp +++ b/gui_qt/preview.cpp @@ -47,7 +47,9 @@ Preview::Preview(QWidget* parent) : this->need_rerender = 0; this->need_render = 0; - this->resize(parent->size()); + this->setMinimumSize(256, 256); + this->setMaximumSize(256, 256); + this->resize(256, 256); } void Preview::startUpdater() diff --git a/gui_qt/preview.h b/gui_qt/preview.h index 080882a..6fdc690 100644 --- a/gui_qt/preview.h +++ b/gui_qt/preview.h @@ -1,5 +1,5 @@ -#ifndef PREVIEW_H -#define PREVIEW_H +#ifndef _GUI_QT_PREVIEW_H_ +#define _GUI_QT_PREVIEW_H_ #include #include @@ -45,4 +45,4 @@ protected: //SmallPreviewCallback renderer; }; -#endif // PREVIEW_H +#endif // _GUI_QT_PREVIEW_H_ diff --git a/lib_paysages/auto.c b/lib_paysages/auto.c index 1a6af0e..dd288d8 100644 --- a/lib_paysages/auto.c +++ b/lib_paysages/auto.c @@ -12,6 +12,7 @@ #include "water.h" #include "clouds.h" #include "sky.h" +#include "modifiers.h" #include "terrain.h" #include "textures.h" diff --git a/lib_paysages/modifiers.c b/lib_paysages/modifiers.c index 922570d..05af690 100644 --- a/lib_paysages/modifiers.c +++ b/lib_paysages/modifiers.c @@ -1,5 +1,6 @@ #include "shared/types.h" #include "shared/functions.h" +#include "modifiers.h" #include diff --git a/lib_paysages/modifiers.h b/lib_paysages/modifiers.h new file mode 100644 index 0000000..b195219 --- /dev/null +++ b/lib_paysages/modifiers.h @@ -0,0 +1,27 @@ +#ifndef _PAYSAGES_MODIFIERS_H_ +#define _PAYSAGES_MODIFIERS_H_ + +#include "shared/types.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct HeightModifier HeightModifier; + +HeightModifier* modifierCreate(); +HeightModifier* modifierCreateCopy(HeightModifier* source); +void modifierDelete(HeightModifier* modifier); +void modifierSave(HeightModifier* modifier, FILE* f); +void modifierLoad(HeightModifier* modifier, FILE* f); +Zone* modifierGetZone(HeightModifier* modifier); +void modifierActionAddValue(HeightModifier* modifier, double value); +void modifierActionFixValue(HeightModifier* modifier, double value); +Vector3 modifierApply(HeightModifier* modifier, Vector3 location); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib_paysages/shared/functions.h b/lib_paysages/shared/functions.h index f7be82c..f55ae0d 100644 --- a/lib_paysages/shared/functions.h +++ b/lib_paysages/shared/functions.h @@ -105,17 +105,6 @@ void lightingSetSunAngle(double hor, double ver); void lightingSetSunColor(Color col); Color lightingApply(Vector3 location, Vector3 normal, double shadowing, Color base, double reflection, double shininess); -/* modifiers.c */ -HeightModifier* modifierCreate(); -HeightModifier* modifierCreateCopy(HeightModifier* source); -void modifierDelete(HeightModifier* modifier); -void modifierSave(HeightModifier* modifier, FILE* f); -void modifierLoad(HeightModifier* modifier, FILE* f); -Zone* modifierGetZone(HeightModifier* modifier); -void modifierActionAddValue(HeightModifier* modifier, double value); -void modifierActionFixValue(HeightModifier* modifier, double value); -Vector3 modifierApply(HeightModifier* modifier, Vector3 location); - /* noise.c */ NoiseGenerator* noiseCreateGenerator(); void noiseDeleteGenerator(NoiseGenerator* generator); diff --git a/lib_paysages/shared/types.h b/lib_paysages/shared/types.h index 637f2e7..16c76a1 100644 --- a/lib_paysages/shared/types.h +++ b/lib_paysages/shared/types.h @@ -100,8 +100,6 @@ typedef struct NoiseGenerator NoiseGenerator; typedef struct Zone Zone; -typedef struct HeightModifier HeightModifier; - typedef void (*PreviewCallbackResize)(int width, int height); typedef void (*PreviewCallbackClear)(Color col); typedef void (*PreviewCallbackDraw)(int x, int y, Color col); diff --git a/lib_paysages/terrain.h b/lib_paysages/terrain.h index 093efb4..fed8bd4 100644 --- a/lib_paysages/terrain.h +++ b/lib_paysages/terrain.h @@ -2,6 +2,7 @@ #define _PAYSAGES_TERRAIN_H_ #include "shared/types.h" +#include "modifiers.h" #include #ifdef __cplusplus