mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 14:53:52 +00:00
Emscripten port
This commit is contained in:
@@ -14,7 +14,79 @@ class PLPasStr;
|
||||
struct Control;
|
||||
struct Dialog;
|
||||
|
||||
#if GP_ASYNCIFY_PARANOID
|
||||
namespace DialogFilterFuncs
|
||||
{
|
||||
enum DialogFilterFunc
|
||||
{
|
||||
kBlowerFilter,
|
||||
kFurnitureFilter,
|
||||
kCustPictFilter,
|
||||
kSwitchFilter,
|
||||
kTriggerFilter,
|
||||
kApplianceFilter,
|
||||
kMicrowaveFilter,
|
||||
kGreaseFilter,
|
||||
kInvisBonusFilter,
|
||||
kTransFilter,
|
||||
kEnemyFilter,
|
||||
kFlowerFilter,
|
||||
kLightFilter,
|
||||
kGoToFilter,
|
||||
kRoomFilter,
|
||||
kOriginalArtFilter,
|
||||
|
||||
kAboutFilter,
|
||||
kLicenseReaderFilter,
|
||||
kLoadFilter,
|
||||
kAboutFrameworkFilter,
|
||||
kBrainsFilter,
|
||||
kNameFilter,
|
||||
kBannerFilter,
|
||||
kControlFilter,
|
||||
kSoundFilter,
|
||||
kHouseFilter,
|
||||
kDisplayFilter,
|
||||
kPrefsFilter,
|
||||
|
||||
kFileBrowserUIImpl_PopUpAlertUIFilter,
|
||||
kFileBrowserUIImpl_FileBrowserUIFilter,
|
||||
kDialogManagerImpl_AlertFilter,
|
||||
};
|
||||
|
||||
template<int TFilterFuncID>
|
||||
int16_t InvokeWrapperThunk(void *context, Dialog *dialog, const TimeTaggedVOSEvent *evt);
|
||||
|
||||
template<DialogFilterFunc TFilterFuncID>
|
||||
class InvokeWrapper
|
||||
{
|
||||
public:
|
||||
inline int16_t operator()(void *context, Dialog *dialog, const TimeTaggedVOSEvent *evt) const
|
||||
{
|
||||
return InvokeWrapperThunk<TFilterFuncID>(context, dialog, evt);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
typedef DialogFilterFuncs::DialogFilterFunc DialogFilterFunc_t;
|
||||
|
||||
#define PL_FILTER_FUNC(f) DialogFilterFuncs::k##f, DialogFilterFuncs::InvokeWrapper<DialogFilterFuncs::k##f>()
|
||||
#define PL_IMPLEMENT_FILTER_FUNCTION_THUNK(f, impl) \
|
||||
template<> \
|
||||
int16_t DialogFilterFuncs::InvokeWrapperThunk<DialogFilterFuncs::k##f>(void *context, Dialog *dialog, const TimeTaggedVOSEvent *evt) \
|
||||
{ \
|
||||
return impl(context, dialog, evt); \
|
||||
}
|
||||
|
||||
#define PL_IMPLEMENT_FILTER_FUNCTION(f) PL_IMPLEMENT_FILTER_FUNCTION_THUNK(f, f)
|
||||
|
||||
#else
|
||||
typedef int16_t(*DialogFilterFunc_t)(void *context, Dialog *dialog, const TimeTaggedVOSEvent *evt);
|
||||
#define PL_FILTER_FUNC(f) f
|
||||
#define PL_IMPLEMENT_FILTER_FUNCTION_THUNK(f, impl)
|
||||
#define PL_IMPLEMENT_FILTER_FUNCTION(f)
|
||||
|
||||
#endif
|
||||
|
||||
struct DialogTextSubstitutions
|
||||
{
|
||||
@@ -39,7 +111,12 @@ struct Dialog
|
||||
|
||||
virtual void SetItemVisibility(unsigned int itemIndex, bool isVisible) = 0;
|
||||
|
||||
#if GP_ASYNCIFY_PARANOID
|
||||
template<class TFilterFunc>
|
||||
int16_t ExecuteModal(void *captureContext, DialogFilterFunc_t filterFuncID, const TFilterFunc &filterFunc);
|
||||
#else
|
||||
virtual int16_t ExecuteModal(void *captureContext, DialogFilterFunc_t filterFunc) = 0;
|
||||
#endif
|
||||
|
||||
virtual bool ReplaceWidget(unsigned int itemIndex, PortabilityLayer::Widget *widget) = 0;
|
||||
};
|
||||
@@ -56,7 +133,5 @@ void SetDialogItemText(THandle<Control> handle, const PLPasStr &str);
|
||||
|
||||
void SelectDialogItemText(Dialog *dialog, int item, int firstSelChar, int lastSelCharExclusive);
|
||||
|
||||
void ModalDialog(ModalFilterUPP filter, short *item);
|
||||
|
||||
void ShowDialogItem(Dialog *dialog, int item);
|
||||
void HideDialogItem(Dialog *dialog, int item);
|
||||
|
Reference in New Issue
Block a user