#include <wx/wxprec.h>
#include <wx/wx.h>
#include "../include/wxdragon.h"
#include "wxd_utils.h"
#include <wx/display.h>
namespace {
bool
is_valid_index(unsigned int index)
{
return index < wxDisplay::GetCount();
}
}
extern "C" {
WXD_EXPORTED unsigned int
wxd_Display_GetCount(void)
{
return wxDisplay::GetCount();
}
WXD_EXPORTED int
wxd_Display_GetFromPoint(wxd_Point pt)
{
return wxDisplay::GetFromPoint(wxPoint(pt.x, pt.y));
}
WXD_EXPORTED int
wxd_Display_GetFromRect(wxd_Rect rect)
{
return wxDisplay::GetFromRect(wxRect(rect.x, rect.y, rect.width, rect.height));
}
WXD_EXPORTED int
wxd_Display_GetFromWindow(wxd_Window_t* window)
{
return wxDisplay::GetFromWindow(reinterpret_cast<const wxWindow*>(window));
}
WXD_EXPORTED bool
wxd_Display_IsOk(unsigned int index)
{
return is_valid_index(index) && wxDisplay(index).IsOk();
}
WXD_EXPORTED wxd_Rect
wxd_Display_GetGeometry(unsigned int index)
{
if (!is_valid_index(index))
return { 0, 0, 0, 0 };
wxRect rect = wxDisplay(index).GetGeometry();
return { rect.x, rect.y, rect.width, rect.height };
}
WXD_EXPORTED wxd_Rect
wxd_Display_GetClientArea(unsigned int index)
{
if (!is_valid_index(index))
return { 0, 0, 0, 0 };
wxRect rect = wxDisplay(index).GetClientArea();
return { rect.x, rect.y, rect.width, rect.height };
}
WXD_EXPORTED int
wxd_Display_GetDepth(unsigned int index)
{
if (!is_valid_index(index))
return 0;
return wxDisplay(index).GetDepth();
}
WXD_EXPORTED wxd_Size
wxd_Display_GetPPI(unsigned int index)
{
if (!is_valid_index(index))
return { 0, 0 };
wxSize ppi = wxDisplay(index).GetPPI();
return { ppi.GetWidth(), ppi.GetHeight() };
}
WXD_EXPORTED double
wxd_Display_GetScaleFactor(unsigned int index)
{
if (!is_valid_index(index))
return 1.0;
return wxDisplay(index).GetScaleFactor();
}
WXD_EXPORTED int
wxd_Display_GetName(unsigned int index, char* buffer, size_t buffer_len)
{
if (!is_valid_index(index))
return (int)wxd_cpp_utils::copy_wxstring_to_buffer(wxString(), buffer, buffer_len);
return (int)wxd_cpp_utils::copy_wxstring_to_buffer(wxDisplay(index).GetName(), buffer, buffer_len);
}
WXD_EXPORTED bool
wxd_Display_IsPrimary(unsigned int index)
{
if (!is_valid_index(index))
return false;
return wxDisplay(index).IsPrimary();
}
WXD_EXPORTED void
wxd_Display_InvalidateCache(void)
{
wxDisplay::InvalidateCache();
}
}