⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                                      rendering_buffer* dst)    {        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, m_caption);        }    }    //------------------------------------------------------------------------    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));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -