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

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                    }                    break;                                    case pix_format_bgra32:                    switch(m_format)                    {                        default: break;                        case pix_format_rgb555: color_conv(&rbuf_tmp, src, color_conv_rgb555_to_bgra32()); break;                        case pix_format_rgb565: color_conv(&rbuf_tmp, src, color_conv_rgb565_to_bgra32()); break;                        case pix_format_rgb24:  color_conv(&rbuf_tmp, src, color_conv_rgb24_to_bgra32());  break;                        case pix_format_bgr24:  color_conv(&rbuf_tmp, src, color_conv_bgr24_to_bgra32());  break;                        case pix_format_rgba32: color_conv(&rbuf_tmp, src, color_conv_rgba32_to_bgra32()); break;                        case pix_format_argb32: color_conv(&rbuf_tmp, src, color_conv_argb32_to_bgra32()); break;                        case pix_format_abgr32: color_conv(&rbuf_tmp, src, color_conv_abgr32_to_bgra32()); break;                        case pix_format_bgra32: color_conv(&rbuf_tmp, src, color_conv_bgra32_to_bgra32()); break;                    }                    break;            }                        m_ximg_window->data = (char*)buf_tmp;            XPutImage(m_display,                       m_window,                       m_gc,                       m_ximg_window,                       0, 0, 0, 0,                      src->width(),                       src->height());                        delete [] buf_tmp;        }    }        //------------------------------------------------------------------------    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, "AGG Application");    }    //------------------------------------------------------------------------    platform_support::~platform_support()    {        delete m_specific;    }    //------------------------------------------------------------------------    void platform_support::caption(const char* cap)    {        strcpy(m_caption, cap);        if(m_specific->m_initialized)        {            m_specific->caption(cap);        }    }       //------------------------------------------------------------------------    enum xevent_mask_e    {         xevent_mask =            PointerMotionMask|            ButtonPressMask|            ButtonReleaseMask|            ExposureMask|            KeyPressMask|            StructureNotifyMask    };    //------------------------------------------------------------------------    bool platform_support::init(unsigned width, unsigned height, unsigned flags)    {        m_window_flags = flags;                m_specific->m_display = XOpenDisplay(NULL);        if(m_specific->m_display == 0)         {            fprintf(stderr, "Unable to open DISPLAY!\n");            return false;        }                m_specific->m_screen = XDefaultScreen(m_specific->m_display);        m_specific->m_depth  = XDefaultDepth(m_specific->m_display,                                              m_specific->m_screen);        m_specific->m_visual = XDefaultVisual(m_specific->m_display,                                               m_specific->m_screen);        unsigned long r_mask = m_specific->m_visual->red_mask;        unsigned long g_mask = m_specific->m_visual->green_mask;        unsigned long b_mask = m_specific->m_visual->blue_mask;                //printf("depth=%d, red=%08x, green=%08x, blue=%08x\n",//       m_specific->m_depth,//       m_specific->m_visual->red_mask,//       m_specific->m_visual->green_mask,//       m_specific->m_visual->blue_mask);           //         // NOT COMPLETED YET!//         // Try to find an appropriate Visual if the default doesn't fit.//         if(m_specific->m_depth < 15 ||//            r_mask == 0 || g_mask == 0 || b_mask == 0)//         {//             //             // This is an attempt to find an appropriate Visual if         //             // the default one doesn't match the minumum requirements//             static int depth[] = { 32, 24, 16, 15 };//             int i;//             for(int i = 0; i < 4; i++)//             {//                 XVisualInfo vi;//                 if(XMatchVisualInfo(m_specific->m_display, //                                     m_specific->m_screen, //                                     depth[i], //                                     TrueColor, //                                     &vi)) //                 {// //                     printf("TrueColor  depth=%d, red=%08x, green=%08x, blue=%08x, bits=%d\n",// //                         vi.depth,// //                         vi.visual->red_mask,// //                         vi.visual->green_mask,// //                         vi.visual->blue_mask,// //                         vi.bits_per_rgb);//                     m_specific->m_depth  = vi.depth;//                     m_specific->m_visual = vi.visual;//                     r_mask = m_specific->m_visual->red_mask;//                     g_mask = m_specific->m_visual->green_mask;//                     b_mask = m_specific->m_visual->blue_mask;//                     break;//                 }//                 if(XMatchVisualInfo(m_specific->m_display, //                                     m_specific->m_screen, //                                     depth[i], //                                     DirectColor, //                                     &vi)) //                 {// //                     printf("DirectColor depth=%d, red=%08x, green=%08x, blue=%08x, bits=%d\n",// //                         vi.depth,// //                         vi.visual->red_mask,// //                         vi.visual->green_mask,// //                         vi.visual->blue_mask,// //                         vi.bits_per_rgb);//                     m_specific->m_depth  = vi.depth;//                     m_specific->m_visual = vi.visual;//                     r_mask = m_specific->m_visual->red_mask;//                     g_mask = m_specific->m_visual->green_mask;//                     b_mask = m_specific->m_visual->blue_mask;//                     break;//                 }//             }//         }        if(m_specific->m_depth < 15 ||           r_mask == 0 || g_mask == 0 || b_mask == 0)        {            fprintf(stderr,                   "There's no Visual compatible with minimal AGG requirements:\n"                   "At least 15-bit color depth and True- or DirectColor class.\n\n");            XCloseDisplay(m_specific->m_display);            return false;        }                int t = 1;        int hw_byte_order = LSBFirst;        if(*(char*)&t == 0) hw_byte_order = MSBFirst;                // Perceive SYS-format by mask        switch(m_specific->m_depth)        {            case 15:                m_specific->m_sys_bpp = 16;                if(r_mask == 0x7C00 && g_mask == 0x3E0 && b_mask == 0x1F)                {                    m_specific->m_sys_format = pix_format_rgb555;                    m_specific->m_byte_order = hw_byte_order;                }                break;                            case 16:                m_specific->m_sys_bpp = 16;                if(r_mask == 0xF800 && g_mask == 0x7E0 && b_mask == 0x1F)                {                    m_specific->m_sys_format = pix_format_rgb565;                    m_specific->m_byte_order = hw_byte_order;                }                break;                            case 24:            case 32:                m_specific->m_sys_bpp = 32;                if(g_mask == 0xFF00)                {                    if(r_mask == 0xFF && b_mask == 0xFF0000)                    {                        switch(m_specific->m_format)                        {                            case pix_format_rgba32:                                m_specific->m_sys_format = pix_format_rgba32;                                m_specific->m_byte_order = LSBFirst;                                break;                                                            case pix_format_abgr32:                                m_specific->m_sys_format = pix_format_abgr32;                                m_specific->m_byte_order = MSBFirst;                                break;                            default:                                                            m_specific->m_byte_order = hw_byte_order;                                m_specific->m_sys_format =                                     (hw_byte_order == LSBFirst) ?                                    pix_format_rgba32 :                                    pix_format_abgr32;                                break;                        }                    }                                        if(r_mask == 0xFF0000 && b_mask == 0xFF)                    {                        switch(m_specific->m_format)                        {                            case pix_format_argb32:                                m_specific->m_sys_format = pix_format_argb32;                                m_specific->m_byte_order = MSBFirst;                                break;                                                            case pix_format_bgra32:                                m_specific->m_sys_format = pix_format_bgra32;                                m_specific->m_byte_order = LSBFirst;                                break;                            default:                                                            m_specific->m_byte_order = hw_byte_order;                                m_specific->m_sys_format =                                     (hw_byte_order == MSBFirst) ?                                    pix_format_argb32 :                                    pix_format_bgra32;                                break;                        }                    }                }                break;        }                if(m_specific->m_sys_format == pix_format_undefined)        {            fprintf(stderr,                   "RGB masks are not compatible with AGG pixel formats:\n"                   "R=%08x, R=%08x, B=%08x\n", r_mask, g_mask, b_mask);            XCloseDisplay(m_specific->m_display);            return false;        }                                        memset(&m_specific->m_window_attributes,                0,                sizeof(m_specific->m_window_attributes));                 m_specific->m_window_attributes.border_pixel =             XBlackPixel(m_specific->m_display, m_specific->m_screen);        m_specific->m_window_attributes.background_pixel =             XWhitePixel(m_specific->m_display, m_specific->m_screen);        m_specific->m_window_attributes.override_redirect = 0;        unsigned long window_mask = CWBackPixel | CWBorderPixel;        m_specific->m_window =             XCreateWindow(m_specific->m_display,                           XDefaultRootWindow(m_specific->m_display),                           0, 0,                          width,                          height,                          0,                           m_specific->m_depth,                           InputOutput,                           CopyFromParent,                          window_mask,                          &m_specific->m_window_attributes);        m_specific->m_gc = XCreateGC(m_specific->m_display,                                      m_specific->m_window,                                      0, 0);         m_specific->m_buf_window =             new unsigned char[width * height * (m_bpp / 8)];        memset(m_specific->m_buf_window, 255, width * height * (m_bpp / 8));                m_rbuf_window.attach(m_specific->m_buf_window,                             width,                             height,                             m_flip_y ? -width * (m_bpp / 8) : width * (m_bpp / 8));                    m_specific->m_ximg_window =             XCreateImage(m_specific->m_display,                          m_specific->m_visual, //CopyFromParent,                          m_specific->m_depth,                          ZPixmap,                          0,                         (char*)m_specific->m_buf_window,                          width,                         height,                          m_specific->m_sys_bpp,                         width * (m_specific->m_sys_bpp / 8));        m_specific->m_ximg_window->byte_order = m_specific->m_byte_order;        m_specific->caption(m_caption);         m_initial_width = width;        m_initial_height = height;                if(!m_specific->m_initialized)        {            on_init();            m_specific->m_initialized = true;        }

⌨️ 快捷键说明

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