Cogs.Core
GuiContainer.h
1#pragma once
2
3#include "Resources/Resources.h"
4
5#include "Platform/Instrumentation.h"
6
7#include "Foundation/ComponentModel/Component.h"
8
9#include "litehtml.h"
10
11#include <glm/glm.hpp>
12
13namespace Cogs
14{
15 namespace ComponentModel
16 {
17 class Entity;
18 }
19
20 namespace Core
21 {
22 std::shared_ptr<litehtml::element> findElement(const std::shared_ptr<litehtml::element> & e, const StringView & id);
23
24 class InspectorGuiRenderer;
25 struct RenderTaskContext;
26
28 {
29 litehtml::uint_ptr create_font(const litehtml::tchar_t * faceName, int size, int weight, litehtml::font_style italic, unsigned int decoration, litehtml::font_metrics * fm) override;
30 void delete_font(litehtml::uint_ptr hFont) override;
31
32 int pt_to_px(int pt) override;
33 int text_width(const litehtml::tchar_t * text, litehtml::uint_ptr hFont) override;
34
35 int get_default_font_size() const override;
36 const litehtml::tchar_t * get_default_font_name() const override;
37
38 void load_image(const litehtml::tchar_t * src, const litehtml::tchar_t * baseurl, bool redraw_on_ready) override;
39 void get_image_size(const litehtml::tchar_t * src, const litehtml::tchar_t * baseurl, litehtml::size & sz) override;
40
41 void draw_text(litehtml::uint_ptr hdc, const litehtml::tchar_t * text, litehtml::uint_ptr hFont, litehtml::web_color color, const litehtml::position & pos) override;
42 void draw_background(litehtml::uint_ptr hdc, const litehtml::background_paint & bg) override;
43 void draw_borders(litehtml::uint_ptr hdc, const litehtml::borders & borders, const litehtml::position & draw_pos, bool root) override;
44 void draw_list_marker(litehtml::uint_ptr hdc, const litehtml::list_marker & marker) override;
45
46 void set_caption(const litehtml::tchar_t * /*caption*/) override {}
47 void set_base_url(const litehtml::tchar_t * /*base_url*/) override {}
48 void link(const std::shared_ptr<litehtml::document> & /*doc*/, const litehtml::element::ptr & /*el*/) override {}
49
50 void on_load(const std::shared_ptr<litehtml::document> & document) override;
51 void on_anchor_click(const litehtml::tchar_t * url, const litehtml::element::ptr & el) override;
52 void on_mouse_enter(const litehtml::element::ptr & el) override;
53 void on_mouse_move(const litehtml::element::ptr & el, int x, int y) override;
54 void on_mouse_leave(const litehtml::element::ptr & el) override;
55 void on_click(const litehtml::element::ptr & el) override;
56
57 void set_cursor(const litehtml::tchar_t * /*cursor*/) override {}
58 void transform_text(litehtml::tstring & /*text*/, litehtml::text_transform /*tt*/) override {}
59 void import_css(litehtml::tstring & text, const litehtml::tstring & url, litehtml::tstring & baseurl) override;
60
61 void set_clip(const litehtml::position & /*pos*/, const litehtml::border_radiuses & /*bdr_radius*/, bool /*valid_x*/, bool /*valid_y*/) override {}
62 void del_clip() override {}
63
64 void get_client_rect(litehtml::position & client) const override;
65
66 std::shared_ptr<litehtml::element> create_element(const litehtml::tchar_t * tag_name, const litehtml::string_map & attributes, const std::shared_ptr<litehtml::document>& doc) override;
67
68 void get_media_features(litehtml::media_features & media) const override;
69 void get_language(litehtml::tstring & /*language*/, litehtml::tstring & /*culture*/) const override {}
70 void execute_script(litehtml::document * document, const litehtml::element::ptr el) override;
71 void invalidate_layout(litehtml::document * document) override;
72
73 void initialize(RenderTaskContext * renderContext, InspectorGuiRenderer * guiRenderer);
74 bool isInitialized() const { return renderContext && inspectorGuiRenderer; }
75
76 void pushState(ComponentModel::Entity * entity, glm::vec2 size);
77 void popState();
78
79 bool isInvalidated() const { return invalidated; }
80
81 void clear();
82
83 private:
84 RenderTaskContext * renderContext;
85 Context * context;
86 InspectorGuiRenderer * inspectorGuiRenderer;
87
88 ComponentModel::Entity * entity = nullptr;
89 ComponentModel::ComponentHandle scriptComponent;
90 glm::vec2 size;
91 bool invalidated = false;
92
93 std::unordered_map<size_t, Cogs::Core::TextureHandle> guiTextures;
94 };
95 }
96}
Container for components, providing composition of dynamic entities.
Definition: Entity.h:18
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Handle to a Component instance.
Definition: Component.h:67