1 #pragma once
2 #include <Windows.h>
3 
4 namespace litehtml
5 {
6 	class win32_container : public document_container
7 	{
8 	public:
9 		typedef std::map<std::wstring, litehtml::uint_ptr>	images_map;
10 
11 		protected:
12 
13 		images_map					m_images;
14 		litehtml::position::vector	m_clips;
15 		HRGN						m_hClipRgn;
16 
17 	public:
18 		win32_container();
19 		virtual ~win32_container();
20 
21 		// litehtml::document_container members
22 		virtual uint_ptr	create_font(const wchar_t* faceName, int size, int weight, font_style italic, unsigned int decoration);
23 		virtual void		delete_font(uint_ptr hFont);
24 		virtual int			line_height(uint_ptr hdc, uint_ptr hFont);
25 		virtual int			get_text_base_line(uint_ptr hdc, uint_ptr hFont);
26 		virtual int			text_width(uint_ptr hdc, const wchar_t* text, uint_ptr hFont);
27 		virtual void		draw_text(uint_ptr hdc, const wchar_t* text, uint_ptr hFont, litehtml::web_color color, const litehtml::position& pos);
28 		virtual void		fill_rect(uint_ptr hdc, const litehtml::position& pos, const litehtml::web_color color, const litehtml::css_border_radius& radius);
29 		virtual uint_ptr	get_temp_dc();
30 		virtual void		release_temp_dc(uint_ptr hdc);
31 		virtual int			pt_to_px(int pt);
32 		virtual void		draw_list_marker(uint_ptr hdc, const litehtml::list_marker& marker);
33 		virtual void		load_image(const wchar_t* src, const wchar_t* baseurl, bool redraw_on_ready);
34 		virtual void		get_image_size(const wchar_t* src, const wchar_t* baseurl, litehtml::size& sz);
35 		virtual void		draw_image(uint_ptr hdc, const wchar_t* src, const wchar_t* baseurl, const litehtml::position& pos);
36 		virtual void		draw_background(uint_ptr hdc,
37 											const wchar_t* image,
38 											const wchar_t* baseurl,
39 											const litehtml::position& draw_pos,
40 											const litehtml::css_position& bg_pos,
41 											litehtml::background_repeat repeat,
42 											litehtml::background_attachment attachment);
43 
44 		virtual int			get_default_font_size() const;
45 		virtual	wchar_t		toupper(const wchar_t c);
46 		virtual	wchar_t		tolower(const wchar_t c);
47 		virtual void		set_clip(const litehtml::position& pos, bool valid_x, bool valid_y);
48 		virtual void		del_clip();
49 
50 	protected:
51 		void				apply_clip(HDC hdc);
52 		void				release_clip(HDC hdc);
53 		void				clear_images();
54 		virtual void		make_url( LPCWSTR url, LPCWSTR basepath, std::wstring& out ) = 0;
55 		virtual uint_ptr	get_image(LPCWSTR url) = 0;
56 		virtual void		free_image(uint_ptr img) = 0;
57 		virtual void		get_client_rect(litehtml::position& client) = 0;
58 		virtual void		draw_ellipse(HDC hdc, int x, int y, int width, int height, const web_color& color, int line_width) = 0;
59 		virtual void		fill_ellipse(HDC hdc, int x, int y, int width, int height, const web_color& color) = 0;
60 		virtual void		fill_rect(HDC hdc, int x, int y, int width, int height, const web_color& color, const litehtml::css_border_radius& radius) = 0;
61 		virtual void		get_img_size(litehtml::uint_ptr img, litehtml::size& sz) = 0;
62 		virtual void		draw_img(HDC hdc, litehtml::uint_ptr img, const litehtml::position& pos) = 0;
63 		virtual void		draw_img_bg(HDC hdc, litehtml::uint_ptr img, const litehtml::position& draw_pos, const litehtml::position& pos, litehtml::background_repeat repeat, litehtml::background_attachment attachment) = 0;
64 	};
65 }