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