mirror of
https://github.com/xenia-project/elemental-forms.git
synced 2026-01-31 01:25:17 +01:00
Shuffling resources and adding a Win32 .rc filesystem adapter.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -51,6 +51,7 @@ obj/
|
||||
*.py[co]
|
||||
.coverage
|
||||
*.o
|
||||
*.aps
|
||||
|
||||
# ==============================================================================
|
||||
# Logs and dumps
|
||||
|
||||
@@ -68,10 +68,11 @@
|
||||
<ClInclude Include="src\el\graphics\image_manager.h" />
|
||||
<ClInclude Include="src\el\graphics\renderer.h" />
|
||||
<ClInclude Include="src\el\id.h" />
|
||||
<ClInclude Include="src\el\io\embedded_file_system.h" />
|
||||
<ClInclude Include="src\el\io\memory_file_system.h" />
|
||||
<ClInclude Include="src\el\io\file_system.h" />
|
||||
<ClInclude Include="src\el\io\file_manager.h" />
|
||||
<ClInclude Include="src\el\io\posix_file_system.h" />
|
||||
<ClInclude Include="src\el\io\win32_res_file_system.h" />
|
||||
<ClInclude Include="src\el\list_item.h" />
|
||||
<ClInclude Include="src\el\message.h" />
|
||||
<ClInclude Include="src\el\message_handler.h" />
|
||||
@@ -167,9 +168,10 @@
|
||||
<ClCompile Include="src\el\graphics\image_manager.cc" />
|
||||
<ClCompile Include="src\el\graphics\renderer.cc" />
|
||||
<ClCompile Include="src\el\id.cc" />
|
||||
<ClCompile Include="src\el\io\embedded_file_system.cc" />
|
||||
<ClCompile Include="src\el\io\memory_file_system.cc" />
|
||||
<ClCompile Include="src\el\io\file_manager.cc" />
|
||||
<ClCompile Include="src\el\io\posix_file_system.cc" />
|
||||
<ClCompile Include="src\el\io\win32_res_file_system.cc" />
|
||||
<ClCompile Include="src\el\list_item.cc" />
|
||||
<ClCompile Include="src\el\message_handler.cc" />
|
||||
<ClCompile Include="src\el\parsing\element_factory.cc" />
|
||||
@@ -241,6 +243,9 @@
|
||||
<None Include="LICENSE" />
|
||||
<None Include="README.md" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="resources.rc" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{156102D7-F2DD-4618-B2EB-2DFE607EE6DD}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
|
||||
@@ -298,7 +298,10 @@
|
||||
<ClInclude Include="src\el\io\file_system.h">
|
||||
<Filter>src\el\io</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\el\io\embedded_file_system.h">
|
||||
<ClInclude Include="src\el\io\memory_file_system.h">
|
||||
<Filter>src\el\io</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\el\io\win32_res_file_system.h">
|
||||
<Filter>src\el\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
@@ -309,9 +312,6 @@
|
||||
<Filter Include="src\el">
|
||||
<UniqueIdentifier>{27a10b56-321a-4bfc-8c4b-9c53d385744d}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="resources">
|
||||
<UniqueIdentifier>{96cc6df4-c6c7-40f0-95cc-9308164eebcd}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="third_party">
|
||||
<UniqueIdentifier>{ff3900aa-ce03-4b52-a448-2b7e74367ebc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
@@ -665,7 +665,10 @@
|
||||
<ClCompile Include="src\el\io\posix_file_system.cc">
|
||||
<Filter>src\el\io</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\el\io\embedded_file_system.cc">
|
||||
<ClCompile Include="src\el\io\memory_file_system.cc">
|
||||
<Filter>src\el\io</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\el\io\win32_res_file_system.cc">
|
||||
<Filter>src\el\io</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
@@ -699,4 +702,7 @@
|
||||
<Filter>docs</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="resources.rc" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
122
resources.rc
Normal file
122
resources.rc
Normal file
@@ -0,0 +1,122 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
|
||||
IDR_default_resources_default_language_language_en_tb_txt RCDATA ".\\resources\\default_language\\language_en.tb.txt"
|
||||
|
||||
IDR_default_resources_fonts_segoe_white_with_shadow_tb_txt RCDATA ".\\resources\\fonts\\segoe_white_with_shadow.tb.txt"
|
||||
IDR_default_resources_fonts_segoe_white_with_shadow_14_png RCDATA ".\\resources\\fonts\\segoe_white_with_shadow_14.png"
|
||||
IDR_default_resources_fonts_segoe_white_with_shadow_28_png RCDATA ".\\resources\\fonts\\segoe_white_with_shadow_28.png"
|
||||
|
||||
IDR_default_resources_default_skin_arrow_down_png RCDATA ".\\resources\\default_skin\\arrow_down.png"
|
||||
IDR_default_resources_default_skin_arrow_down_192_png RCDATA ".\\resources\\default_skin\\arrow_down@192.png"
|
||||
IDR_default_resources_default_skin_arrow_down_288_png RCDATA ".\\resources\\default_skin\\arrow_down@288.png"
|
||||
IDR_default_resources_default_skin_arrow_down_384_png RCDATA ".\\resources\\default_skin\\arrow_down@384.png"
|
||||
IDR_default_resources_default_skin_arrow_left_png RCDATA ".\\resources\\default_skin\\arrow_left.png"
|
||||
IDR_default_resources_default_skin_arrow_left_192_png RCDATA ".\\resources\\default_skin\\arrow_left@192.png"
|
||||
IDR_default_resources_default_skin_arrow_left_288_png RCDATA ".\\resources\\default_skin\\arrow_left@288.png"
|
||||
IDR_default_resources_default_skin_arrow_left_384_png RCDATA ".\\resources\\default_skin\\arrow_left@384.png"
|
||||
IDR_default_resources_default_skin_arrow_right_png RCDATA ".\\resources\\default_skin\\arrow_right.png"
|
||||
IDR_default_resources_default_skin_arrow_right_192_png RCDATA ".\\resources\\default_skin\\arrow_right@192.png"
|
||||
IDR_default_resources_default_skin_arrow_right_288_png RCDATA ".\\resources\\default_skin\\arrow_right@288.png"
|
||||
IDR_default_resources_default_skin_arrow_right_384_png RCDATA ".\\resources\\default_skin\\arrow_right@384.png"
|
||||
IDR_default_resources_default_skin_arrow_up_png RCDATA ".\\resources\\default_skin\\arrow_up.png"
|
||||
IDR_default_resources_default_skin_arrow_up_192_png RCDATA ".\\resources\\default_skin\\arrow_up@192.png"
|
||||
IDR_default_resources_default_skin_arrow_up_288_png RCDATA ".\\resources\\default_skin\\arrow_up@288.png"
|
||||
IDR_default_resources_default_skin_arrow_up_384_png RCDATA ".\\resources\\default_skin\\arrow_up@384.png"
|
||||
IDR_default_resources_default_skin_button_png RCDATA ".\\resources\\default_skin\\button.png"
|
||||
IDR_default_resources_default_skin_button_flat_outline_png RCDATA ".\\resources\\default_skin\\button_flat_outline.png"
|
||||
IDR_default_resources_default_skin_button_flat_pressed_png RCDATA ".\\resources\\default_skin\\button_flat_pressed.png"
|
||||
IDR_default_resources_default_skin_button_grouped_x_first_down_png RCDATA ".\\resources\\default_skin\\button_grouped_x_first_down.png"
|
||||
IDR_default_resources_default_skin_button_grouped_x_first_up_png RCDATA ".\\resources\\default_skin\\button_grouped_x_first_up.png"
|
||||
IDR_default_resources_default_skin_button_grouped_x_last_down_png RCDATA ".\\resources\\default_skin\\button_grouped_x_last_down.png"
|
||||
IDR_default_resources_default_skin_button_grouped_x_last_up_png RCDATA ".\\resources\\default_skin\\button_grouped_x_last_up.png"
|
||||
IDR_default_resources_default_skin_button_grouped_x_middle_down_png RCDATA ".\\resources\\default_skin\\button_grouped_x_middle_down.png"
|
||||
IDR_default_resources_default_skin_button_grouped_x_middle_up_png RCDATA ".\\resources\\default_skin\\button_grouped_x_middle_up.png"
|
||||
IDR_default_resources_default_skin_button_pressed_png RCDATA ".\\resources\\default_skin\\button_pressed.png"
|
||||
IDR_default_resources_default_skin_checkbox_png RCDATA ".\\resources\\default_skin\\checkbox.png"
|
||||
IDR_default_resources_default_skin_checkbox_192_png RCDATA ".\\resources\\default_skin\\checkbox@192.png"
|
||||
IDR_default_resources_default_skin_checkbox_288_png RCDATA ".\\resources\\default_skin\\checkbox@288.png"
|
||||
IDR_default_resources_default_skin_checkbox_384_png RCDATA ".\\resources\\default_skin\\checkbox@384.png"
|
||||
IDR_default_resources_default_skin_checkbox_mark_png RCDATA ".\\resources\\default_skin\\checkbox_mark.png"
|
||||
IDR_default_resources_default_skin_checkbox_mark_192_png RCDATA ".\\resources\\default_skin\\checkbox_mark@192.png"
|
||||
IDR_default_resources_default_skin_checkbox_mark_288_png RCDATA ".\\resources\\default_skin\\checkbox_mark@288.png"
|
||||
IDR_default_resources_default_skin_checkbox_mark_384_png RCDATA ".\\resources\\default_skin\\checkbox_mark@384.png"
|
||||
IDR_default_resources_default_skin_checkbox_pressed_png RCDATA ".\\resources\\default_skin\\checkbox_pressed.png"
|
||||
IDR_default_resources_default_skin_checkbox_pressed_192_png RCDATA ".\\resources\\default_skin\\checkbox_pressed@192.png"
|
||||
IDR_default_resources_default_skin_checkbox_pressed_288_png RCDATA ".\\resources\\default_skin\\checkbox_pressed@288.png"
|
||||
IDR_default_resources_default_skin_checkbox_pressed_384_png RCDATA ".\\resources\\default_skin\\checkbox_pressed@384.png"
|
||||
IDR_default_resources_default_skin_container_png RCDATA ".\\resources\\default_skin\\container.png"
|
||||
IDR_default_resources_default_skin_editfield_png RCDATA ".\\resources\\default_skin\\editfield.png"
|
||||
IDR_default_resources_default_skin_fadeout_x_png RCDATA ".\\resources\\default_skin\\fadeout_x.png"
|
||||
IDR_default_resources_default_skin_fadeout_y_png RCDATA ".\\resources\\default_skin\\fadeout_y.png"
|
||||
IDR_default_resources_default_skin_focus_r4_png RCDATA ".\\resources\\default_skin\\focus_r4.png"
|
||||
IDR_default_resources_default_skin_focus_tabbutton_left_png RCDATA ".\\resources\\default_skin\\focus_tabbutton_left.png"
|
||||
IDR_default_resources_default_skin_focus_tabbutton_top_png RCDATA ".\\resources\\default_skin\\focus_tabbutton_top.png"
|
||||
IDR_default_resources_default_skin_item_hover_png RCDATA ".\\resources\\default_skin\\item_hover.png"
|
||||
IDR_default_resources_default_skin_item_selected_png RCDATA ".\\resources\\default_skin\\item_selected.png"
|
||||
IDR_default_resources_default_skin_item_separator_x_png RCDATA ".\\resources\\default_skin\\item_separator_x.png"
|
||||
IDR_default_resources_default_skin_item_separator_y_png RCDATA ".\\resources\\default_skin\\item_separator_y.png"
|
||||
IDR_default_resources_default_skin_progress_spinner_strip_png RCDATA ".\\resources\\default_skin\\progress_spinner_strip.png"
|
||||
IDR_default_resources_default_skin_progress_spinner_strip_192_png RCDATA ".\\resources\\default_skin\\progress_spinner_strip@192.png"
|
||||
IDR_default_resources_default_skin_radio_png RCDATA ".\\resources\\default_skin\\radio.png"
|
||||
IDR_default_resources_default_skin_radio_192_png RCDATA ".\\resources\\default_skin\\radio@192.png"
|
||||
IDR_default_resources_default_skin_radio_288_png RCDATA ".\\resources\\default_skin\\radio@288.png"
|
||||
IDR_default_resources_default_skin_radio_384_png RCDATA ".\\resources\\default_skin\\radio@384.png"
|
||||
IDR_default_resources_default_skin_radio_mark_png RCDATA ".\\resources\\default_skin\\radio_mark.png"
|
||||
IDR_default_resources_default_skin_radio_mark_192_png RCDATA ".\\resources\\default_skin\\radio_mark@192.png"
|
||||
IDR_default_resources_default_skin_radio_mark_288_png RCDATA ".\\resources\\default_skin\\radio_mark@288.png"
|
||||
IDR_default_resources_default_skin_radio_mark_384_png RCDATA ".\\resources\\default_skin\\radio_mark@384.png"
|
||||
IDR_default_resources_default_skin_radio_pressed_png RCDATA ".\\resources\\default_skin\\radio_pressed.png"
|
||||
IDR_default_resources_default_skin_radio_pressed_192_png RCDATA ".\\resources\\default_skin\\radio_pressed@192.png"
|
||||
IDR_default_resources_default_skin_radio_pressed_288_png RCDATA ".\\resources\\default_skin\\radio_pressed@288.png"
|
||||
IDR_default_resources_default_skin_radio_pressed_384_png RCDATA ".\\resources\\default_skin\\radio_pressed@384.png"
|
||||
IDR_default_resources_default_skin_resizer_png RCDATA ".\\resources\\default_skin\\resizer.png"
|
||||
IDR_default_resources_default_skin_resizer_192_png RCDATA ".\\resources\\default_skin\\resizer@192.png"
|
||||
IDR_default_resources_default_skin_resizer_288_png RCDATA ".\\resources\\default_skin\\resizer@288.png"
|
||||
IDR_default_resources_default_skin_resizer_384_png RCDATA ".\\resources\\default_skin\\resizer@384.png"
|
||||
IDR_default_resources_default_skin_scroll_bg_x_png RCDATA ".\\resources\\default_skin\\scroll_bg_x.png"
|
||||
IDR_default_resources_default_skin_scroll_bg_y_png RCDATA ".\\resources\\default_skin\\scroll_bg_y.png"
|
||||
IDR_default_resources_default_skin_scroll_fg_x_png RCDATA ".\\resources\\default_skin\\scroll_fg_x.png"
|
||||
IDR_default_resources_default_skin_scroll_fg_y_png RCDATA ".\\resources\\default_skin\\scroll_fg_y.png"
|
||||
IDR_default_resources_default_skin_search_png RCDATA ".\\resources\\default_skin\\search.png"
|
||||
IDR_default_resources_default_skin_search_192_png RCDATA ".\\resources\\default_skin\\search@192.png"
|
||||
IDR_default_resources_default_skin_search_288_png RCDATA ".\\resources\\default_skin\\search@288.png"
|
||||
IDR_default_resources_default_skin_search_384_png RCDATA ".\\resources\\default_skin\\search@384.png"
|
||||
IDR_default_resources_default_skin_section_container_png RCDATA ".\\resources\\default_skin\\section_container.png"
|
||||
IDR_default_resources_default_skin_selection_png RCDATA ".\\resources\\default_skin\\selection.png"
|
||||
IDR_default_resources_default_skin_skin_tb_txt RCDATA ".\\resources\\default_skin\\skin.tb.txt"
|
||||
IDR_default_resources_default_skin_slider_bg_x_png RCDATA ".\\resources\\default_skin\\slider_bg_x.png"
|
||||
IDR_default_resources_default_skin_slider_bg_x_192_png RCDATA ".\\resources\\default_skin\\slider_bg_x@192.png"
|
||||
IDR_default_resources_default_skin_slider_bg_x_288_png RCDATA ".\\resources\\default_skin\\slider_bg_x@288.png"
|
||||
IDR_default_resources_default_skin_slider_bg_x_384_png RCDATA ".\\resources\\default_skin\\slider_bg_x@384.png"
|
||||
IDR_default_resources_default_skin_slider_bg_y_png RCDATA ".\\resources\\default_skin\\slider_bg_y.png"
|
||||
IDR_default_resources_default_skin_slider_bg_y_192_png RCDATA ".\\resources\\default_skin\\slider_bg_y@192.png"
|
||||
IDR_default_resources_default_skin_slider_bg_y_288_png RCDATA ".\\resources\\default_skin\\slider_bg_y@288.png"
|
||||
IDR_default_resources_default_skin_slider_bg_y_384_png RCDATA ".\\resources\\default_skin\\slider_bg_y@384.png"
|
||||
IDR_default_resources_default_skin_slider_handle_png RCDATA ".\\resources\\default_skin\\slider_handle.png"
|
||||
IDR_default_resources_default_skin_slider_handle_192_png RCDATA ".\\resources\\default_skin\\slider_handle@192.png"
|
||||
IDR_default_resources_default_skin_slider_handle_288_png RCDATA ".\\resources\\default_skin\\slider_handle@288.png"
|
||||
IDR_default_resources_default_skin_slider_handle_384_png RCDATA ".\\resources\\default_skin\\slider_handle@384.png"
|
||||
IDR_default_resources_default_skin_tab_button_bottom_active_png RCDATA ".\\resources\\default_skin\\tab_button_bottom_active.png"
|
||||
IDR_default_resources_default_skin_tab_button_bottom_inactive_png RCDATA ".\\resources\\default_skin\\tab_button_bottom_inactive.png"
|
||||
IDR_default_resources_default_skin_tab_button_left_active_png RCDATA ".\\resources\\default_skin\\tab_button_left_active.png"
|
||||
IDR_default_resources_default_skin_tab_button_left_inactive_png RCDATA ".\\resources\\default_skin\\tab_button_left_inactive.png"
|
||||
IDR_default_resources_default_skin_tab_button_right_active_png RCDATA ".\\resources\\default_skin\\tab_button_right_active.png"
|
||||
IDR_default_resources_default_skin_tab_button_right_inactive_png RCDATA ".\\resources\\default_skin\\tab_button_right_inactive.png"
|
||||
IDR_default_resources_default_skin_tab_button_top_active_png RCDATA ".\\resources\\default_skin\\tab_button_top_active.png"
|
||||
IDR_default_resources_default_skin_tab_button_top_inactive_png RCDATA ".\\resources\\default_skin\\tab_button_top_inactive.png"
|
||||
IDR_default_resources_default_skin_toggle_section_icon_down_png RCDATA ".\\resources\\default_skin\\toggle_section_icon_down.png"
|
||||
IDR_default_resources_default_skin_toggle_section_icon_middle_png RCDATA ".\\resources\\default_skin\\toggle_section_icon_middle.png"
|
||||
IDR_default_resources_default_skin_toggle_section_icon_up_png RCDATA ".\\resources\\default_skin\\toggle_section_icon_up.png"
|
||||
IDR_default_resources_default_skin_window_png RCDATA ".\\resources\\default_skin\\window.png"
|
||||
IDR_default_resources_default_skin_window_active_png RCDATA ".\\resources\\default_skin\\window_active.png"
|
||||
IDR_default_resources_default_skin_window_close_png RCDATA ".\\resources\\default_skin\\window_close.png"
|
||||
IDR_default_resources_default_skin_window_close_192_png RCDATA ".\\resources\\default_skin\\window_close@192.png"
|
||||
IDR_default_resources_default_skin_window_close_288_png RCDATA ".\\resources\\default_skin\\window_close@288.png"
|
||||
IDR_default_resources_default_skin_window_close_384_png RCDATA ".\\resources\\default_skin\\window_close@384.png"
|
||||
IDR_default_resources_default_skin_window_close_pressed_png RCDATA ".\\resources\\default_skin\\window_close_pressed.png"
|
||||
IDR_default_resources_default_skin_window_close_pressed_192_png RCDATA ".\\resources\\default_skin\\window_close_pressed@192.png"
|
||||
IDR_default_resources_default_skin_window_close_pressed_288_png RCDATA ".\\resources\\default_skin\\window_close_pressed@288.png"
|
||||
IDR_default_resources_default_skin_window_close_pressed_384_png RCDATA ".\\resources\\default_skin\\window_close_pressed@384.png"
|
||||
IDR_default_resources_default_skin_window_mover_bg_tile_png RCDATA ".\\resources\\default_skin\\window_mover_bg_tile.png"
|
||||
IDR_default_resources_default_skin_window_mover_bg_tile_288_png RCDATA ".\\resources\\default_skin\\window_mover_bg_tile@288.png"
|
||||
IDR_default_resources_default_skin_window_mover_overlay_png RCDATA ".\\resources\\default_skin\\window_mover_overlay.png"
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -101,7 +101,7 @@ elements
|
||||
GroupBox.layout
|
||||
spacing -1px
|
||||
GroupBox.container
|
||||
bitmap TBSectionContainer.png
|
||||
bitmap section_container.png
|
||||
type stretch border
|
||||
cut 11
|
||||
expand 6
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "el/io/embedded_file_system.h"
|
||||
#include "el/io/memory_file_system.h"
|
||||
|
||||
namespace el {
|
||||
namespace io {
|
||||
|
||||
namespace {
|
||||
class EmbeddedFile : public File {
|
||||
class MemoryFile : public File {
|
||||
public:
|
||||
EmbeddedFile(std::string filename, const uint8_t* data, size_t length)
|
||||
MemoryFile(std::string filename, const uint8_t* data, size_t length)
|
||||
: filename_(filename), data_(data), length_(length) {}
|
||||
|
||||
size_t size() const override { return length_; }
|
||||
@@ -40,19 +40,19 @@ class EmbeddedFile : public File {
|
||||
};
|
||||
} // namespace
|
||||
|
||||
EmbeddedFileSystem::EmbeddedFileSystem() = default;
|
||||
MemoryFileSystem::MemoryFileSystem() = default;
|
||||
|
||||
void EmbeddedFileSystem::AddFile(std::string filename, const void* data,
|
||||
void MemoryFileSystem::AddFile(std::string filename, const void* data,
|
||||
size_t length) {
|
||||
file_entries_[filename] = {reinterpret_cast<const uint8_t*>(data), length};
|
||||
}
|
||||
|
||||
std::unique_ptr<File> EmbeddedFileSystem::OpenRead(std::string filename) {
|
||||
std::unique_ptr<File> MemoryFileSystem::OpenRead(std::string filename) {
|
||||
auto it = file_entries_.find(filename);
|
||||
if (it == file_entries_.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
return std::make_unique<EmbeddedFile>(it->first, it->second.first,
|
||||
return std::make_unique<MemoryFile>(it->first, it->second.first,
|
||||
it->second.second);
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef EL_IO_EMBEDDED_FILE_SYSTEM_H_
|
||||
#define EL_IO_EMBEDDED_FILE_SYSTEM_H_
|
||||
#ifndef EL_IO_MEMORY_FILE_SYSTEM_H_
|
||||
#define EL_IO_MEMORY_FILE_SYSTEM_H_
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@@ -19,9 +19,9 @@
|
||||
namespace el {
|
||||
namespace io {
|
||||
|
||||
class EmbeddedFileSystem : public FileSystem {
|
||||
class MemoryFileSystem : public FileSystem {
|
||||
public:
|
||||
EmbeddedFileSystem();
|
||||
MemoryFileSystem();
|
||||
|
||||
void AddFile(std::string filename, const void* data, size_t length);
|
||||
|
||||
@@ -35,4 +35,4 @@ class EmbeddedFileSystem : public FileSystem {
|
||||
} // namespace io
|
||||
} // namespace el
|
||||
|
||||
#endif // EL_IO_EMBEDDED_FILE_SYSTEM_H_
|
||||
#endif // EL_IO_MEMORY_FILE_SYSTEM_H_
|
||||
84
src/el/io/win32_res_file_system.cc
Normal file
84
src/el/io/win32_res_file_system.cc
Normal file
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Elemental Forms : a lightweight user interface framework *
|
||||
******************************************************************************
|
||||
* <20>2015 Ben Vanik. All rights reserved. Released under the BSD license. *
|
||||
* Portions <20>2011-2015 Emil Seger<65>s: https://github.com/fruxo/turbobadger *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include <codecvt>
|
||||
#include <cstring>
|
||||
#include <locale>
|
||||
|
||||
#include "el/io/win32_res_file_system.h"
|
||||
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#define NOMINMAX
|
||||
#include <SDKDDKVer.h>
|
||||
#include <windows.h>
|
||||
|
||||
namespace el {
|
||||
namespace io {
|
||||
|
||||
namespace {
|
||||
class Win32ResFile : public File {
|
||||
public:
|
||||
Win32ResFile(std::string filename, const uint8_t* data, size_t length)
|
||||
: filename_(filename), data_(data), length_(length) {}
|
||||
|
||||
size_t size() const override { return length_; }
|
||||
|
||||
size_t Read(void* buffer, size_t length) override {
|
||||
size_t to_read = std::min(length_ - position_, length);
|
||||
if (!to_read) {
|
||||
return 0;
|
||||
}
|
||||
std::memcpy(buffer, data_ + position_, to_read);
|
||||
position_ += to_read;
|
||||
return to_read;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string filename_;
|
||||
const uint8_t* data_;
|
||||
size_t length_;
|
||||
size_t position_ = 0;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
Win32ResFileSystem::Win32ResFileSystem(std::string prefix) : prefix_(prefix) {}
|
||||
|
||||
std::unique_ptr<File> Win32ResFileSystem::OpenRead(std::string filename) {
|
||||
std::string res_name = prefix_ + filename;
|
||||
std::transform(res_name.begin(), res_name.end(), res_name.begin(), ::toupper);
|
||||
for (size_t i = 0; i < res_name.size(); ++i) {
|
||||
char c = res_name[i];
|
||||
if (c == ' ' || c == '.' || c == '/' || c == '\\' || c == '@') {
|
||||
res_name[i] = '_';
|
||||
}
|
||||
}
|
||||
static std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
||||
auto wide_res_name = converter.from_bytes(res_name);
|
||||
|
||||
HRSRC res_info = ::FindResource(nullptr, wide_res_name.c_str(), RT_RCDATA);
|
||||
if (!res_info) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
HGLOBAL res = ::LoadResource(nullptr, res_info);
|
||||
if (!res) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
size_t data_length = ::SizeofResource(nullptr, res_info);
|
||||
void* data = ::LockResource(res);
|
||||
return std::make_unique<Win32ResFile>(
|
||||
filename, reinterpret_cast<const uint8_t*>(data), data_length);
|
||||
}
|
||||
|
||||
} // namespace io
|
||||
} // namespace el
|
||||
34
src/el/io/win32_res_file_system.h
Normal file
34
src/el/io/win32_res_file_system.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Elemental Forms : a lightweight user interface framework *
|
||||
******************************************************************************
|
||||
* <20>2015 Ben Vanik. All rights reserved. Released under the BSD license. *
|
||||
* Portions <20>2011-2015 Emil Seger<65>s: https://github.com/fruxo/turbobadger *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef EL_IO_WIN32_RES_FILE_SYSTEM_H_
|
||||
#define EL_IO_WIN32_RES_FILE_SYSTEM_H_
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "el/io/file_system.h"
|
||||
|
||||
namespace el {
|
||||
namespace io {
|
||||
|
||||
class Win32ResFileSystem : public FileSystem {
|
||||
public:
|
||||
Win32ResFileSystem(std::string prefix);
|
||||
|
||||
std::unique_ptr<File> OpenRead(std::string filename) override;
|
||||
|
||||
private:
|
||||
std::string prefix_;
|
||||
};
|
||||
|
||||
} // namespace io
|
||||
} // namespace el
|
||||
|
||||
#endif // EL_IO_WIN32_RES_FILE_SYSTEM_H_
|
||||
@@ -143,6 +143,13 @@
|
||||
<Project>{156102d7-f2dd-4618-b2eb-2dfe607ee6dd}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="resources.rc">
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
|
||||
@@ -92,11 +92,13 @@
|
||||
<Filter Include="testbed\platform">
|
||||
<UniqueIdentifier>{fba48d9e-7b52-4963-8e73-ee575661a7b7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="testbed\resources">
|
||||
<UniqueIdentifier>{b9f218aa-02c3-4933-b544-bbe6ec06de12}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="testbed\scratch">
|
||||
<UniqueIdentifier>{d2c9cf31-544f-47f5-8cc2-bef96809ada1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="resources.rc">
|
||||
<Filter>testbed</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
5
testbed/resources.rc
Normal file
5
testbed/resources.rc
Normal file
@@ -0,0 +1,5 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
|
||||
#include "..\\resources.rc"
|
||||
|
||||
IDR_testbed_resources_skin_bg_tile_png RCDATA ".\\resources\\skin\\bg_tile.png"
|
||||
@@ -18,9 +18,10 @@
|
||||
#include "el/element_animation_manager.h"
|
||||
#include "el/elemental_forms.h"
|
||||
#include "el/elements.h"
|
||||
#include "el/io/embedded_file_system.h"
|
||||
#include "el/io/file_manager.h"
|
||||
#include "el/io/memory_file_system.h"
|
||||
#include "el/io/posix_file_system.h"
|
||||
#include "el/io/win32_res_file_system.h"
|
||||
#include "el/parsing/parse_node.h"
|
||||
#include "el/text/font_manager.h"
|
||||
#include "el/text/font_renderer.h"
|
||||
@@ -217,31 +218,14 @@ int app_main() {
|
||||
el::Initialize(application_backend->GetRenderer());
|
||||
CodeTextBox::RegisterInflater();
|
||||
|
||||
el::io::FileManager::RegisterFileSystem(
|
||||
std::make_unique<el::io::PosixFileSystem>("./resources"));
|
||||
//el::io::FileManager::RegisterFileSystem(
|
||||
// std::make_unique<el::io::PosixFileSystem>("./resources"));
|
||||
el::io::FileManager::RegisterFileSystem(
|
||||
std::make_unique<el::io::PosixFileSystem>("./testbed/resources"));
|
||||
auto embedded_file_system = std::make_unique<el::io::EmbeddedFileSystem>();
|
||||
std::string language_file(
|
||||
"cut Cut\n"
|
||||
"copy Copy\n"
|
||||
"paste Paste\n"
|
||||
"delete Delete\n"
|
||||
"selectall Select all\n"
|
||||
"undo Undo\n"
|
||||
"redo Redo\n"
|
||||
"MessageWindow.ok Ok\n"
|
||||
"MessageWindow.cancel Cancel\n"
|
||||
"MessageWindow.yes Yes\n"
|
||||
"MessageWindow.no No\n"
|
||||
"ListBox.header Showing %d of %d\n"
|
||||
"new New\n"
|
||||
"save Save\n"
|
||||
"close Close\n"
|
||||
"search Search\n");
|
||||
embedded_file_system->AddFile("default_language/language_en.tb.txt",
|
||||
language_file.data(), language_file.size());
|
||||
el::io::FileManager::RegisterFileSystem(std::move(embedded_file_system));
|
||||
el::io::FileManager::RegisterFileSystem(
|
||||
std::make_unique<el::io::Win32ResFileSystem>("IDR_default_resources_"));
|
||||
el::io::FileManager::RegisterFileSystem(
|
||||
std::make_unique<el::io::Win32ResFileSystem>("IDR_testbed_resources_"));
|
||||
|
||||
util::StringTable::get()->Load("default_language/language_en.tb.txt");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user