Refactoring of BasePreview

This commit is contained in:
Michaël Lemaire 2013-11-12 23:15:35 +01:00
parent d9f2f3878f
commit aed4f9d80e
52 changed files with 359 additions and 325 deletions

View file

@ -30,4 +30,8 @@
<file>images/logo_64.png</file>
<file>images/logo_256.png</file>
</qresource>
<qresource prefix="/">
<file>images/toggle_on.png</file>
<file>images/choice_on.png</file>
</qresource>
</RCC>

View file

@ -10,6 +10,7 @@
#include "inputmaterial.h"
#include "inputenum.h"
#include "inputlayers.h"
#include "BasePreview.h"
#include <QVBoxLayout>
#include <QHBoxLayout>

View file

@ -1,9 +1,10 @@
#ifndef _PAYSAGES_QT_BASEFORM_H_
#define _PAYSAGES_QT_BASEFORM_H_
#include "editing_global.h"
#include <QWidget>
#include <QStringList>
#include "basepreview.h"
#include "baseinput.h"
#include "dialoglayers.h"
#include "shared/types.h"
@ -14,18 +15,6 @@
class QPushButton;
class QComboBox;
namespace paysages {
namespace system {
class PackStream;
}
namespace basics {
class NoiseGenerator;
}
namespace definition {
class Layers;
}
}
class BaseForm : public QWidget
{
Q_OBJECT

View file

@ -8,11 +8,14 @@
#include <QPushButton>
#include <QWidget>
#include <QInputDialog>
#include <QLabel>
#include "mainwindow.h"
#include "dialogrender.h"
#include "dialogexplorer.h"
#include "Scenery.h"
#include "BasePreview.h"
#include "renderer.h"
#include "camera.h"
#include "tools.h"
Q_DECLARE_METATYPE(double*)
@ -79,7 +82,7 @@ void FreeFormHelper::startManaging()
processGlobalRefresh();
}
void FreeFormHelper::addPreview(BasePreview* preview, PreviewRenderer* renderer)
void FreeFormHelper::addPreview(BasePreview* preview, Base2dPreviewRenderer* renderer)
{
_previews.append(preview);
preview->setRenderer(renderer);

View file

@ -1,14 +1,17 @@
#ifndef FREEFORMHELPER_H
#define FREEFORMHELPER_H
#include "editing_global.h"
#include <QVector>
#include <QStringList>
#include "widgetsliderdecimal.h"
#include "../basepreview.h"
class QSlider;
class QPushButton;
class QLabel;
class Renderer;
class FreeFormHelper:public QObject
{
@ -20,7 +23,7 @@ public:
void startManaging();
void addPreview(BasePreview* preview, PreviewRenderer* renderer);
void addPreview(BasePreview* preview, Base2dPreviewRenderer* renderer);
void addDoubleInputSlider(WidgetSliderDecimal* slider, double* value, double min=0.0, double max=1.0, double small_step=0.0, double large_step=0.0);
void setApplyButton(QPushButton* button);
void setRevertButton(QPushButton* button);

View file

@ -12,7 +12,9 @@
#include <QMessageBox>
#include <QSplashScreen>
#include "basepreview.h"
#include "BasePreview.h"
#include "PreviewOsd.h"
#include "PreviewOsdItem.h"
#include "formclouds.h"
#include "formatmosphere.h"
#include "formwater.h"

View file

@ -1,25 +0,0 @@
#include "previewrenderer.h"
#include "SoftwareRenderer.h"
PreviewRenderer::PreviewRenderer()
{
}
PreviewRenderer::~PreviewRenderer()
{
}
Color PreviewRenderer::getColor2D(double, double, double) const
{
return COLOR_BLACK;
}
void PreviewRenderer::bindEvent(BasePreview*)
{
}
void PreviewRenderer::updateEvent()
{
renderer->prepare();
}

View file

@ -1,22 +0,0 @@
#ifndef PREVIEWRENDERER_H
#define PREVIEWRENDERER_H
#include "rendering_global.h"
#include "Base2dPreviewRenderer.h"
#include "renderer.h"
class BasePreview;
class PreviewRenderer : public Base2dPreviewRenderer
{
public:
PreviewRenderer();
virtual ~PreviewRenderer();
virtual void bindEvent(BasePreview* preview);
virtual void updateEvent();
virtual Color getColor2D(double x, double y, double scaling) const override;
};
#endif // PREVIEWRENDERER_H

View file

@ -11,6 +11,7 @@
#include <QPushButton>
#include <cmath>
#include "tools/color.h"
#include "BasePreview.h"
/**************** Previews ****************/
class PreviewLevel:public BasePreview

View file

@ -1,9 +1,10 @@
#ifndef _PAYSAGES_QT_DIALOGNOISE_H_
#define _PAYSAGES_QT_DIALOGNOISE_H_
#include "editing_global.h"
#include <QListWidget>
#include <QComboBox>
#include "basepreview.h"
#include "tools.h"
#include "NoiseGenerator.h"

View file

@ -13,7 +13,6 @@ HEADERS += \
terrain/widgetheightmap.h \
widgetcurveeditor.h \
tools.h \
previewosd.h \
previewmaterial.h \
previewcolorgradation.h \
inputnoise.h \
@ -38,7 +37,6 @@ HEADERS += \
dialogexplorer.h \
dialogcurve.h \
dialogcolorgradation.h \
basepreview.h \
baseinput.h \
baseformlayer.h \
baseform.h \
@ -49,14 +47,12 @@ HEADERS += \
common/freeformhelper.h \
terrain/previewterrainshape.h \
common/widgetsliderdecimal.h \
common/previewrenderer.h \
terrain/widgetterrainbasenoisepreview.h \
common/mainwindow.h \
terrain/dialogbaseterrainnoise.h \
textures/maintexturesform.h \
common/freelayerhelper.h \
lighting/DialogMaterialEditor.h \
common/DrawingWidget.h \
lighting/SmallPreviewColor.h \
lighting/SmallPreviewHues.h \
textures/PreviewLayerCoverage.h \
@ -69,7 +65,6 @@ SOURCES += \
terrain/widgetheightmap.cpp \
widgetcurveeditor.cpp \
tools.cpp \
previewosd.cpp \
previewmaterial.cpp \
previewcolorgradation.cpp \
inputnoise.cpp \
@ -94,7 +89,6 @@ SOURCES += \
dialogexplorer.cpp \
dialogcurve.cpp \
dialogcolorgradation.cpp \
basepreview.cpp \
baseinput.cpp \
baseformlayer.cpp \
baseform.cpp \
@ -105,14 +99,12 @@ SOURCES += \
common/freeformhelper.cpp \
terrain/previewterrainshape.cpp \
common/widgetsliderdecimal.cpp \
common/previewrenderer.cpp \
terrain/widgetterrainbasenoisepreview.cpp \
common/mainwindow.cpp \
terrain/dialogbaseterrainnoise.cpp \
textures/maintexturesform.cpp \
common/freelayerhelper.cpp \
lighting/DialogMaterialEditor.cpp \
common/DrawingWidget.cpp \
lighting/SmallPreviewColor.cpp \
lighting/SmallPreviewHues.cpp \
textures/PreviewLayerCoverage.cpp \

View file

@ -4,5 +4,6 @@
#include "definition_global.h"
#include "software_global.h"
#include "opengl_global.h"
#include "preview_global.h"
#endif // EDITING_GLOBAL_H

View file

@ -9,12 +9,13 @@
#include "atmosphere/public.h"
#include "AtmosphereColorPreviewRenderer.h"
#include "Scenery.h"
#include "BasePreview.h"
#include "renderer.h"
static AtmosphereDefinition* _definition;
/**************** Previews ****************/
class PreviewSkyEast:public PreviewRenderer, public AtmosphereColorPreviewRenderer
class PreviewSkyEast:public AtmosphereColorPreviewRenderer
{
public:
void bindEvent(BasePreview* preview) override
@ -22,14 +23,14 @@ public:
preview->configHdrToneMapping(true);
preview->configScaling(0.5, 5.0, 0.5, 2.5);
}
void updateData()
void updateEvent() override
{
/*AtmosphereRendererClass.bind(_renderer, _definition);
_renderer->prepare();*/
/*AtmosphereRendererClass.bind(renderer, _definition);
renderer->prepare();*/
}
};
class PreviewSkyWest:public PreviewRenderer, public AtmosphereColorPreviewRenderer
class PreviewSkyWest:public AtmosphereColorPreviewRenderer
{
public:
void bindEvent(BasePreview* preview) override
@ -37,10 +38,10 @@ public:
preview->configHdrToneMapping(true);
preview->configScaling(0.5, 5.0, 0.5, 2.5);
}
void updateData()
void updateEvent() override
{
/*AtmosphereRendererClass.bind(_renderer, _definition);
_renderer->prepare();*/
/*AtmosphereRendererClass.bind(renderer, _definition);
renderer->prepare();*/
}
};

