📄 agg_platform_support.cpp
字号:
{
pixel_map pmap_tmp;
if(!pmap_tmp.load_from_bmp(fn)) return false;
rendering_buffer rbuf_tmp;
rbuf_tmp.attach(pmap_tmp.buf(),
pmap_tmp.width(),
pmap_tmp.height(),
m_flip_y ?
pmap_tmp.stride() :
-pmap_tmp.stride());
m_pmap_img[idx].create(pmap_tmp.width(),
pmap_tmp.height(),
org_e(m_bpp),
0);
dst->attach(m_pmap_img[idx].buf(),
m_pmap_img[idx].width(),
m_pmap_img[idx].height(),
m_flip_y ?
m_pmap_img[idx].stride() :
-m_pmap_img[idx].stride());
switch(m_format)
{
case pix_format_gray8:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_gray8()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_gray8()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_gray8()); break;
}
break;
case pix_format_gray16:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_gray16()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_gray16()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_gray16()); break;
}
break;
case pix_format_rgb555:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_rgb555()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_rgb555()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_rgb555()); break;
}
break;
case pix_format_rgb565:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_rgb565()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_rgb565()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_rgb565()); break;
}
break;
case pix_format_rgb24:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_rgb24()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_rgb24()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_rgb24()); break;
}
break;
case pix_format_bgr24:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_bgr24()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_bgr24()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_bgr24()); break;
}
break;
case pix_format_rgb48:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_rgb48()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_rgb48()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_rgb48()); break;
}
break;
case pix_format_bgr48:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_bgr48()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_bgr48()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_bgr48()); break;
}
break;
case pix_format_abgr32:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_abgr32()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_abgr32()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_abgr32()); break;
}
break;
case pix_format_argb32:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_argb32()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_argb32()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_argb32()); break;
}
break;
case pix_format_bgra32:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_bgra32()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_bgra32()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_bgra32()); break;
}
break;
case pix_format_rgba32:
switch(pmap_tmp.bpp())
{
case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_rgba32()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_rgba32()); break;
case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_rgba32()); break;
}
break;
case pix_format_abgr64:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_abgr64()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_abgr64()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_abgr64()); break;
}
break;
case pix_format_argb64:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_argb64()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_argb64()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_argb64()); break;
}
break;
case pix_format_bgra64:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_bgra64()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_bgra64()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_bgra64()); break;
}
break;
case pix_format_rgba64:
switch(pmap_tmp.bpp())
{
//case 16: color_conv(dst, &rbuf_tmp, color_conv_rgb555_to_rgba64()); break;
case 24: color_conv(dst, &rbuf_tmp, color_conv_bgr24_to_rgba64()); break;
//case 32: color_conv(dst, &rbuf_tmp, color_conv_bgra32_to_rgba64()); break;
}
break;
}
return true;
}
//------------------------------------------------------------------------
unsigned platform_specific::translate(unsigned keycode)
{
return m_last_translated_key = (keycode > 255) ? 0 : m_keymap[keycode];
}
//------------------------------------------------------------------------
platform_support::platform_support(pix_format_e format, bool flip_y) :
m_specific(new platform_specific(format, flip_y)),
m_format(format),
m_bpp(m_specific->m_bpp),
m_window_flags(0),
m_wait_mode(true),
m_flip_y(flip_y),
m_initial_width(10),
m_initial_height(10)
{
strcpy(m_caption, "Anti-Grain Geometry Application");
}
//------------------------------------------------------------------------
platform_support::~platform_support()
{
delete m_specific;
}
//------------------------------------------------------------------------
void platform_support::caption(const char* cap)
{
strcpy(m_caption, cap);
if(m_specific->m_hwnd)
{
SetWindowText(m_specific->m_hwnd, L"bspline");
}
}
//------------------------------------------------------------------------
void platform_support::start_timer()
{
::QueryPerformanceCounter(&(m_specific->m_sw_start));
}
//------------------------------------------------------------------------
double platform_support::elapsed_time() const
{
LARGE_INTEGER stop;
::QueryPerformanceCounter(&stop);
return double(stop.QuadPart -
m_specific->m_sw_start.QuadPart) * 1000.0 /
double(m_specific->m_sw_freq.QuadPart);
}
//------------------------------------------------------------------------
static unsigned get_key_flags(int wflags)
{
unsigned flags = 0;
if(wflags & MK_LBUTTON) flags |= mouse_left;
if(wflags & MK_RBUTTON) flags |= mouse_right;
if(wflags & MK_SHIFT) flags |= kbd_shift;
if(wflags & MK_CONTROL) flags |= kbd_ctrl;
return flags;
}
void* platform_support::raw_display_handler()
{
return m_specific->m_current_dc;
}
//------------------------------------------------------------------------
LRESULT CALLBACK window_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC paintDC;
void* user_data = reinterpret_cast<void*>(::GetWindowLong(hWnd, GWL_USERDATA));
platform_support* app = 0;
if(user_data)
{
app = reinterpret_cast<platform_support*>(user_data);
}
if(app == 0)
{
if(msg == WM_DESTROY)
{
::PostQuitMessage(0);
return 0;
}
return ::DefWindowProc(hWnd, msg, wParam, lParam);
}
HDC dc = ::GetDC(app->m_specific->m_hwnd);
app->m_specific->m_current_dc = dc;
LRESULT ret = 0;
switch(msg)
{
//--------------------------------------------------------------------
case WM_CREATE:
break;
//--------------------------------------------------------------------
case WM_SIZE:
app->m_specific->create_pmap(LOWORD(lParam),
HIWORD(lParam),
&app->rbuf_window());
app->trans_affine_resizing(LOWORD(lParam), HIWORD(lParam));
app->on_resize(LOWORD(lParam), HIWORD(lParam));
app->force_redraw();
break;
//--------------------------------------------------------------------
case WM_ERASEBKGND:
break;
//--------------------------------------------------------------------
case WM_LBUTTONDOWN:
::SetCapture(app->m_specific->m_hwnd);
app->m_specific->m_cur_x = int16(LOWORD(lParam));
if(app->flip_y())
{
app->m_specific->m_cur_y = app->rbuf_window().height() - int16(HIWORD(lParam));
}
else
{
app->m_specific->m_cur_y = int16(HIWORD(lParam));
}
app->m_specific->m_input_flags = mouse_left | get_key_flags(wParam);
app->m_ctrls.set_cur(app->m_specific->m_cur_x,
app->m_specific->m_cur_y);
if(app->m_ctrls.on_mouse_button_down(app->m_specific->m_cur_x,
app->m_specific->m_cur_y))
{
app->on_ctrl_change();
app->force_redraw();
}
else
{
if(app->m_ctrls.in_rect(app->m_specific->m_cur_x,
app->m_specific->m_cur_y))
{
if(app->m_ctrls.set_cur(app->m_specific->m_cur_x,
app->m_specific->m_cur_y))
{
app->on_ctrl_change();
app->force_redraw();
}
}
else
{
app->on_mouse_button_down(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_input_flags);
}
}
/*
if(!app->wait_mode())
{
app->on_idle();
}
*/
break;
//--------------------------------------------------------------------
case WM_LBUTTONUP:
::ReleaseCapture();
app->m_specific->m_cur_x = int16(LOWORD(lParam));
if(app->flip_y())
{
app->m_specific->m_cur_y = app->rbuf_window().height() - int16(HIWORD(lParam));
}
else
{
app->m_specific->m_cur_y = int16(HIWORD(lParam));
}
app->m_specific->m_input_flags = mouse_left | get_key_flags(wParam);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -