#include "c4d_gui.h"
#include "customgui_fontchooser.h"

static FontchooserLib *lib_FontControl = nullptr;


static FontchooserLib *CheckLib(Int32 offset)
{
	return (FontchooserLib*)CheckLib(CUSTOMGUI_FONTCHOOSER, offset,(C4DLibrary**)&lib_FontControl);
}

#define FontCall(b) 			FontchooserLib *lib = CheckLib(LIBOFFSET(FontchooserLib, b)); \
															if (!lib || !lib->b) return; \
															(((iFontData*)this)->*lib->b)

#define FontCallR(a,b) 		FontchooserLib *lib = CheckLib(LIBOFFSET(FontchooserLib, b)); \
															if (!lib || !lib->b) return a; \
															return (((iFontData*)this)->*lib->b)

#define FontGuiCall(b) 		FontchooserLib *lib = CheckLib(LIBOFFSET(FontchooserLib, b)); \
															if (!lib || !lib->b) return; \
															(((iFontChooserGUI*)this)->*lib->b)

#define FontGuiCallR(a,b) FontchooserLib *lib = CheckLib(LIBOFFSET(FontchooserLib, b)); \
															if (!lib || !lib->b) return a; \
															return (((iFontChooserGUI*)this)->*lib->b)


BaseContainer FontchooserCustomGui::GetFont() { FontGuiCallR(BaseContainer(), GetFont)(); }
void FontchooserCustomGui::SetFont(BaseContainer* bc) { FontGuiCall(SetFont)(bc); }

BaseContainer FontData::GetFont() const { FontCallR(BaseContainer(), GetFontData)(); }
void FontData::SetFont(BaseContainer *bc) { FontCall(SetFontData)(bc); }
