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

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//----------------------------------------------------------------------------// Anti-Grain Geometry (AGG) - Version 2.5// A high quality rendering engine for C++// Copyright (C) 2002-2006 Maxim Shemanarev// Contact: mcseem@antigrain.com//          mcseemagg@yahoo.com//          http://antigrain.com// // AGG is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.// // AGG is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// // You should have received a copy of the GNU General Public License// along with AGG; if not, write to the Free Software// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA.//----------------------------------------------------------------------------#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <time.h>#include <X11/Xlib.h>#include <X11/Xutil.h>#include <X11/Xatom.h>#include <X11/keysym.h>#include "agg_basics.h"#include "util/agg_color_conv_rgb8.h"#include "platform/agg_platform_support.h"namespace agg{    //------------------------------------------------------------------------    class platform_specific    {    public:        platform_specific(pix_format_e format, bool flip_y);        ~platform_specific();                void caption(const char* capt);        void put_image(const rendering_buffer* src);               pix_format_e         m_format;        pix_format_e         m_sys_format;        int                  m_byte_order;        bool                 m_flip_y;        unsigned             m_bpp;        unsigned             m_sys_bpp;        Display*             m_display;        int                  m_screen;        int                  m_depth;        Visual*              m_visual;        Window               m_window;        GC                   m_gc;        XImage*              m_ximg_window;        XSetWindowAttributes m_window_attributes;        Atom                 m_close_atom;        unsigned char*       m_buf_window;        unsigned char*       m_buf_img[platform_support::max_images];        unsigned             m_keymap[256];               bool m_update_flag;        bool m_resize_flag;        bool m_initialized;        //bool m_wait_mode;        clock_t m_sw_start;    };    //------------------------------------------------------------------------    platform_specific::platform_specific(pix_format_e format, bool flip_y) :        m_format(format),        m_sys_format(pix_format_undefined),        m_byte_order(LSBFirst),        m_flip_y(flip_y),        m_bpp(0),        m_sys_bpp(0),        m_display(0),        m_screen(0),        m_depth(0),        m_visual(0),        m_window(0),        m_gc(0),        m_ximg_window(0),        m_close_atom(0),        m_buf_window(0),                m_update_flag(true),         m_resize_flag(true),        m_initialized(false)        //m_wait_mode(true)    {        memset(m_buf_img, 0, sizeof(m_buf_img));        unsigned i;        for(i = 0; i < 256; i++)        {            m_keymap[i] = i;        }        m_keymap[XK_Pause&0xFF] = key_pause;        m_keymap[XK_Clear&0xFF] = key_clear;        m_keymap[XK_KP_0&0xFF] = key_kp0;        m_keymap[XK_KP_1&0xFF] = key_kp1;        m_keymap[XK_KP_2&0xFF] = key_kp2;        m_keymap[XK_KP_3&0xFF] = key_kp3;        m_keymap[XK_KP_4&0xFF] = key_kp4;        m_keymap[XK_KP_5&0xFF] = key_kp5;        m_keymap[XK_KP_6&0xFF] = key_kp6;        m_keymap[XK_KP_7&0xFF] = key_kp7;        m_keymap[XK_KP_8&0xFF] = key_kp8;        m_keymap[XK_KP_9&0xFF] = key_kp9;        m_keymap[XK_KP_Insert&0xFF]    = key_kp0;        m_keymap[XK_KP_End&0xFF]       = key_kp1;           m_keymap[XK_KP_Down&0xFF]      = key_kp2;        m_keymap[XK_KP_Page_Down&0xFF] = key_kp3;        m_keymap[XK_KP_Left&0xFF]      = key_kp4;        m_keymap[XK_KP_Begin&0xFF]     = key_kp5;        m_keymap[XK_KP_Right&0xFF]     = key_kp6;        m_keymap[XK_KP_Home&0xFF]      = key_kp7;        m_keymap[XK_KP_Up&0xFF]        = key_kp8;        m_keymap[XK_KP_Page_Up&0xFF]   = key_kp9;        m_keymap[XK_KP_Delete&0xFF]    = key_kp_period;        m_keymap[XK_KP_Decimal&0xFF]   = key_kp_period;        m_keymap[XK_KP_Divide&0xFF]    = key_kp_divide;        m_keymap[XK_KP_Multiply&0xFF]  = key_kp_multiply;        m_keymap[XK_KP_Subtract&0xFF]  = key_kp_minus;        m_keymap[XK_KP_Add&0xFF]       = key_kp_plus;        m_keymap[XK_KP_Enter&0xFF]     = key_kp_enter;        m_keymap[XK_KP_Equal&0xFF]     = key_kp_equals;        m_keymap[XK_Up&0xFF]           = key_up;        m_keymap[XK_Down&0xFF]         = key_down;        m_keymap[XK_Right&0xFF]        = key_right;        m_keymap[XK_Left&0xFF]         = key_left;        m_keymap[XK_Insert&0xFF]       = key_insert;        m_keymap[XK_Home&0xFF]         = key_delete;        m_keymap[XK_End&0xFF]          = key_end;        m_keymap[XK_Page_Up&0xFF]      = key_page_up;        m_keymap[XK_Page_Down&0xFF]    = key_page_down;        m_keymap[XK_F1&0xFF]           = key_f1;        m_keymap[XK_F2&0xFF]           = key_f2;        m_keymap[XK_F3&0xFF]           = key_f3;        m_keymap[XK_F4&0xFF]           = key_f4;        m_keymap[XK_F5&0xFF]           = key_f5;        m_keymap[XK_F6&0xFF]           = key_f6;        m_keymap[XK_F7&0xFF]           = key_f7;        m_keymap[XK_F8&0xFF]           = key_f8;        m_keymap[XK_F9&0xFF]           = key_f9;        m_keymap[XK_F10&0xFF]          = key_f10;        m_keymap[XK_F11&0xFF]          = key_f11;        m_keymap[XK_F12&0xFF]          = key_f12;        m_keymap[XK_F13&0xFF]          = key_f13;        m_keymap[XK_F14&0xFF]          = key_f14;        m_keymap[XK_F15&0xFF]          = key_f15;        m_keymap[XK_Num_Lock&0xFF]     = key_numlock;        m_keymap[XK_Caps_Lock&0xFF]    = key_capslock;        m_keymap[XK_Scroll_Lock&0xFF]  = key_scrollock;        switch(m_format)        {        default: break;        case pix_format_gray8:            m_bpp = 8;            break;        case pix_format_rgb565:        case pix_format_rgb555:            m_bpp = 16;            break;        case pix_format_rgb24:        case pix_format_bgr24:            m_bpp = 24;            break;        case pix_format_bgra32:        case pix_format_abgr32:        case pix_format_argb32:        case pix_format_rgba32:            m_bpp = 32;            break;        }        m_sw_start = clock();    }    //------------------------------------------------------------------------    platform_specific::~platform_specific()    {    }    //------------------------------------------------------------------------    void platform_specific::caption(const char* capt)    {        //XTextProperty tp;        //tp.value = (unsigned char *)capt;        //tp.encoding = XA_WM_NAME;        //tp.format = 8;        //tp.nitems = strlen(capt);        //XSetWMName(m_display, m_window, &tp);        //XStoreName(m_display, m_window, capt);        //XSetIconName(m_display, m_window, capt);        //XSetWMIconName(m_display, m_window, &tp);        // Fixed by Enno Fennema        XStoreName(m_display, m_window, capt);        XSetIconName(m_display, m_window, capt);    }        //------------------------------------------------------------------------    void platform_specific::put_image(const rendering_buffer* src)    {            if(m_ximg_window == 0) return;        m_ximg_window->data = (char*)m_buf_window;                if(m_format == m_sys_format)        {            XPutImage(m_display,                       m_window,                       m_gc,                       m_ximg_window,                       0, 0, 0, 0,                      src->width(),                       src->height());        }        else        {            int row_len = src->width() * m_sys_bpp / 8;            unsigned char* buf_tmp =                 new unsigned char[row_len * src->height()];                        rendering_buffer rbuf_tmp;            rbuf_tmp.attach(buf_tmp,                             src->width(),                             src->height(),                             m_flip_y ? -row_len : row_len);            switch(m_sys_format)                        {                default: break;                case pix_format_rgb555:                    switch(m_format)                    {                        default: break;                        case pix_format_rgb555: color_conv(&rbuf_tmp, src, color_conv_rgb555_to_rgb555()); break;                        case pix_format_rgb565: color_conv(&rbuf_tmp, src, color_conv_rgb565_to_rgb555()); break;                        case pix_format_rgb24:  color_conv(&rbuf_tmp, src, color_conv_rgb24_to_rgb555());  break;                        case pix_format_bgr24:  color_conv(&rbuf_tmp, src, color_conv_bgr24_to_rgb555());  break;                        case pix_format_rgba32: color_conv(&rbuf_tmp, src, color_conv_rgba32_to_rgb555()); break;                        case pix_format_argb32: color_conv(&rbuf_tmp, src, color_conv_argb32_to_rgb555()); break;                        case pix_format_bgra32: color_conv(&rbuf_tmp, src, color_conv_bgra32_to_rgb555()); break;                        case pix_format_abgr32: color_conv(&rbuf_tmp, src, color_conv_abgr32_to_rgb555()); break;                    }                    break;                                    case pix_format_rgb565:                    switch(m_format)                    {                        default: break;                        case pix_format_rgb555: color_conv(&rbuf_tmp, src, color_conv_rgb555_to_rgb565()); break;                        case pix_format_rgb565: color_conv(&rbuf_tmp, src, color_conv_rgb565_to_rgb565()); break;                        case pix_format_rgb24:  color_conv(&rbuf_tmp, src, color_conv_rgb24_to_rgb565());  break;                        case pix_format_bgr24:  color_conv(&rbuf_tmp, src, color_conv_bgr24_to_rgb565());  break;                        case pix_format_rgba32: color_conv(&rbuf_tmp, src, color_conv_rgba32_to_rgb565()); break;                        case pix_format_argb32: color_conv(&rbuf_tmp, src, color_conv_argb32_to_rgb565()); break;                        case pix_format_bgra32: color_conv(&rbuf_tmp, src, color_conv_bgra32_to_rgb565()); break;                        case pix_format_abgr32: color_conv(&rbuf_tmp, src, color_conv_abgr32_to_rgb565()); break;                    }                    break;                                    case pix_format_rgba32:                    switch(m_format)                    {                        default: break;                        case pix_format_rgb555: color_conv(&rbuf_tmp, src, color_conv_rgb555_to_rgba32()); break;                        case pix_format_rgb565: color_conv(&rbuf_tmp, src, color_conv_rgb565_to_rgba32()); break;                        case pix_format_rgb24:  color_conv(&rbuf_tmp, src, color_conv_rgb24_to_rgba32());  break;                        case pix_format_bgr24:  color_conv(&rbuf_tmp, src, color_conv_bgr24_to_rgba32());  break;                        case pix_format_rgba32: color_conv(&rbuf_tmp, src, color_conv_rgba32_to_rgba32()); break;                        case pix_format_argb32: color_conv(&rbuf_tmp, src, color_conv_argb32_to_rgba32()); break;                        case pix_format_bgra32: color_conv(&rbuf_tmp, src, color_conv_bgra32_to_rgba32()); break;                        case pix_format_abgr32: color_conv(&rbuf_tmp, src, color_conv_abgr32_to_rgba32()); break;                    }                    break;                                    case pix_format_abgr32:                    switch(m_format)                    {                        default: break;                        case pix_format_rgb555: color_conv(&rbuf_tmp, src, color_conv_rgb555_to_abgr32()); break;                        case pix_format_rgb565: color_conv(&rbuf_tmp, src, color_conv_rgb565_to_abgr32()); break;                        case pix_format_rgb24:  color_conv(&rbuf_tmp, src, color_conv_rgb24_to_abgr32());  break;                        case pix_format_bgr24:  color_conv(&rbuf_tmp, src, color_conv_bgr24_to_abgr32());  break;                        case pix_format_abgr32: color_conv(&rbuf_tmp, src, color_conv_abgr32_to_abgr32()); break;                        case pix_format_rgba32: color_conv(&rbuf_tmp, src, color_conv_rgba32_to_abgr32()); break;                        case pix_format_argb32: color_conv(&rbuf_tmp, src, color_conv_argb32_to_abgr32()); break;                        case pix_format_bgra32: color_conv(&rbuf_tmp, src, color_conv_bgra32_to_abgr32()); break;                    }                    break;                                    case pix_format_argb32:                    switch(m_format)                    {                        default: break;                        case pix_format_rgb555: color_conv(&rbuf_tmp, src, color_conv_rgb555_to_argb32()); break;                        case pix_format_rgb565: color_conv(&rbuf_tmp, src, color_conv_rgb565_to_argb32()); break;                        case pix_format_rgb24:  color_conv(&rbuf_tmp, src, color_conv_rgb24_to_argb32());  break;                        case pix_format_bgr24:  color_conv(&rbuf_tmp, src, color_conv_bgr24_to_argb32());  break;                        case pix_format_rgba32: color_conv(&rbuf_tmp, src, color_conv_rgba32_to_argb32()); break;                        case pix_format_argb32: color_conv(&rbuf_tmp, src, color_conv_argb32_to_argb32()); break;                        case pix_format_abgr32: color_conv(&rbuf_tmp, src, color_conv_abgr32_to_argb32()); break;                        case pix_format_bgra32: color_conv(&rbuf_tmp, src, color_conv_bgra32_to_argb32()); break;

⌨️ 快捷键说明

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