56 lines
1.9 KiB
C++
56 lines
1.9 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <iostream>
|
|
#include <memory>
|
|
#include <utility>
|
|
#include <vector>
|
|
#include "../base/Assert.h"
|
|
#include "../base/Color.h"
|
|
#include "../base/Export.h"
|
|
#include "../base/Geometry.h"
|
|
namespace renderive {
|
|
std::vector<Pixel> get_turbo_color_gradient();
|
|
}
|
|
#define LIB_DECL RENDERIVE_API
|
|
#define PROP(Type, Name) \
|
|
Type Name(); \
|
|
void set_##Name(Type);
|
|
#define RENDERIVE_DEFINE_STATE_PROP(Owner, State, Type, Field) \
|
|
Type Owner::Field() { \
|
|
return d()->edit_state_value(&State::Field); \
|
|
} \
|
|
void Owner::set_##Field(Type value) { \
|
|
d()->set_state_value(&State::Field, std::move(value)); \
|
|
}
|
|
#define RENDERIVE_DEFINE_WEAK_STATE_PROP(Owner, State, Pointee, Field) \
|
|
std::shared_ptr<Pointee> Owner::Field() { \
|
|
return d()->edit_state_value(&State::Field).lock(); \
|
|
} \
|
|
void Owner::set_##Field(std::shared_ptr<Pointee> value) { \
|
|
d()->set_state_value(&State::Field, std::weak_ptr<Pointee>(value)); \
|
|
}
|
|
#define PROP_B(TYPE, FIELD) \
|
|
public: \
|
|
Builder& set_##FIELD(TYPE value) { \
|
|
this->FIELD = std::move(value); \
|
|
return *this; \
|
|
}
|
|
#define PROP_BT(TYPE, FIELD) \
|
|
public: \
|
|
That& set_##FIELD(TYPE value) { \
|
|
static_cast<That*>(this)->FIELD = std::move(value); \
|
|
return *static_cast<That*>(this); \
|
|
}
|
|
#define PROP_R(TYPE, FIELD) sc->FIELD = this->FIELD;
|
|
#define PROP_RT(TYPE, FIELD) sc->FIELD = static_cast<That*>(this)->FIELD;
|
|
#define SETTER(TYPE, FIELD, DEFAULT) \
|
|
\
|
|
TYPE FIELD = DEFAULT; \
|
|
public: \
|
|
Builder& set_##FIELD(TYPE value) { \
|
|
this->FIELD = std::move(value); \
|
|
return *this; \
|
|
}
|
|
#undef min
|
|
#undef max
|