From 30adbc89f338caa80693dc6ab48a503f0ef3728f Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Tue, 7 Jul 2015 21:35:42 -0700 Subject: [PATCH] Shuffling resources and adding a Win32 .rc filesystem adapter. --- .gitignore | 1 + libelemental.vcxproj | 9 +- libelemental.vcxproj.filters | 16 ++- resources.rc | 122 ++++++++++++++++++ ...ionContainer.png => section_container.png} | Bin resources/default_skin/skin.tb.txt | 2 +- .../default_skin/{ => sources}/arrow.psd | Bin .../default_skin/{ => sources}/button.psd | Bin .../{ => sources}/button_flat.psd | Bin .../{ => sources}/button_grouped.psd | Bin .../default_skin/{ => sources}/checkradio.psd | Bin .../default_skin/{ => sources}/container.psd | Bin .../{ => sources}/dropdown_button.psd | Bin .../default_skin/{ => sources}/editfield.psd | Bin .../default_skin/{ => sources}/fadeout.psd | Bin .../default_skin/{ => sources}/focus.psd | Bin .../default_skin/{ => sources}/hover.psd | Bin resources/default_skin/{ => sources}/item.psd | Bin .../default_skin/{ => sources}/license.txt | 0 .../{ => sources}/messageicon.psd | Bin .../default_skin/{ => sources}/mover_tile.psd | Bin .../{ => sources}/progress_spinner_gear.psd | Bin .../default_skin/{ => sources}/progress_x.psd | Bin .../default_skin/{ => sources}/progress_y.psd | Bin .../default_skin/{ => sources}/resizer.psd | Bin .../default_skin/{ => sources}/search.psd | Bin .../section_container.psd} | Bin .../section_header.psd} | Bin .../default_skin/{ => sources}/selection.psd | Bin .../default_skin/{ => sources}/slider.psd | Bin .../default_skin/{ => sources}/slider_bg.psd | Bin .../{ => sources}/slider_handle.psd | Bin .../default_skin/{ => sources}/tabbutton.psd | Bin .../{ => sources}/tabbutton_left_right.psd | Bin .../{ => sources}/testtabbuttons.psd | Bin .../{ => sources}/toggle_section_icon.psd | Bin .../default_skin/{ => sources}/window.psd | Bin .../{ => sources}/window_close.psd | Bin .../{ => sources}/window_mover.psd | Bin ...d_file_system.cc => memory_file_system.cc} | 14 +- ...ded_file_system.h => memory_file_system.h} | 10 +- src/el/io/win32_res_file_system.cc | 84 ++++++++++++ src/el/io/win32_res_file_system.h | 34 +++++ testbed/elemental-testbed.vcxproj | 7 + testbed/elemental-testbed.vcxproj.filters | 8 +- testbed/resources.rc | 5 + testbed/testbed_application.cc | 32 ++--- 47 files changed, 297 insertions(+), 47 deletions(-) create mode 100644 resources.rc rename resources/default_skin/{TBSectionContainer.png => section_container.png} (100%) rename resources/default_skin/{ => sources}/arrow.psd (100%) rename resources/default_skin/{ => sources}/button.psd (100%) rename resources/default_skin/{ => sources}/button_flat.psd (100%) rename resources/default_skin/{ => sources}/button_grouped.psd (100%) rename resources/default_skin/{ => sources}/checkradio.psd (100%) rename resources/default_skin/{ => sources}/container.psd (100%) rename resources/default_skin/{ => sources}/dropdown_button.psd (100%) rename resources/default_skin/{ => sources}/editfield.psd (100%) rename resources/default_skin/{ => sources}/fadeout.psd (100%) rename resources/default_skin/{ => sources}/focus.psd (100%) rename resources/default_skin/{ => sources}/hover.psd (100%) rename resources/default_skin/{ => sources}/item.psd (100%) rename resources/default_skin/{ => sources}/license.txt (100%) rename resources/default_skin/{ => sources}/messageicon.psd (100%) rename resources/default_skin/{ => sources}/mover_tile.psd (100%) rename resources/default_skin/{ => sources}/progress_spinner_gear.psd (100%) rename resources/default_skin/{ => sources}/progress_x.psd (100%) rename resources/default_skin/{ => sources}/progress_y.psd (100%) rename resources/default_skin/{ => sources}/resizer.psd (100%) rename resources/default_skin/{ => sources}/search.psd (100%) rename resources/default_skin/{TBSectionContainer.psd => sources/section_container.psd} (100%) rename resources/default_skin/{TBSectionHeader.psd => sources/section_header.psd} (100%) rename resources/default_skin/{ => sources}/selection.psd (100%) rename resources/default_skin/{ => sources}/slider.psd (100%) rename resources/default_skin/{ => sources}/slider_bg.psd (100%) rename resources/default_skin/{ => sources}/slider_handle.psd (100%) rename resources/default_skin/{ => sources}/tabbutton.psd (100%) rename resources/default_skin/{ => sources}/tabbutton_left_right.psd (100%) rename resources/default_skin/{ => sources}/testtabbuttons.psd (100%) rename resources/default_skin/{ => sources}/toggle_section_icon.psd (100%) rename resources/default_skin/{ => sources}/window.psd (100%) rename resources/default_skin/{ => sources}/window_close.psd (100%) rename resources/default_skin/{ => sources}/window_mover.psd (100%) rename src/el/io/{embedded_file_system.cc => memory_file_system.cc} (76%) rename src/el/io/{embedded_file_system.h => memory_file_system.h} (82%) create mode 100644 src/el/io/win32_res_file_system.cc create mode 100644 src/el/io/win32_res_file_system.h create mode 100644 testbed/resources.rc diff --git a/.gitignore b/.gitignore index 33e23bc..1661f49 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ obj/ *.py[co] .coverage *.o +*.aps # ============================================================================== # Logs and dumps diff --git a/libelemental.vcxproj b/libelemental.vcxproj index fb16dd9..50d15fd 100644 --- a/libelemental.vcxproj +++ b/libelemental.vcxproj @@ -68,10 +68,11 @@ - + + @@ -167,9 +168,10 @@ - + + @@ -241,6 +243,9 @@ + + + {156102D7-F2DD-4618-B2EB-2DFE607EE6DD} Win32Proj diff --git a/libelemental.vcxproj.filters b/libelemental.vcxproj.filters index e087b50..a3c5b1b 100644 --- a/libelemental.vcxproj.filters +++ b/libelemental.vcxproj.filters @@ -298,7 +298,10 @@ src\el\io - + + src\el\io + + src\el\io @@ -309,9 +312,6 @@ {27a10b56-321a-4bfc-8c4b-9c53d385744d} - - {96cc6df4-c6c7-40f0-95cc-9308164eebcd} - {ff3900aa-ce03-4b52-a448-2b7e74367ebc} @@ -665,7 +665,10 @@ src\el\io - + + src\el\io + + src\el\io @@ -699,4 +702,7 @@ docs + + + \ No newline at end of file diff --git a/resources.rc b/resources.rc new file mode 100644 index 0000000..90d3dcc --- /dev/null +++ b/resources.rc @@ -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" diff --git a/resources/default_skin/TBSectionContainer.png b/resources/default_skin/section_container.png similarity index 100% rename from resources/default_skin/TBSectionContainer.png rename to resources/default_skin/section_container.png diff --git a/resources/default_skin/skin.tb.txt b/resources/default_skin/skin.tb.txt index 1ebe40f..efc7c31 100644 --- a/resources/default_skin/skin.tb.txt +++ b/resources/default_skin/skin.tb.txt @@ -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 diff --git a/resources/default_skin/arrow.psd b/resources/default_skin/sources/arrow.psd similarity index 100% rename from resources/default_skin/arrow.psd rename to resources/default_skin/sources/arrow.psd diff --git a/resources/default_skin/button.psd b/resources/default_skin/sources/button.psd similarity index 100% rename from resources/default_skin/button.psd rename to resources/default_skin/sources/button.psd diff --git a/resources/default_skin/button_flat.psd b/resources/default_skin/sources/button_flat.psd similarity index 100% rename from resources/default_skin/button_flat.psd rename to resources/default_skin/sources/button_flat.psd diff --git a/resources/default_skin/button_grouped.psd b/resources/default_skin/sources/button_grouped.psd similarity index 100% rename from resources/default_skin/button_grouped.psd rename to resources/default_skin/sources/button_grouped.psd diff --git a/resources/default_skin/checkradio.psd b/resources/default_skin/sources/checkradio.psd similarity index 100% rename from resources/default_skin/checkradio.psd rename to resources/default_skin/sources/checkradio.psd diff --git a/resources/default_skin/container.psd b/resources/default_skin/sources/container.psd similarity index 100% rename from resources/default_skin/container.psd rename to resources/default_skin/sources/container.psd diff --git a/resources/default_skin/dropdown_button.psd b/resources/default_skin/sources/dropdown_button.psd similarity index 100% rename from resources/default_skin/dropdown_button.psd rename to resources/default_skin/sources/dropdown_button.psd diff --git a/resources/default_skin/editfield.psd b/resources/default_skin/sources/editfield.psd similarity index 100% rename from resources/default_skin/editfield.psd rename to resources/default_skin/sources/editfield.psd diff --git a/resources/default_skin/fadeout.psd b/resources/default_skin/sources/fadeout.psd similarity index 100% rename from resources/default_skin/fadeout.psd rename to resources/default_skin/sources/fadeout.psd diff --git a/resources/default_skin/focus.psd b/resources/default_skin/sources/focus.psd similarity index 100% rename from resources/default_skin/focus.psd rename to resources/default_skin/sources/focus.psd diff --git a/resources/default_skin/hover.psd b/resources/default_skin/sources/hover.psd similarity index 100% rename from resources/default_skin/hover.psd rename to resources/default_skin/sources/hover.psd diff --git a/resources/default_skin/item.psd b/resources/default_skin/sources/item.psd similarity index 100% rename from resources/default_skin/item.psd rename to resources/default_skin/sources/item.psd diff --git a/resources/default_skin/license.txt b/resources/default_skin/sources/license.txt similarity index 100% rename from resources/default_skin/license.txt rename to resources/default_skin/sources/license.txt diff --git a/resources/default_skin/messageicon.psd b/resources/default_skin/sources/messageicon.psd similarity index 100% rename from resources/default_skin/messageicon.psd rename to resources/default_skin/sources/messageicon.psd diff --git a/resources/default_skin/mover_tile.psd b/resources/default_skin/sources/mover_tile.psd similarity index 100% rename from resources/default_skin/mover_tile.psd rename to resources/default_skin/sources/mover_tile.psd diff --git a/resources/default_skin/progress_spinner_gear.psd b/resources/default_skin/sources/progress_spinner_gear.psd similarity index 100% rename from resources/default_skin/progress_spinner_gear.psd rename to resources/default_skin/sources/progress_spinner_gear.psd diff --git a/resources/default_skin/progress_x.psd b/resources/default_skin/sources/progress_x.psd similarity index 100% rename from resources/default_skin/progress_x.psd rename to resources/default_skin/sources/progress_x.psd diff --git a/resources/default_skin/progress_y.psd b/resources/default_skin/sources/progress_y.psd similarity index 100% rename from resources/default_skin/progress_y.psd rename to resources/default_skin/sources/progress_y.psd diff --git a/resources/default_skin/resizer.psd b/resources/default_skin/sources/resizer.psd similarity index 100% rename from resources/default_skin/resizer.psd rename to resources/default_skin/sources/resizer.psd diff --git a/resources/default_skin/search.psd b/resources/default_skin/sources/search.psd similarity index 100% rename from resources/default_skin/search.psd rename to resources/default_skin/sources/search.psd diff --git a/resources/default_skin/TBSectionContainer.psd b/resources/default_skin/sources/section_container.psd similarity index 100% rename from resources/default_skin/TBSectionContainer.psd rename to resources/default_skin/sources/section_container.psd diff --git a/resources/default_skin/TBSectionHeader.psd b/resources/default_skin/sources/section_header.psd similarity index 100% rename from resources/default_skin/TBSectionHeader.psd rename to resources/default_skin/sources/section_header.psd diff --git a/resources/default_skin/selection.psd b/resources/default_skin/sources/selection.psd similarity index 100% rename from resources/default_skin/selection.psd rename to resources/default_skin/sources/selection.psd diff --git a/resources/default_skin/slider.psd b/resources/default_skin/sources/slider.psd similarity index 100% rename from resources/default_skin/slider.psd rename to resources/default_skin/sources/slider.psd diff --git a/resources/default_skin/slider_bg.psd b/resources/default_skin/sources/slider_bg.psd similarity index 100% rename from resources/default_skin/slider_bg.psd rename to resources/default_skin/sources/slider_bg.psd diff --git a/resources/default_skin/slider_handle.psd b/resources/default_skin/sources/slider_handle.psd similarity index 100% rename from resources/default_skin/slider_handle.psd rename to resources/default_skin/sources/slider_handle.psd diff --git a/resources/default_skin/tabbutton.psd b/resources/default_skin/sources/tabbutton.psd similarity index 100% rename from resources/default_skin/tabbutton.psd rename to resources/default_skin/sources/tabbutton.psd diff --git a/resources/default_skin/tabbutton_left_right.psd b/resources/default_skin/sources/tabbutton_left_right.psd similarity index 100% rename from resources/default_skin/tabbutton_left_right.psd rename to resources/default_skin/sources/tabbutton_left_right.psd diff --git a/resources/default_skin/testtabbuttons.psd b/resources/default_skin/sources/testtabbuttons.psd similarity index 100% rename from resources/default_skin/testtabbuttons.psd rename to resources/default_skin/sources/testtabbuttons.psd diff --git a/resources/default_skin/toggle_section_icon.psd b/resources/default_skin/sources/toggle_section_icon.psd similarity index 100% rename from resources/default_skin/toggle_section_icon.psd rename to resources/default_skin/sources/toggle_section_icon.psd diff --git a/resources/default_skin/window.psd b/resources/default_skin/sources/window.psd similarity index 100% rename from resources/default_skin/window.psd rename to resources/default_skin/sources/window.psd diff --git a/resources/default_skin/window_close.psd b/resources/default_skin/sources/window_close.psd similarity index 100% rename from resources/default_skin/window_close.psd rename to resources/default_skin/sources/window_close.psd diff --git a/resources/default_skin/window_mover.psd b/resources/default_skin/sources/window_mover.psd similarity index 100% rename from resources/default_skin/window_mover.psd rename to resources/default_skin/sources/window_mover.psd diff --git a/src/el/io/embedded_file_system.cc b/src/el/io/memory_file_system.cc similarity index 76% rename from src/el/io/embedded_file_system.cc rename to src/el/io/memory_file_system.cc index d11dc50..72a6e34 100644 --- a/src/el/io/embedded_file_system.cc +++ b/src/el/io/memory_file_system.cc @@ -9,15 +9,15 @@ #include -#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(data), length}; } -std::unique_ptr EmbeddedFileSystem::OpenRead(std::string filename) { +std::unique_ptr MemoryFileSystem::OpenRead(std::string filename) { auto it = file_entries_.find(filename); if (it == file_entries_.end()) { return nullptr; } - return std::make_unique(it->first, it->second.first, + return std::make_unique(it->first, it->second.first, it->second.second); } diff --git a/src/el/io/embedded_file_system.h b/src/el/io/memory_file_system.h similarity index 82% rename from src/el/io/embedded_file_system.h rename to src/el/io/memory_file_system.h index 97af221..d8d887c 100644 --- a/src/el/io/embedded_file_system.h +++ b/src/el/io/memory_file_system.h @@ -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 #include @@ -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_ diff --git a/src/el/io/win32_res_file_system.cc b/src/el/io/win32_res_file_system.cc new file mode 100644 index 0000000..5cd33fc --- /dev/null +++ b/src/el/io/win32_res_file_system.cc @@ -0,0 +1,84 @@ +/** + ****************************************************************************** + * Elemental Forms : a lightweight user interface framework * + ****************************************************************************** + * ©2015 Ben Vanik. All rights reserved. Released under the BSD license. * + * Portions ©2011-2015 Emil Segerås: https://github.com/fruxo/turbobadger * + ****************************************************************************** + */ + +#include +#include +#include +#include + +#include "el/io/win32_res_file_system.h" + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#define NOMINMAX +#include +#include + +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 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> 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( + filename, reinterpret_cast(data), data_length); +} + +} // namespace io +} // namespace el diff --git a/src/el/io/win32_res_file_system.h b/src/el/io/win32_res_file_system.h new file mode 100644 index 0000000..4bdf520 --- /dev/null +++ b/src/el/io/win32_res_file_system.h @@ -0,0 +1,34 @@ +/** + ****************************************************************************** + * Elemental Forms : a lightweight user interface framework * + ****************************************************************************** + * ©2015 Ben Vanik. All rights reserved. Released under the BSD license. * + * Portions ©2011-2015 Emil Segerås: https://github.com/fruxo/turbobadger * + ****************************************************************************** + */ + +#ifndef EL_IO_WIN32_RES_FILE_SYSTEM_H_ +#define EL_IO_WIN32_RES_FILE_SYSTEM_H_ + +#include +#include + +#include "el/io/file_system.h" + +namespace el { +namespace io { + +class Win32ResFileSystem : public FileSystem { + public: + Win32ResFileSystem(std::string prefix); + + std::unique_ptr OpenRead(std::string filename) override; + + private: + std::string prefix_; +}; + +} // namespace io +} // namespace el + +#endif // EL_IO_WIN32_RES_FILE_SYSTEM_H_ diff --git a/testbed/elemental-testbed.vcxproj b/testbed/elemental-testbed.vcxproj index 7fa0805..ae12900 100644 --- a/testbed/elemental-testbed.vcxproj +++ b/testbed/elemental-testbed.vcxproj @@ -143,6 +143,13 @@ {156102d7-f2dd-4618-b2eb-2dfe607ee6dd} + + + ..;%(AdditionalIncludeDirectories) + ..;%(AdditionalIncludeDirectories) + ..;%(AdditionalIncludeDirectories) + + diff --git a/testbed/elemental-testbed.vcxproj.filters b/testbed/elemental-testbed.vcxproj.filters index eeed47a..ed5a83b 100644 --- a/testbed/elemental-testbed.vcxproj.filters +++ b/testbed/elemental-testbed.vcxproj.filters @@ -92,11 +92,13 @@ {fba48d9e-7b52-4963-8e73-ee575661a7b7} - - {b9f218aa-02c3-4933-b544-bbe6ec06de12} - {d2c9cf31-544f-47f5-8cc2-bef96809ada1} + + + testbed + + \ No newline at end of file diff --git a/testbed/resources.rc b/testbed/resources.rc new file mode 100644 index 0000000..a7e45a4 --- /dev/null +++ b/testbed/resources.rc @@ -0,0 +1,5 @@ +//{{NO_DEPENDENCIES}} + +#include "..\\resources.rc" + +IDR_testbed_resources_skin_bg_tile_png RCDATA ".\\resources\\skin\\bg_tile.png" diff --git a/testbed/testbed_application.cc b/testbed/testbed_application.cc index 7419c23..613a6c1 100644 --- a/testbed/testbed_application.cc +++ b/testbed/testbed_application.cc @@ -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("./resources")); + //el::io::FileManager::RegisterFileSystem( + // std::make_unique("./resources")); el::io::FileManager::RegisterFileSystem( std::make_unique("./testbed/resources")); - auto embedded_file_system = std::make_unique(); - 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("IDR_default_resources_")); + el::io::FileManager::RegisterFileSystem( + std::make_unique("IDR_testbed_resources_")); util::StringTable::get()->Load("default_language/language_en.tb.txt");