#include <wx/wxprec.h>
#include <wx/wx.h>
#include "../include/wxdragon.h"
#include "wxd_utils.h"
#include <wx/colordlg.h>
#include <wx/colour.h>
static inline wxColour
to_wx(wxd_Colour_t c_col)
{
return wxColour(c_col.r, c_col.g, c_col.b, c_col.a);
}
static inline wxd_Colour_t
to_wxd(wxColour wx_col)
{
wxd_Colour_t c_col;
c_col.r = wx_col.Red();
c_col.g = wx_col.Green();
c_col.b = wx_col.Blue();
c_col.a = wx_col.Alpha();
return c_col;
}
extern "C" {
wxd_ColourData_t*
wxd_ColourData_Create(void)
{
wxColourData* data = new wxColourData();
return reinterpret_cast<wxd_ColourData_t*>(data);
}
void
wxd_ColourData_SetColour(wxd_ColourData_t* self, wxd_Colour_t colour)
{
if (!self)
return;
wxColourData* data = reinterpret_cast<wxColourData*>(self);
data->SetColour(to_wx(colour));
}
wxd_Colour_t
wxd_ColourData_GetColour(wxd_ColourData_t* self)
{
if (!self) {
return { 0, 0, 0, 0 };
}
wxColourData* data = reinterpret_cast<wxColourData*>(self);
return to_wxd(data->GetColour());
}
WXD_EXPORTED void
wxd_ColourData_SetChooseFull(wxd_ColourData_t* self, bool flag)
{
wxColourData* data = reinterpret_cast<wxColourData*>(self);
if (data) data->SetChooseFull(flag);
}
WXD_EXPORTED bool
wxd_ColourData_GetChooseFull(wxd_ColourData_t* self)
{
wxColourData* data = reinterpret_cast<wxColourData*>(self);
if (!data) return false;
return data->GetChooseFull();
}
WXD_EXPORTED void
wxd_ColourData_SetCustomColour(wxd_ColourData_t* self, int i, wxd_Colour_t colour)
{
wxColourData* data = reinterpret_cast<wxColourData*>(self);
if (data) data->SetCustomColour(i, to_wx(colour));
}
WXD_EXPORTED wxd_Colour_t
wxd_ColourData_GetCustomColour(wxd_ColourData_t* self, int i)
{
wxColourData* data = reinterpret_cast<wxColourData*>(self);
if (!data) return wxd_Colour_t{0, 0, 0, 0};
wxColour c = data->GetCustomColour(i);
return to_wxd(c);
}
void
wxd_ColourData_Destroy(wxd_ColourData_t* self)
{
if (!self)
return;
wxColourData* data = reinterpret_cast<wxColourData*>(self);
delete data;
}
wxd_ColourDialog_t*
wxd_ColourDialog_Create(wxd_Window_t* parent, const char* title, wxd_ColourData_t* data)
{
wxWindow* parentWin = reinterpret_cast<wxWindow*>(parent);
wxColourData* colourData = nullptr;
if (data) {
colourData = reinterpret_cast<wxColourData*>(data);
}
else {
colourData = new wxColourData();
}
wxColourDialog* dialog = new wxColourDialog(parentWin, colourData);
if (title && *title) {
dialog->SetTitle(WXD_STR_TO_WX_STRING_UTF8_NULL_OK(title));
}
return reinterpret_cast<wxd_ColourDialog_t*>(dialog);
}
wxd_ColourData_t*
wxd_ColourDialog_GetColourData(wxd_ColourDialog_t* self)
{
if (!self)
return nullptr;
wxColourDialog* dialog = reinterpret_cast<wxColourDialog*>(self);
return reinterpret_cast<wxd_ColourData_t*>(&dialog->GetColourData());
}
}