Files
Renderive/Core/architecture/global.h
T
2026-08-01 20:09:45 +08:00

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