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#include "Foundation/Network/MessageHub.h"
9
10#include "litehtml.h"
11
12#include <glm/glm.hpp>
13
14namespace Cogs
15{
16 namespace ComponentModel
17 {
18 class Entity;
19 }
20
21 namespace Core
22 {
23 std::shared_ptr<litehtml::element> findElement(const std::shared_ptr<litehtml::element> & e, const StringView & id);
24
25 class InspectorGuiRenderer;
26 struct RenderTaskContext;
27
29 {
30 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;
31 void delete_font(litehtml::uint_ptr hFont) override;
32
33 int pt_to_px(int pt) override;
34 int text_width(const litehtml::tchar_t * text, litehtml::uint_ptr hFont) override;
35
36 int get_default_font_size() const override;
37 const litehtml::tchar_t * get_default_font_name() const override;
38
39 void load_image(const litehtml::tchar_t * src, const litehtml::tchar_t * baseurl, bool redraw_on_ready) override;
40 void get_image_size(const litehtml::tchar_t * src, const litehtml::tchar_t * baseurl, litehtml::size & sz) override;
41
42 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;
43 void draw_background(litehtml::uint_ptr hdc, const litehtml::background_paint & bg) override;
44 void draw_borders(litehtml::uint_ptr hdc, const litehtml::borders & borders, const litehtml::position & draw_pos, bool root) override;
45 void draw_list_marker(litehtml::uint_ptr hdc, const litehtml::list_marker & marker) override;
46
47 void set_caption(const litehtml::tchar_t * /*caption*/) override {}
48 void set_base_url(const litehtml::tchar_t * /*base_url*/) override {}
49 void link(const std::shared_ptr<litehtml::document> & /*doc*/, const litehtml::element::ptr & /*el*/) override {}
50
51 void on_load(const std::shared_ptr<litehtml::document> & document) override;
52 void on_anchor_click(const litehtml::tchar_t * url, const litehtml::element::ptr & el) override;
53 void on_mouse_enter(const litehtml::element::ptr & el) override;
54 void on_mouse_move(const litehtml::element::ptr & el, int x, int y) override;
55 void on_mouse_leave(const litehtml::element::ptr & el) override;
56 void on_click(const litehtml::element::ptr & el) override;
57
58 void set_cursor(const litehtml::tchar_t * /*cursor*/) override {}
59 void transform_text(litehtml::tstring & /*text*/, litehtml::text_transform /*tt*/) override {}
60 void import_css(litehtml::tstring & text, const litehtml::tstring & url, litehtml::tstring & baseurl) override;
61
62 void set_clip(const litehtml::position & /*pos*/, const litehtml::border_radiuses & /*bdr_radius*/, bool /*valid_x*/, bool /*valid_y*/) override {}
63 void del_clip() override {}
64
65 void get_client_rect(litehtml::position & client) const override;
66
67 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;
68
69 void get_media_features(litehtml::media_features & media) const override;
70 void get_language(litehtml::tstring & /*language*/, litehtml::tstring & /*culture*/) const override {}
71 void execute_script(litehtml::document * document, const litehtml::element::ptr el) override;
72 void invalidate_layout(litehtml::document * document) override;
73
74 void initialize(RenderTaskContext * renderContext, InspectorGuiRenderer * guiRenderer);
75 bool isInitialized() const { return renderContext && inspectorGuiRenderer; }
76
77 void pushState(ComponentModel::Entity * entity, glm::vec2 size);
78 void popState();
79
80 bool isInvalidated() const { return invalidated; }
81
82 void clear();
83
84 private:
85 RenderTaskContext * renderContext;
86 Context * context;
87 InspectorGuiRenderer * inspectorGuiRenderer;
88
89 ComponentModel::Entity * entity = nullptr;
90 ComponentModel::ComponentHandle scriptComponent;
91 glm::vec2 size;
92 bool invalidated = false;
93
94 std::unordered_map<size_t, Cogs::Core::TextureHandle> guiTextures;
95 };
96 }
97}
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
A MessageHub connects to other hubs to form a simple peer-to-peer application-internal networking sys...
Definition: MessageHub.h:30
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Handle to a Component instance.
Definition: Component.h:67