diff --git a/core/src/datatypes/color3.cpp b/core/src/datatypes/color3.cpp index 2e0132b..8117802 100644 --- a/core/src/datatypes/color3.cpp +++ b/core/src/datatypes/color3.cpp @@ -13,7 +13,7 @@ const Data::TypeInfo Data::Color3::TYPE = { const Data::TypeInfo& Data::Color3::GetType() const { return Data::Color3::TYPE; }; const Data::String Data::Color3::ToString() const { - return std::to_string(r) + ", " + std::to_string(g) + ", " + std::to_string(b); + return std::to_string(int(r*256)) + ", " + std::to_string(int(g*256)) + ", " + std::to_string(int(b*256)); } Data::Color3::operator glm::vec3() const { return glm::vec3(r, g, b); }; diff --git a/editor/panes/propertiesview.cpp b/editor/panes/propertiesview.cpp index 86bc93c..107e7a4 100644 --- a/editor/panes/propertiesview.cpp +++ b/editor/panes/propertiesview.cpp @@ -1,10 +1,12 @@ #include "propertiesview.h" #include "datatypes/base.h" +#include "datatypes/color3.h" #include "datatypes/meta.h" #include "objects/base/member.h" #include #include #include +#include #include #include #include @@ -17,6 +19,7 @@ #include #include #include +#include class CustomItemDelegate : public QStyledItemDelegate { PropertiesView* view; @@ -57,6 +60,7 @@ public: if (meta.flags & PROP_UNIT_FLOAT) { spinBox->setMinimum(0); spinBox->setMaximum(1); + spinBox->setSingleStep(0.1); } return spinBox; @@ -70,6 +74,13 @@ public: lineEdit->setText(QString::fromStdString(currentValue.get())); return lineEdit; + } else if (meta.type == &Data::Color3::TYPE) { + QColorDialog* colorDialog = new QColorDialog(parent->window()); + + Data::Color3 color = currentValue.get(); + colorDialog->setCurrentColor(QColor::fromRgbF(color.R(), color.G(), color.B())); + + return colorDialog; } else if (meta.type->fromString) { QLineEdit* lineEdit = new QLineEdit(parent); lineEdit->setText(QString::fromStdString(currentValue.ToString())); @@ -106,6 +117,11 @@ public: QLineEdit* lineEdit = dynamic_cast(editor); lineEdit->setText(QString::fromStdString((std::string)currentValue.get())); + } else if (meta.type == &Data::Color3::TYPE) { + QColorDialog* colorDialog = dynamic_cast(editor); + + Data::Color3 color = currentValue.get(); + colorDialog->setCurrentColor(QColor::fromRgbF(color.R(), color.G(), color.B())); } else if (meta.type->fromString) { QLineEdit* lineEdit = dynamic_cast(editor); @@ -137,6 +153,14 @@ public: inst->SetPropertyValue(propertyName, Data::String(lineEdit->text().toStdString())); model->setData(index, lineEdit->text()); + } else if (meta.type == &Data::Color3::TYPE) { + QColorDialog* colorDialog = dynamic_cast(editor); + + QColor color = colorDialog->currentColor(); + Data::Color3 color3(color.redF(), color.greenF(), color.blueF()); + inst->SetPropertyValue(propertyName, color3); + model->setData(index, QString::fromStdString(color3.ToString()), Qt::DisplayRole); + model->setData(index, color, Qt::DecorationRole); } else if (meta.type->fromString) { QLineEdit* lineEdit = dynamic_cast(editor); @@ -252,11 +276,15 @@ void PropertiesView::setSelected(std::optional instance) { if (meta.type == &Data::Bool::TYPE) { item->setCheckState(1, (bool)currentValue.get() ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); + } else if (meta.type == &Data::Color3::TYPE) { + Data::Color3 color = currentValue.get(); + item->setData(1, Qt::DecorationRole, QColor::fromRgbF(color.R(), color.G(), color.B())); + item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); } else { item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); } - if (!meta.type->fromString || meta.flags & PROP_READONLY) { + if (meta.type != &Data::Color3::TYPE && (!meta.type->fromString || meta.flags & PROP_READONLY)) { item->setDisabled(true); }