View file

@ -1,9 +1,10 @@
#ifndef _PAYSAGES_QT_FORMATMOSPHERE_H_
#define _PAYSAGES_QT_FORMATMOSPHERE_H_
#include <QWidget>
#include "basepreview.h"
#include "editing_global.h"
#include "baseform.h"
class QWidget;
class FormAtmosphere : public BaseForm
{

View file

@ -4,6 +4,8 @@
#include "tools/color.h"
#include "tools/euclid.h"
#include "Scenery.h"
#include "BasePreview.h"
#include "renderer.h"
#include "tools.h"

View file

@ -1,10 +1,11 @@
#ifndef _PAYSAGES_QT_FORMCLOUDS_H_
#define _PAYSAGES_QT_FORMCLOUDS_H_
#include <QWidget>
#include "basepreview.h"
#include "editing_global.h"
#include "baseformlayer.h"
#include "clouds/public.h"
class QWidget;
class FormClouds : public BaseFormLayer
{

View file

@ -13,6 +13,7 @@
#include "Scenery.h"
#include "PackStream.h"
#include "SoftwareRenderer.h"
#include "BasePreview.h"
/**************** Previews ****************/
class PreviewRenderLandscape : public BasePreview

View file

@ -1,7 +1,10 @@
#include "formtextures.h"
#include "Scenery.h"
#include "BasePreview.h"
#include "renderer.h"
#include "tools.h"
#include "camera.h"
/**************** Previews ****************/
class PreviewTexturesCoverage : public BasePreview

View file

@ -1,10 +1,11 @@
#ifndef _PAYSAGES_QT_FORMTEXTURES_H_
#define _PAYSAGES_QT_FORMTEXTURES_H_
#include <QWidget>
#include "basepreview.h"
#include "editing_global.h"
#include "baseformlayer.h"
#include "textures/public.h"
class QWidget;
class FormTextures : public BaseFormLayer
{

View file

@ -1,4 +1,3 @@
#include "basepreview.h"
#include "formwater.h"
#include <QColor>
@ -13,6 +12,8 @@
#include "atmosphere/public.h"
#include "tools.h"
#include "Scenery.h"
#include "BasePreview.h"
#include "camera.h"
static WaterDefinition* _definition;

View file

@ -1,9 +1,10 @@
#ifndef _PAYSAGES_QT_FORMWATER_H_
#define _PAYSAGES_QT_FORMWATER_H_
#include <QWidget>
#include "basepreview.h"
#include "editing_global.h"
#include "baseform.h"
class QWidget;
class FormWater : public BaseForm
{

View file

@ -1,7 +1,7 @@
#ifndef SMALLPREVIEWCOLOR_H
#define SMALLPREVIEWCOLOR_H
#include "common/DrawingWidget.h"
#include "DrawingWidget.h"
#include "tools/color.h"

View file

@ -1,7 +1,7 @@
#ifndef SMALLPREVIEWHUES_H
#define SMALLPREVIEWHUES_H
#include "common/DrawingWidget.h"
#include "DrawingWidget.h"
class SmallPreviewHues: public DrawingWidget
{

View file

@ -4,9 +4,11 @@
#include <QPainter>
#include "tools.h"
#include "SoftwareRenderer.h"
#include "BasePreview.h"
#include "tools/lighting.h"
#include "tools/color.h"
#include "camera.h"
/***** Shared renderer *****/
MaterialPreviewRenderer::MaterialPreviewRenderer(SurfaceMaterial* material)
@ -24,7 +26,7 @@ MaterialPreviewRenderer::MaterialPreviewRenderer(SurfaceMaterial* material)
_material = material;
Vector3 camera_location = {0.0, 0.0, 10.0};
cameraSetLocation(renderer->render_camera, camera_location);
cameraSetLocation(render_camera, camera_location);
_color_profile = colorProfileCreate();
colorProfileSetToneMapping(_color_profile, TONE_MAPPING_UNCHARTED, 1.0);
@ -64,7 +66,7 @@ Color MaterialPreviewRenderer::getColor2D(double x, double y, double)
}
point = v3Normalize(point);
color = lightingApplyOneLight(&_light, renderer->getCameraLocation(renderer, point), point, point, _material);
color = lightingApplyOneLight(&_light, getCameraLocation(this, point), point, point, _material);
if (dist > 0.95)
{
color.a = (1.0 - dist) / 0.05;

View file

@ -1,16 +1,18 @@
#ifndef _PAYSAGES_QT_PREVIEWMATERIAL_H_
#define _PAYSAGES_QT_PREVIEWMATERIAL_H_
#include "basepreview.h"
#include "common/previewrenderer.h"
#include "editing_global.h"
#include "Base2dPreviewRenderer.h"
#include <QWidget>
#include "tools/lighting.h"
#include "renderer.h"
class MaterialPreviewRenderer:public PreviewRenderer {
class MaterialPreviewRenderer:public Base2dPreviewRenderer {
public:
MaterialPreviewRenderer(SurfaceMaterial* material);
~MaterialPreviewRenderer();
virtual ~MaterialPreviewRenderer();
virtual void bindEvent(BasePreview* preview);
virtual Color getColor2D(double x, double y, double scaling);

View file

@ -1,45 +0,0 @@
#ifndef _PAYSAGES_QT_PREVIEWOSD_H_
#define _PAYSAGES_QT_PREVIEWOSD_H_
#include <QImage>
#include "camera.h"
class PreviewOsdItem:public QImage
{
public:
PreviewOsdItem(int width, int height);
void setLocation(double x, double y);
inline double xlocation() {return _xlocation;};
inline double ylocation() {return _ylocation;};
void setToolTip(QString text);
QString getToolTip(double x, double y, double scaling);
void drawCamera(CameraDefinition* camera);
private:
double _xlocation;
double _ylocation;
QString _tooltip;
};
class PreviewOsd
{
public:
PreviewOsd();
~PreviewOsd();
static PreviewOsd* getInstance(QString name);
void clearItems();
PreviewOsdItem* newItem(int width, int height);
PreviewOsdItem* newItem(QImage image);
void apply(QImage* mask, double xoffset, double yoffset, double scaling);
QString getToolTip(double x, double y, double scaling);
private:
QVector<PreviewOsdItem*> _items;
};
#endif

View file

@ -5,6 +5,7 @@
#include "dialogbaseterrainnoise.h"
#include "dialogterrainpainting.h"
#include "previewterrainshape.h"
#include "common/freeformhelper.h"
#include "tools.h"
#include "Scenery.h"
#include "textures/public.h"

View file

@ -1,9 +1,12 @@
#ifndef MAINTERRAINFORM_H
#define MAINTERRAINFORM_H
#include "editing_global.h"
#include <QWidget>
#include "common/freeformhelper.h"
#include "terrain/public.h"
class FreeFormHelper;
namespace Ui {
class MainTerrainForm;
@ -36,7 +39,7 @@ private:
TerrainDefinition* _terrain;
PreviewRenderer* _renderer_shape;
Base2dPreviewRenderer* _renderer_shape;
};
#endif // MAINTERRAINFORM_H

View file

@ -1,7 +1,7 @@
#include "previewterrainshape.h"
#include "SoftwareRenderer.h"
#include "basepreview.h"
#include "BasePreview.h"
#include "water/public.h"
PreviewTerrainShape::PreviewTerrainShape(TerrainDefinition* terrain)
@ -9,7 +9,7 @@ PreviewTerrainShape::PreviewTerrainShape(TerrainDefinition* terrain)
_terrain = terrain;
_highlight_enabled = true;
terrainAlterPreviewRenderer(renderer);
terrainAlterPreviewRenderer(this);
}
void PreviewTerrainShape::bindEvent(BasePreview* preview)
@ -23,12 +23,12 @@ void PreviewTerrainShape::bindEvent(BasePreview* preview)
void PreviewTerrainShape::updateEvent()
{
TerrainRendererClass.bind(renderer, _terrain);
TerrainRendererClass.bind(this, _terrain);
}
Color PreviewTerrainShape::getColor2D(double x, double y, double scaling) const
Color PreviewTerrainShape::getColor2D(double x, double y, double scaling)
{
return waterGetPreviewCoverage(renderer, x, y, scaling, _highlight_enabled ? 1 : 0);
return waterGetPreviewCoverage(this, x, y, scaling, _highlight_enabled ? 1 : 0);
}
void PreviewTerrainShape::toggleChangeEvent(QString key, bool value)

View file

@ -1,11 +1,12 @@
#ifndef PREVIEWTERRAINSHAPE_H
#define PREVIEWTERRAINSHAPE_H
#include "common/previewrenderer.h"
#include "renderer.h"
#include "editing_global.h"
#include "Base2dPreviewRenderer.h"
#include "terrain/public.h"
class PreviewTerrainShape : public PreviewRenderer
class PreviewTerrainShape : public Base2dPreviewRenderer
{
public:
explicit PreviewTerrainShape(TerrainDefinition* terrain);
@ -13,7 +14,7 @@ public:
protected:
virtual void bindEvent(BasePreview* preview);
virtual void updateEvent();
virtual Color getColor2D(double x, double y, double scaling) const override;
virtual Color getColor2D(double x, double y, double scaling) override;
virtual void toggleChangeEvent(QString key, bool value);
private:

View file

@ -3,7 +3,7 @@
#include "editing_global.h"
#include "common/DrawingWidget.h"
#include "DrawingWidget.h"
class QPainter;
class WidgetTerrainBaseNoisePreview : public DrawingWidget

View file

@ -1,7 +1,7 @@
#include "PreviewCumul.h"
#include "SoftwareRenderer.h"
#include "basepreview.h"
#include "BasePreview.h"
#include "textures/tex_preview.h"
void PreviewCumul::setTextures(TexturesDefinition* textures)
@ -28,7 +28,7 @@ void PreviewCumul::updateEvent()
{
if (textures)
{
TexturesPreviewCumul_bind(renderer, textures);
TexturesPreviewCumul_bind(this, textures);
}
}
@ -36,7 +36,7 @@ Color PreviewCumul::getColor2D(double x, double y, double scaling)
{
if (textures)
{
return TexturesPreviewCumul_getColor(renderer, x, y, scaling, layer);
return TexturesPreviewCumul_getColor(this, x, y, scaling, layer);
}
else
{

View file

@ -1,16 +1,17 @@
#ifndef EDITING_TEXTURES_PREVIEWCUMUL_H
#define EDITING_TEXTURES_PREVIEWCUMUL_H
#include "common/previewrenderer.h"
#include "editing_global.h"
#include "Base2dPreviewRenderer.h"
class BasePreview;
class TexturesDefinition;
class PreviewCumul : public PreviewRenderer
class PreviewCumul : public Base2dPreviewRenderer
{
public:
explicit PreviewCumul():
PreviewRenderer(),textures(0){}
Base2dPreviewRenderer(),textures(0){}
void setTextures(TexturesDefinition* textures);
void setLayer(int layer);

View file

@ -1,7 +1,7 @@
#include "PreviewLayerCoverage.h"
#include "SoftwareRenderer.h"
#include "basepreview.h"
#include "BasePreview.h"
#include "textures/tex_preview.h"
void PreviewLayerCoverage::setTextures(TexturesDefinition* textures)
@ -26,7 +26,7 @@ void PreviewLayerCoverage::updateEvent()
{
if (textures)
{
TexturesPreviewLayerCoverage_bind(renderer, textures);
TexturesPreviewLayerCoverage_bind(this, textures);
}
}
@ -34,7 +34,7 @@ Color PreviewLayerCoverage::getColor2D(double x, double y, double scaling)
{
if (textures)
{
return TexturesPreviewLayerCoverage_getColor(renderer, x, y, scaling, layer);
return TexturesPreviewLayerCoverage_getColor(this, x, y, scaling, layer);
}
else
{

View file

@ -1,16 +1,17 @@
#ifndef EDITING_TEXTURES_PREVIEWLAYERCOVERAGE_H
#define EDITING_TEXTURES_PREVIEWLAYERCOVERAGE_H
#include "common/previewrenderer.h"
#include "editing_global.h"
#include "Base2dPreviewRenderer.h"
class BasePreview;
class TexturesDefinition;
class PreviewLayerCoverage : public PreviewRenderer
class PreviewLayerCoverage : public Base2dPreviewRenderer
{
public:
explicit PreviewLayerCoverage():
PreviewRenderer(),textures(0){}
Base2dPreviewRenderer(),textures(0){}
void setTextures(TexturesDefinition* textures);
void setLayer(int layer);

View file

@ -1,7 +1,7 @@
#include "PreviewLayerLook.h"
#include "SoftwareRenderer.h"
#include "basepreview.h"
#include "BasePreview.h"
#include "textures/tex_preview.h"
void PreviewLayerLook::setTextures(TexturesDefinition* textures)
@ -25,7 +25,7 @@ void PreviewLayerLook::updateEvent()
{
if (textures)
{
TexturesPreviewLayerLook_bind(renderer, textures);
TexturesPreviewLayerLook_bind(this, textures);
}
}
@ -33,7 +33,7 @@ Color PreviewLayerLook::getColor2D(double x, double y, double scaling)
{
if (textures)
{
return TexturesPreviewLayerLook_getColor(renderer, x, y, scaling, layer);
return TexturesPreviewLayerLook_getColor(this, x, y, scaling, layer);
}
else
{

View file

@ -1,16 +1,17 @@
#ifndef EDITING_TEXTURES_PREVIEWLAYERLOOK_H
#define EDITING_TEXTURES_PREVIEWLAYERLOOK_H
#include "common/previewrenderer.h"
#include "editing_global.h"
#include "Base2dPreviewRenderer.h"
class BasePreview;
class TexturesDefinition;
class PreviewLayerLook : public PreviewRenderer
class PreviewLayerLook : public Base2dPreviewRenderer
{
public:
explicit PreviewLayerLook():
PreviewRenderer(),textures(0){}
Base2dPreviewRenderer(),textures(0){}
void setTextures(TexturesDefinition* textures);
void setLayer(int layer);

View file

@ -1,7 +1,7 @@
#include "tools.h"
#include <QEvent>
#include "basepreview.h"
#include "BasePreview.h"
DialogWithPreview::DialogWithPreview(QWidget* parent) : QDialog(parent)
{

View file

@ -147,10 +147,10 @@ static inline int _checkHit(Vector3 eye, Vector3 direction, Vector3* hit, Vector
AtmosphereColorPreviewRenderer::AtmosphereColorPreviewRenderer():
heading(0.0)
{
cameraSetLocation(renderer->render_camera, Vector3(0.0, 7.0, 0.0));
cameraSetLocation(render_camera, Vector3(0.0, 7.0, 0.0));
}
Color AtmosphereColorPreviewRenderer::getColor2D(double x, double y, double) const
Color AtmosphereColorPreviewRenderer::getColor2D(double x, double y, double)
{
Vector3 eye = {0.0, 7.0, 0.0};
Vector3 direction = {x, y, -1.0};
@ -166,13 +166,13 @@ Color AtmosphereColorPreviewRenderer::getColor2D(double x, double y, double) con
normal = m4Transform(rotation, normal);
hit = m4Transform(rotation, hit);
color = renderer->applyLightingToSurface(renderer, hit, normal, &MOUNT_MATERIAL);
return renderer->atmosphere->applyAerialPerspective(renderer, hit, color).final;
color = this->applyLightingToSurface(this, hit, normal, &MOUNT_MATERIAL);
return this->atmosphere->applyAerialPerspective(this, hit, color).final;
}
else
{
direction = m4Transform(rotation, direction);
return renderer->atmosphere->getSkyColor(renderer, direction).final;
return this->atmosphere->getSkyColor(this, direction).final;
}
}

View file

@ -11,7 +11,7 @@ class AtmosphereColorPreviewRenderer:public Base2dPreviewRenderer
public:
AtmosphereColorPreviewRenderer();
virtual Color getColor2D(double x, double y, double scaling) const override;
virtual Color getColor2D(double x, double y, double scaling) override;
protected:
double heading;

View file

@ -1,18 +1,28 @@
#include "Base2dPreviewRenderer.h"
#include "Scenery.h"
#include "SoftwareRenderer.h"
Base2dPreviewRenderer::Base2dPreviewRenderer()
Base2dPreviewRenderer::Base2dPreviewRenderer():
SoftwareRenderer()
{
scenery = new Scenery();
}
Base2dPreviewRenderer::~Base2dPreviewRenderer()
{
delete scenery;
}
void Base2dPreviewRenderer::bindEvent(BasePreview*)
{
renderer = new SoftwareRenderer();
}
void Base2dPreviewRenderer::updateEvent()
{
delete renderer;
}
Color Base2dPreviewRenderer::getColor2D(double, double, double) const
Color Base2dPreviewRenderer::getColor2D(double, double, double)
{
return COLOR_BLACK;
}

View file

@ -3,22 +3,28 @@
#include "preview_global.h"
#include "SoftwareRenderer.h"
#include "tools/color.h"
class Scenery;
namespace paysages {
namespace preview {
class PREVIEWSHARED_EXPORT Base2dPreviewRenderer
class PREVIEWSHARED_EXPORT Base2dPreviewRenderer: protected SoftwareRenderer
{
public:
Base2dPreviewRenderer();
virtual ~Base2dPreviewRenderer();
virtual void bindEvent(BasePreview* preview);
virtual void updateEvent();
virtual Color getColor2D(double x, double y, double scaling) const;
virtual Color getColor2D(double x, double y, double scaling);
protected:
SoftwareRenderer* renderer;
Scenery* scenery;
};
}

View file

@ -1,4 +1,4 @@
#include "basepreview.h"
#include "BasePreview.h"
#include <QVector>
#include <QPainter>
@ -6,11 +6,15 @@
#include <QWheelEvent>
#include <QLabel>
#include <QMenu>
#include <assert.h>
#include <math.h>
#include <QThread>
#include <QMutex>
#include <cassert>
#include <cmath>
#include "tools.h"
#include "System.h"
#include "PackStream.h"
#include "Base2dPreviewRenderer.h"
#include "PreviewOsd.h"
/*************** PreviewChunk ***************/
class PreviewChunk
@ -142,9 +146,50 @@ private:
int _ysize;
};
class PreviewDrawingThread;
class PreviewDrawingManager
{
public:
PreviewDrawingManager();
void startThreads();
void stopThreads();
void addChunk(PreviewChunk* chunk);
void removeChunks(BasePreview* preview);
void updateChunks(BasePreview* preview);
void suspendChunks(BasePreview* preview);
void updateAllChunks();
void performOneThreadJob();
int chunkCount();
private:
int _thread_count;
QVector<PreviewDrawingThread*> _threads;
QVector<PreviewChunk*> _chunks;
QList<PreviewChunk*> _updateQueue;
QMutex _lock;
};
static PreviewDrawingManager* _drawing_manager = NULL;
/*************** PreviewDrawingThread ***************/
class PreviewDrawingThread : public QThread
{
public:
PreviewDrawingThread();
void askStop();
static inline void usleep(int us)
{
QThread::usleep(us);
}
protected:
void run();
private:
bool _running;
};
PreviewDrawingThread::PreviewDrawingThread() :
QThread()
{
@ -184,7 +229,7 @@ void PreviewDrawingManager::startThreads()
void PreviewDrawingManager::stopThreads()
{
logDebug(QString("[Previews] Stopping all render threads"));
qDebug("[Previews] Stopping all render threads");
for (int i = 0; i < _threads.size(); i++)
{
_threads.at(i)->askStop();
@ -226,7 +271,7 @@ void PreviewDrawingManager::removeChunks(BasePreview* preview)
}
}
logDebug(QString("[Previews] %1 chunks removed, %2 remaining").arg(removed).arg(_chunks.size()));
qDebug("[Previews] %d chunks removed, %d remaining", removed, _chunks.size());
}
void PreviewDrawingManager::suspendChunks(BasePreview* preview)
@ -270,7 +315,7 @@ void PreviewDrawingManager::updateChunks(BasePreview* preview)
void PreviewDrawingManager::updateAllChunks()
{
logDebug(QString("[Previews] Reviving all %1 preview chunks").arg(_chunks.size()));
qDebug("[Previews] Reviving all %d preview chunks", _chunks.size());
for (int i = 0; i < _chunks.size(); i++)
{
PreviewChunk* chunk;
@ -388,7 +433,7 @@ BasePreview::~BasePreview()
delete _lock_drawing;
}
void BasePreview::setRenderer(PreviewRenderer* renderer)
void BasePreview::setRenderer(Base2dPreviewRenderer* renderer)
{
_renderer = renderer;
_renderer->bindEvent(this);
@ -605,7 +650,7 @@ QColor BasePreview::getPixelColor(int x, int y)
{
colorNormalize(&col);
}
return colorToQColor(col);
return QColor::fromRgbF(col.r, col.g, col.b, col.a);
}
void BasePreview::timerEvent(QTimerEvent*)
@ -681,7 +726,7 @@ void BasePreview::resizeEvent(QResizeEvent* event)
added++;
}
}
logDebug(QString("[Previews] %1 chunks added, %2 total").arg(added).arg(_drawing_manager->chunkCount()));
qDebug("[Previews] %d chunks added, %d total", added, _drawing_manager->chunkCount());
delete image;
@ -770,7 +815,7 @@ void BasePreview::contextMenuEvent(QContextMenuEvent* event)
action->setProperty("value", i);
if (i == iter1.value().current)
{
action->setIcon(QIcon(getDataPath("images/choice_on.png")));
action->setIcon(QIcon(":/images/choice_on.png"));
action->setIconVisibleInMenu(true);
}
}
@ -793,7 +838,7 @@ void BasePreview::contextMenuEvent(QContextMenuEvent* event)
action->setProperty("value", not iter2.value().value);
if (iter2.value().value)
{
action->setIcon(QIcon(getDataPath("images/toggle_on.png")));
action->setIcon(QIcon(":/images/toggle_on.png"));
action->setIconVisibleInMenu(true);
}
}

View file

@ -1,26 +1,18 @@
#ifndef _PAYSAGES_QT_BASEPREVIEW_H_
#define _PAYSAGES_QT_BASEPREVIEW_H_
#ifndef BASEPREVIEW_H
#define BASEPREVIEW_H
#include "editing_global.h"
#include "preview_global.h"
#include <QMutex>
#include <QImage>
#include <QThread>
#include <QVector>
#include <QList>
#include <QLabel>
#include <QHash>
#include "previewosd.h"
#include "common/DrawingWidget.h"
#include "common/previewrenderer.h"
#include "DrawingWidget.h"
#include "tools/color.h"
#include <QImage>
#include <QStringList>
class QPainter;
class QMutex;
class QLabel;
namespace paysages {
namespace system {
class PackStream;
}
}
namespace preview {
class _ContextChoice
{
@ -37,8 +29,6 @@ public:
bool value;
};
class QPainter;
class BasePreview : public DrawingWidget
{
Q_OBJECT
@ -47,7 +37,7 @@ public:
BasePreview(QWidget* parent);
~BasePreview();
void setRenderer(PreviewRenderer* renderer);
void setRenderer(Base2dPreviewRenderer* renderer);
virtual void savePack(PackStream* stream);
virtual void loadPack(PackStream* stream);
@ -110,7 +100,7 @@ private:
QLabel* _info;
PreviewRenderer* _renderer;
Base2dPreviewRenderer* _renderer;
int _width;
int _height;
@ -149,50 +139,7 @@ private slots:
void choiceSelected(QAction* action);
};
/*** Private section ***/
class PreviewChunk;
class PreviewDrawingThread : public QThread
{
public:
PreviewDrawingThread();
void askStop();
static inline void usleep(int us)
{
QThread::usleep(us);
}
}
protected:
void run();
private:
bool _running;
};
class PreviewDrawingManager
{
public:
PreviewDrawingManager();
void startThreads();
void stopThreads();
void addChunk(PreviewChunk* chunk);
void removeChunks(BasePreview* preview);
void updateChunks(BasePreview* preview);
void suspendChunks(BasePreview* preview);
void updateAllChunks();
void performOneThreadJob();
int chunkCount();
private:
int _thread_count;
QVector<PreviewDrawingThread*> _threads;
QVector<PreviewChunk*> _chunks;
QList<PreviewChunk*> _updateQueue;
QMutex _lock;
};
#endif
#endif // BASEPREVIEW_H

View file

@ -1,11 +1,16 @@
#ifndef DRAWINGWIDGET_H
#define DRAWINGWIDGET_H
#include "preview_global.h"
#include <QWidget>
class QPaintEvent;
class QPainter;
namespace paysages {
namespace preview {
class DrawingWidget : public QWidget
{
Q_OBJECT
@ -17,5 +22,8 @@ private:
virtual void paintEvent(QPaintEvent* event);
};
}
}
#endif /* DRAWINGWIDGET_H */

View file

@ -1,59 +1,12 @@
#include "previewosd.h"
#include "PreviewOsd.h"
#include <QImage>
#include <QHash>
#include <QPainter>
#include <math.h>
#include "PreviewOsdItem.h"
static QHash<QString, PreviewOsd*> _instances;
/*************** PreviewOsdItem ***************/
PreviewOsdItem::PreviewOsdItem(int width, int height) : QImage(width, height, QImage::Format_ARGB32)
{
_xlocation = 0.0;
_ylocation = 0.0;
fill(0x00000000);
}
void PreviewOsdItem::setLocation(double x, double y)
{
_xlocation = x;
_ylocation = y;
}
void PreviewOsdItem::drawCamera(CameraDefinition* camera)
{
Vector3 camera_location = cameraGetLocation(camera);
VectorSpherical camera_direction = cameraGetDirectionSpherical(camera);
int w2 = width() / 2;
int h2 = height() / 2;
_xlocation = camera_location.x;
_ylocation = camera_location.z;
QPainter painter(this);
painter.setPen(QPen(Qt::red, 2));
painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing, true);
painter.drawLine(w2, h2, w2 + w2 * cos(camera_direction.phi - M_PI_4), h2 - h2 * sin(camera_direction.phi - M_PI_4));
painter.drawLine(w2, h2, w2 + w2 * cos(camera_direction.phi + M_PI_4), h2 - h2 * sin(camera_direction.phi + M_PI_4));
}
void PreviewOsdItem::setToolTip(QString text)
{
_tooltip = text;
}
QString PreviewOsdItem::getToolTip(double x, double y, double scaling)
{
if (_tooltip.isEmpty() or (x > _xlocation - (width() / 2) * scaling and x < _xlocation + (width() / 2) * scaling and y > _ylocation - (height() / 2) * scaling and y < _ylocation + (height() / 2) * scaling))
{
return _tooltip;
}
else
{
return QString();
}
}
/*************** PreviewOsd ***************/
PreviewOsd::PreviewOsd()
{
@ -97,7 +50,7 @@ PreviewOsdItem* PreviewOsd::newItem(int width, int height)
return item;
}
PreviewOsdItem* PreviewOsd::newItem(QImage image)
PreviewOsdItem* PreviewOsd::newItem(const QImage &image)
{
PreviewOsdItem* item = newItem(image.width(), image.height());
QPainter painter(item);

View file

@ -0,0 +1,33 @@
#ifndef PREVIEWOSD_H
#define PREVIEWOSD_H
#include "preview_global.h"
#include <QVector>
class QImage;
namespace paysages {
namespace preview {
class PreviewOsd
{
public:
PreviewOsd();
~PreviewOsd();
static PreviewOsd* getInstance(QString name);
void clearItems();
PreviewOsdItem* newItem(int width, int height);
PreviewOsdItem* newItem(const QImage& image);
void apply(QImage* mask, double xoffset, double yoffset, double scaling);
QString getToolTip(double x, double y, double scaling);
private:
QVector<PreviewOsdItem*> _items;
};
}
}
#endif

View file

@ -0,0 +1,52 @@
#include "PreviewOsdItem.h"
#include <QPainter>
#include "Vector3.h"
#include "camera.h"
PreviewOsdItem::PreviewOsdItem(int width, int height) : QImage(width, height, QImage::Format_ARGB32)
{
_xlocation = 0.0;
_ylocation = 0.0;
fill(0x00000000);
}
void PreviewOsdItem::setLocation(double x, double y)
{
_xlocation = x;
_ylocation = y;
}
void PreviewOsdItem::drawCamera(CameraDefinition* camera)
{
Vector3 camera_location = cameraGetLocation(camera);
VectorSpherical camera_direction = cameraGetDirectionSpherical(camera);
int w2 = width() / 2;
int h2 = height() / 2;
_xlocation = camera_location.x;
_ylocation = camera_location.z;
QPainter painter(this);
painter.setPen(QPen(Qt::red, 2));
painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing, true);
painter.drawLine(w2, h2, w2 + w2 * cos(camera_direction.phi - M_PI_4), h2 - h2 * sin(camera_direction.phi - M_PI_4));
painter.drawLine(w2, h2, w2 + w2 * cos(camera_direction.phi + M_PI_4), h2 - h2 * sin(camera_direction.phi + M_PI_4));
}
void PreviewOsdItem::setToolTip(QString text)
{
_tooltip = text;
}
QString PreviewOsdItem::getToolTip(double x, double y, double scaling)
{
if (_tooltip.isEmpty() or (x > _xlocation - (width() / 2) * scaling and x < _xlocation + (width() / 2) * scaling and y > _ylocation - (height() / 2) * scaling and y < _ylocation + (height() / 2) * scaling))
{
return _tooltip;
}
else
{
return QString();
}
}

View file

@ -0,0 +1,36 @@
#ifndef PREVIEWOSDITEM_H
#define PREVIEWOSDITEM_H
#include "preview_global.h"
#include <QImage>
class CameraDefinition;
namespace paysages {
namespace preview {
class PreviewOsdItem:public QImage
{
public:
PreviewOsdItem(int width, int height);
void setLocation(double x, double y);
inline double xlocation() {return _xlocation;}
inline double ylocation() {return _ylocation;}
void setToolTip(QString text);
QString getToolTip(double x, double y, double scaling);
void drawCamera(CameraDefinition* camera);
private:
double _xlocation;
double _ylocation;
QString _tooltip;
};
}
}
#endif // PREVIEWOSDITEM_H

View file

@ -6,17 +6,26 @@
TARGET = paysages_render_preview
TEMPLATE = lib
QT += gui widgets
DEFINES += PREVIEW_LIBRARY
include(../../common.pri)
SOURCES += Base2dPreviewRenderer.cpp \
AtmosphereColorPreviewRenderer.cpp
AtmosphereColorPreviewRenderer.cpp \
BasePreview.cpp \
PreviewOsd.cpp \
DrawingWidget.cpp \
PreviewOsdItem.cpp
HEADERS += Base2dPreviewRenderer.h\
preview_global.h \
AtmosphereColorPreviewRenderer.h
AtmosphereColorPreviewRenderer.h \
BasePreview.h \
PreviewOsd.h \
DrawingWidget.h \
PreviewOsdItem.h
unix:!symbian {
maemo5 {

View file

@ -11,8 +11,14 @@
#include "software_global.h"
// TEMP
class Scenery;
namespace paysages {
namespace preview {
class PreviewOsd;
class PreviewOsdItem;
class BasePreview;
class Base2dPreviewRenderer;
class AtmosphereColorPreviewRenderer;
}