Shuffling resources and adding a Win32 .rc filesystem adapter.

This commit is contained in:
Ben Vanik
2015-07-07 21:35:42 -07:00
parent 17b41976c4
commit 30adbc89f3
47 changed files with 297 additions and 47 deletions

1
.gitignore vendored
View File

@@ -51,6 +51,7 @@ obj/
*.py[co]
.coverage
*.o
*.aps
# ==============================================================================
# Logs and dumps

View File

@@ -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>

View File

@@ -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
View 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"

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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_

View 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

View 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_

View File

@@ -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>

View File

@@ -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
View File

@@ -0,0 +1,5 @@
//{{NO_DEPENDENCIES}}
#include "..\\resources.rc"
IDR_testbed_resources_skin_bg_tile_png RCDATA ".\\resources\\skin\\bg_tile.png"

View File

@@ -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");