1 #ifndef MERCTEXTBOX_H 2 #define MERCTEXTBOX_H 3 4 #include "AutoObj.h" 5 #include "JA2Types.h" 6 7 #include <string_theory/string> 8 9 10 enum MercPopupBoxFlags 11 { 12 MERC_POPUP_PREPARE_FLAGS_NONE = 0, 13 MERC_POPUP_PREPARE_FLAGS_TRANS_BACK = 1U << 0, 14 MERC_POPUP_PREPARE_FLAGS_STOPICON = 1U << 1, 15 MERC_POPUP_PREPARE_FLAGS_SKULLICON = 1U << 2 16 }; 17 18 void InitMercPopupBox(void); 19 20 21 enum MercPopUpBackground 22 { 23 BASIC_MERC_POPUP_BACKGROUND = 0, 24 WHITE_MERC_POPUP_BACKGROUND, 25 GREY_MERC_POPUP_BACKGROUND, 26 DIALOG_MERC_POPUP_BACKGROUND, 27 LAPTOP_POPUP_BACKGROUND, 28 IMP_POPUP_BACKGROUND 29 }; 30 31 enum MercPopUpBorder 32 { 33 BASIC_MERC_POPUP_BORDER = 0, 34 RED_MERC_POPUP_BORDER, 35 BLUE_MERC_POPUP_BORDER, 36 DIALOG_MERC_POPUP_BORDER, 37 LAPTOP_POP_BORDER 38 }; 39 40 41 // create a pop up box if needed, return null pointer on failure 42 MercPopUpBox* PrepareMercPopupBox(MercPopUpBox* box, MercPopUpBackground ubBackgroundIndex, MercPopUpBorder ubBorderIndex, const ST::utf32_buffer& codepoints, UINT16 usWidth, UINT16 usMarginX, UINT16 usMarginTopY, UINT16 usMarginBottomY, UINT16* pActualWidth, UINT16* pActualHeight, MercPopupBoxFlags flags = MERC_POPUP_PREPARE_FLAGS_NONE); 43 inline MercPopUpBox* PrepareMercPopupBox(MercPopUpBox* box, MercPopUpBackground ubBackgroundIndex, MercPopUpBorder ubBorderIndex, const ST::string& str, UINT16 usWidth, UINT16 usMarginX, UINT16 usMarginTopY, UINT16 usMarginBottomY, UINT16* pActualWidth, UINT16* pActualHeight, MercPopupBoxFlags flags = MERC_POPUP_PREPARE_FLAGS_NONE) 44 { 45 return PrepareMercPopupBox(box, ubBackgroundIndex, ubBorderIndex, str.to_utf32(), usWidth, usMarginX, usMarginTopY, usMarginBottomY, pActualWidth, pActualHeight, flags); 46 } 47 48 void RemoveMercPopupBox(MercPopUpBox*); 49 50 void RenderMercPopUpBox(MercPopUpBox const*, INT16 sDestX, INT16 sDestY, SGPVSurface* buffer); 51 52 typedef SGP::AutoObj<MercPopUpBox, RemoveMercPopupBox> AutoMercPopUpBox; 53 54 #endif 55