diff --git a/GuiLite.h b/GuiLite.h index c4fc88a..f556a35 100644 --- a/GuiLite.h +++ b/GuiLite.h @@ -271,7 +271,7 @@ public: m_phy_read_index = m_phy_write_index; return m_phy_fb; } - int snap_shot(const char* file_name) + int snap_shot(const char* file_name)//tbd { if (!m_phy_fb || (m_color_bytes !=2 && m_color_bytes != 4)) { @@ -299,7 +299,7 @@ public: private: int m_width; //in pixels int m_height; //in pixels - int m_color_bytes; //16 bits, 32 bits only + int m_color_bytes; //16 bits, 32 bits, 24 bits only void* m_phy_fb; //physical framebuffer int m_phy_read_index; int m_phy_write_index; @@ -323,7 +323,7 @@ public: } int get_width() { return m_width; } int get_height() { return m_height; } - unsigned int get_pixel(int x, int y, unsigned int z_order) + unsigned int get_pixel(int x, int y, unsigned int z_order)//tbd { if (x >= m_width || y >= m_height || x < 0 || y < 0 || z_order >= Z_ORDER_LEVEL_MAX) { @@ -367,7 +367,7 @@ public: if (m_layers[z_order].rect.pt_in_rect(x, y)) { c_rect layer_rect = m_layers[z_order].rect; - if (m_color_bytes == 4) + if (m_color_bytes == 4 || m_color_bytes == 3) { ((unsigned int*)(m_layers[z_order].fb))[(x - layer_rect.m_left) + (y - layer_rect.m_top) * layer_rect.width()] = rgb; } @@ -416,7 +416,7 @@ public: { if (layer_rect.pt_in_rect(x, y)) { - if (m_color_bytes == 4) + if (m_color_bytes == 4 || m_color_bytes == 3) { ((unsigned int*)m_layers[z_order].fb)[(y - layer_rect.m_top) * layer_rect.width() + (x - layer_rect.m_left)] = rgb; } @@ -497,7 +497,7 @@ public: { fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, rgb, z_order); } - int flush_screen(int left, int top, int right, int bottom) + int flush_screen(int left, int top, int right, int bottom)//tbd { if (left < 0 || left >= m_width || right < 0 || right >= m_width || top < 0 || top >= m_height || bottom < 0 || bottom >= m_height) @@ -525,7 +525,7 @@ public: } bool is_active() { return m_is_active; } c_display* get_display() { return m_display; } - int show_layer(c_rect& rect, unsigned int z_order) + int show_layer(c_rect& rect, unsigned int z_order)//tbd { ASSERT(z_order >= Z_ORDER_LEVEL_0 && z_order < Z_ORDER_LEVEL_MAX); c_rect layer_rect = m_layers[z_order].rect; @@ -545,7 +545,7 @@ public: } void set_active(bool flag) { m_is_active = flag; } protected: - virtual void fill_rect_on_fb(int x0, int y0, int x1, int y1, unsigned int rgb) + virtual void fill_rect_on_fb(int x0, int y0, int x1, int y1, unsigned int rgb)//tbd { int display_width = m_display->get_width(); int display_height = m_display->get_height(); @@ -601,7 +601,14 @@ protected: { if (m_fb) { - (m_color_bytes == 4) ? ((unsigned int*)m_fb)[y * m_width + x] = rgb : ((unsigned short*)m_fb)[y * m_width + x] = GL_RGB_32_to_16(rgb); + if (m_color_bytes == 4 || m_color_bytes == 3) + { + ((unsigned int*)m_fb)[y * m_width + x] = rgb; + } + else if (m_color_bytes == 2) + { + ((unsigned short*)m_fb)[y * m_width + x] = GL_RGB_32_to_16(rgb); + } } if (m_is_active && (x < m_display->get_width()) && (y < m_display->get_height())) { @@ -609,10 +616,17 @@ protected: { ((unsigned int*)m_phy_fb)[y * (m_display->get_width()) + x] = rgb; } - else + else if (m_color_bytes == 2) { ((unsigned short*)m_phy_fb)[y * (m_display->get_width()) + x] = GL_RGB_32_to_16(rgb); } + else if (m_color_bytes == 3) + { + unsigned char* p_rgb = (unsigned char*)m_phy_fb + 3 * (y * (m_display->get_width()) + x); + *p_rgb++ = GL_RGB_R(rgb); + *p_rgb++ = GL_RGB_G(rgb); + *p_rgb = GL_RGB_B(rgb); + } *m_phy_write_index = *m_phy_write_index + 1; } } @@ -628,17 +642,17 @@ protected: m_max_zorder = max_z_order; if (m_display && (m_display->m_surface_cnt > 1)) { - m_fb = calloc(m_width * m_height, m_color_bytes); + m_fb = calloc(m_width * m_height, ((m_color_bytes == 3) ? 4 : m_color_bytes)); } for (int i = Z_ORDER_LEVEL_0; i < m_max_zorder; i++) {//Top layber fb always be 0 - ASSERT(m_layers[i].fb = calloc(layer_rect.width() * layer_rect.height(), m_color_bytes)); + ASSERT(m_layers[i].fb = calloc(layer_rect.width() * layer_rect.height(), ((m_color_bytes == 3) ? 4 : m_color_bytes))); m_layers[i].rect = layer_rect; } } int m_width; //in pixels int m_height; //in pixels - int m_color_bytes; //16 bits, 32 bits only + int m_color_bytes; //16 bits, 32 bits, 24bits only void* m_fb; //frame buffer you could see c_layer m_layers[Z_ORDER_LEVEL_MAX];//all graphic layers bool m_is_active; //active flag @@ -742,7 +756,7 @@ inline c_surface* c_display::alloc_surface(Z_ORDER_LEVEL max_zorder, c_rect laye (layer_rect == c_rect()) ? m_surface_group[m_surface_index]->set_surface(max_zorder, c_rect(0, 0, m_width - 1, m_height - 1)) : m_surface_group[m_surface_index]->set_surface(max_zorder, layer_rect); return m_surface_group[m_surface_index++]; } -inline int c_display::swipe_surface(c_surface* s0, c_surface* s1, int x0, int x1, int y0, int y1, int offset) +inline int c_display::swipe_surface(c_surface* s0, c_surface* s1, int x0, int x1, int y0, int y1, int offset)//tbd { int surface_width = s0->get_width(); int surface_height = s0->get_height(); diff --git a/src/GuiLite.vcxproj b/src/GuiLite.vcxproj index 161a405..944f955 100644 --- a/src/GuiLite.vcxproj +++ b/src/GuiLite.vcxproj @@ -182,7 +182,8 @@ %(AdditionalOptions) /machine:X64 - call "$(SolutionDir)sync_build.bat" "GuiLite" + + diff --git a/src/core_include/display.h b/src/core_include/display.h index dad6889..f23a18e 100644 --- a/src/core_include/display.h +++ b/src/core_include/display.h @@ -51,7 +51,7 @@ public: return m_phy_fb; } - int snap_shot(const char* file_name) + int snap_shot(const char* file_name)//tbd { if (!m_phy_fb || (m_color_bytes !=2 && m_color_bytes != 4)) { @@ -85,7 +85,7 @@ public: private: int m_width; //in pixels int m_height; //in pixels - int m_color_bytes; //16 bits, 32 bits only + int m_color_bytes; //16 bits, 32 bits, 24 bits only void* m_phy_fb; //physical framebuffer int m_phy_read_index; int m_phy_write_index; @@ -113,7 +113,7 @@ public: int get_width() { return m_width; } int get_height() { return m_height; } - unsigned int get_pixel(int x, int y, unsigned int z_order) + unsigned int get_pixel(int x, int y, unsigned int z_order)//tbd { if (x >= m_width || y >= m_height || x < 0 || y < 0 || z_order >= Z_ORDER_LEVEL_MAX) { @@ -160,7 +160,7 @@ public: if (m_layers[z_order].rect.pt_in_rect(x, y)) { c_rect layer_rect = m_layers[z_order].rect; - if (m_color_bytes == 4) + if (m_color_bytes == 4 || m_color_bytes == 3) { ((unsigned int*)(m_layers[z_order].fb))[(x - layer_rect.m_left) + (y - layer_rect.m_top) * layer_rect.width()] = rgb; } @@ -214,7 +214,7 @@ public: { if (layer_rect.pt_in_rect(x, y)) { - if (m_color_bytes == 4) + if (m_color_bytes == 4 || m_color_bytes == 3) { ((unsigned int*)m_layers[z_order].fb)[(y - layer_rect.m_top) * layer_rect.width() + (x - layer_rect.m_left)] = rgb; } @@ -306,7 +306,7 @@ public: fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, rgb, z_order); } - int flush_screen(int left, int top, int right, int bottom) + int flush_screen(int left, int top, int right, int bottom)//tbd { if (left < 0 || left >= m_width || right < 0 || right >= m_width || top < 0 || top >= m_height || bottom < 0 || bottom >= m_height) @@ -340,7 +340,7 @@ public: bool is_active() { return m_is_active; } c_display* get_display() { return m_display; } - int show_layer(c_rect& rect, unsigned int z_order) + int show_layer(c_rect& rect, unsigned int z_order)//tbd { ASSERT(z_order >= Z_ORDER_LEVEL_0 && z_order < Z_ORDER_LEVEL_MAX); @@ -362,7 +362,7 @@ public: } void set_active(bool flag) { m_is_active = flag; } protected: - virtual void fill_rect_on_fb(int x0, int y0, int x1, int y1, unsigned int rgb) + virtual void fill_rect_on_fb(int x0, int y0, int x1, int y1, unsigned int rgb)//tbd { int display_width = m_display->get_width(); int display_height = m_display->get_height(); @@ -420,7 +420,14 @@ protected: { if (m_fb) { - (m_color_bytes == 4) ? ((unsigned int*)m_fb)[y * m_width + x] = rgb : ((unsigned short*)m_fb)[y * m_width + x] = GL_RGB_32_to_16(rgb); + if (m_color_bytes == 4 || m_color_bytes == 3) + { + ((unsigned int*)m_fb)[y * m_width + x] = rgb; + } + else if (m_color_bytes == 2) + { + ((unsigned short*)m_fb)[y * m_width + x] = GL_RGB_32_to_16(rgb); + } } if (m_is_active && (x < m_display->get_width()) && (y < m_display->get_height())) @@ -429,10 +436,17 @@ protected: { ((unsigned int*)m_phy_fb)[y * (m_display->get_width()) + x] = rgb; } - else + else if (m_color_bytes == 2) { ((unsigned short*)m_phy_fb)[y * (m_display->get_width()) + x] = GL_RGB_32_to_16(rgb); } + else if (m_color_bytes == 3) + { + unsigned char* p_rgb = (unsigned char*)m_phy_fb + 3 * (y * (m_display->get_width()) + x); + *p_rgb++ = GL_RGB_R(rgb); + *p_rgb++ = GL_RGB_G(rgb); + *p_rgb = GL_RGB_B(rgb); + } *m_phy_write_index = *m_phy_write_index + 1; } } @@ -450,19 +464,19 @@ protected: m_max_zorder = max_z_order; if (m_display && (m_display->m_surface_cnt > 1)) { - m_fb = calloc(m_width * m_height, m_color_bytes); + m_fb = calloc(m_width * m_height, ((m_color_bytes == 3) ? 4 : m_color_bytes)); } for (int i = Z_ORDER_LEVEL_0; i < m_max_zorder; i++) {//Top layber fb always be 0 - ASSERT(m_layers[i].fb = calloc(layer_rect.width() * layer_rect.height(), m_color_bytes)); + ASSERT(m_layers[i].fb = calloc(layer_rect.width() * layer_rect.height(), ((m_color_bytes == 3) ? 4 : m_color_bytes))); m_layers[i].rect = layer_rect; } } int m_width; //in pixels int m_height; //in pixels - int m_color_bytes; //16 bits, 32 bits only + int m_color_bytes; //16 bits, 32 bits, 24bits only void* m_fb; //frame buffer you could see c_layer m_layers[Z_ORDER_LEVEL_MAX];//all graphic layers bool m_is_active; //active flag @@ -575,7 +589,7 @@ inline c_surface* c_display::alloc_surface(Z_ORDER_LEVEL max_zorder, c_rect laye return m_surface_group[m_surface_index++]; } -inline int c_display::swipe_surface(c_surface* s0, c_surface* s1, int x0, int x1, int y0, int y1, int offset) +inline int c_display::swipe_surface(c_surface* s0, c_surface* s1, int x0, int x1, int y0, int y1, int offset)//tbd { int surface_width = s0->get_width(); int surface_height = s0->get_height(); diff --git a/src/header-only.sh b/src/header-only.sh index 14808c5..752c35c 100644 --- a/src/header-only.sh +++ b/src/header-only.sh @@ -52,7 +52,7 @@ gcc -c -D GUILITE_ON test.cpp mv GuiLite.h ../ echo "Done!" echo "You could find GuiLite.h in root folder" -./.sync.sh GuiLite-header +# ./.sync.sh GuiLite-header # clean rm *.h *.cpp *.o