* Handles drawing of resizable controls defined by a bitmap and four region sizes
*/
#include <draw_control.hpp>
+#include <axwin4/definitions.h>
+#include <acess/sys.h>
+#include <cassert>
// === CODE ===
namespace AxWin {
m_inner_y(InnerY),
m_data(data)
{
-
+ _SysDebug("CControl(X={E:%i,F:%i,I:%i}, Y={E:%i,F:%i,I:%i}, data={Size:%i})",
+ m_edge_x, m_fill_x, m_inner_x, m_edge_y, m_fill_y, m_inner_y, m_data.size());
}
void CControl::Render(CSurface& dest, const CRect& rect) const
renderLine(dest, y++, scanline, rect, &m_data[(base_ofs+i)*ctrl_width]);
base_ofs += m_edge_y;
// FillY
+ assert(m_fill_y > 0 || y == top_fill_end);
while( y < top_fill_end )
{
for( int i = 0; i < m_fill_y && y < top_fill_end; i ++ )
void CControl::renderLine(CSurface& dest, int y, ::std::vector<uint32_t>& scanline, const CRect& rect, const uint32_t* ctrl_line) const
{
+ //_SysDebug("renderLine: (y=%i,rect={(%i,%i) %ix%i}", y, rect.m_x, rect.m_y, rect.m_w, rect.m_h);
const int left_fill_end = rect.m_w / 2 - m_inner_x;
const int right_fill_end = rect.m_w - m_edge_x;
0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0,
});
+// Toolbar
+CControl StdToolbar(2, 1, 0, 2, 1, 0, ::std::vector<uint32_t> {
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0xA0A0A0, 0x0A0000, 0xA0A0A0, 0x000000,
+ 0x000000, 0xA0A0A0, 0xFFFFFF, 0xA0A0A0, 0x000000,
+ 0x000000, 0xA0A0A0, 0x0A0000, 0xA0A0A0, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ });
+
// Text Area
CControl StdText(2, 1, 0, 2, 1, 0, ::std::vector<uint32_t> {
0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
{
switch(id)
{
- case 0x00: return &StdButton;
- case 0x01: return &StdText;
+ case AXWIN4_CTL_BUTTON: return &StdButton;
+ case AXWIN4_CTL_TOOLBAR: return &StdToolbar;
+ case AXWIN4_CTL_TEXTBOX: return &StdText;
default: return nullptr;
}
}