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

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//----------------------------------------------------------------------------// Anti-Grain Geometry (AGG) - Version 2.5// A high quality rendering engine for C++// Copyright (C) 2002-2006 Maxim Shemanarev// Copyright (C) 2003 Hansruedi Baer (MacOS support, baer@karto.baug.eth.ch)// 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.//----------------------------------------------------------------------------//// Note from Hansruedi Baer:// I tried to retain the original structure for the Win32 platform as far// as possible. Currently, not all features are implemented but the examples// should work properly.// HB//----------------------------------------------------------------------------#include <Carbon.h>#if defined(__MWERKS__)#include "console.h"#endif#include <string.h>#include <unistd.h>#include "platform/agg_platform_support.h"#include "platform/mac/agg_mac_pmap.h"#include "util/agg_color_conv_rgb8.h"namespace agg{    pascal OSStatus DoWindowClose (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoWindowDrawContent (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoAppQuit (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoMouseDown (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoMouseUp (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoMouseDragged (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoKeyDown (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal OSStatus DoKeyUp (EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);pascal void DoPeriodicTask (EventLoopTimerRef theTimer, void* userData);    //------------------------------------------------------------------------    class platform_specific    {    public:        platform_specific(pix_format_e format, bool flip_y);        void create_pmap(unsigned width, unsigned height,                          rendering_buffer* wnd);        void display_pmap(WindowRef window, const rendering_buffer* src);        bool load_pmap(const char* fn, unsigned idx,                        rendering_buffer* dst);        bool save_pmap(const char* fn, unsigned idx,                        const rendering_buffer* src);        unsigned translate(unsigned keycode);        pix_format_e     m_format;        pix_format_e     m_sys_format;        bool             m_flip_y;        unsigned         m_bpp;        unsigned         m_sys_bpp;        WindowRef        m_window;        pixel_map   	 m_pmap_window;        pixel_map        m_pmap_img[platform_support::max_images];        unsigned         m_keymap[256];        unsigned         m_last_translated_key;        int              m_cur_x;        int              m_cur_y;        unsigned         m_input_flags;        bool             m_redraw_flag;        UnsignedWide     m_sw_freq;        UnsignedWide     m_sw_start;    };    //------------------------------------------------------------------------    platform_specific::platform_specific(pix_format_e format, bool flip_y) :       	m_format(format),        m_sys_format(pix_format_undefined),        m_flip_y(flip_y),        m_bpp(0),        m_sys_bpp(0),        m_window(nil),        m_last_translated_key(0),        m_cur_x(0),        m_cur_y(0),        m_input_flags(0),        m_redraw_flag(true)    {        memset(m_keymap, 0, sizeof(m_keymap));        //Keyboard input is not yet fully supported nor tested        //m_keymap[VK_PAUSE]       = key_pause;        m_keymap[kClearCharCode]      = key_clear;        //m_keymap[VK_NUMPAD0]    = key_kp0;        //m_keymap[VK_NUMPAD1]    = key_kp1;        //m_keymap[VK_NUMPAD2]    = key_kp2;        //m_keymap[VK_NUMPAD3]    = key_kp3;        //m_keymap[VK_NUMPAD4]    = key_kp4;        //m_keymap[VK_NUMPAD5]    = key_kp5;        //m_keymap[VK_NUMPAD6]    = key_kp6;        //m_keymap[VK_NUMPAD7]    = key_kp7;        //m_keymap[VK_NUMPAD8]    = key_kp8;        //m_keymap[VK_NUMPAD9]    = key_kp9;        //m_keymap[VK_DECIMAL]    = key_kp_period;        //m_keymap[VK_DIVIDE]     = key_kp_divide;        //m_keymap[VK_MULTIPLY]   = key_kp_multiply;        //m_keymap[VK_SUBTRACT]   = key_kp_minus;        //m_keymap[VK_ADD]        = key_kp_plus;        m_keymap[kUpArrowCharCode]    = key_up;        m_keymap[kDownArrowCharCode]  = key_down;        m_keymap[kRightArrowCharCode] = key_right;        m_keymap[kLeftArrowCharCode]  = key_left;        //m_keymap[VK_INSERT]     = key_insert;        m_keymap[kDeleteCharCode]     = key_delete;        m_keymap[kHomeCharCode]       = key_home;        m_keymap[kEndCharCode]        = key_end;        m_keymap[kPageUpCharCode]     = key_page_up;        m_keymap[kPageDownCharCode]   = key_page_down;        //m_keymap[VK_F1]         = key_f1;        //m_keymap[VK_F2]         = key_f2;        //m_keymap[VK_F3]         = key_f3;        //m_keymap[VK_F4]         = key_f4;        //m_keymap[VK_F5]         = key_f5;        //m_keymap[VK_F6]         = key_f6;        //m_keymap[VK_F7]         = key_f7;        //m_keymap[VK_F8]         = key_f8;        //m_keymap[VK_F9]         = key_f9;        //m_keymap[VK_F10]        = key_f10;        //m_keymap[VK_F11]        = key_f11;        //m_keymap[VK_F12]        = key_f12;        //m_keymap[VK_F13]        = key_f13;        //m_keymap[VK_F14]        = key_f14;        //m_keymap[VK_F15]        = key_f15;        //m_keymap[VK_NUMLOCK]    = key_numlock;        //m_keymap[VK_CAPITAL]    = key_capslock;        //m_keymap[VK_SCROLL]     = key_scrollock;        switch(m_format)        {        case pix_format_gray8:            m_sys_format = pix_format_gray8;            m_bpp = 8;            m_sys_bpp = 8;            break;        case pix_format_rgb565:        case pix_format_rgb555:            m_sys_format = pix_format_rgb555;            m_bpp = 16;            m_sys_bpp = 16;            break;        case pix_format_rgb24:        case pix_format_bgr24:            m_sys_format = pix_format_rgb24;            m_bpp = 24;            m_sys_bpp = 24;            break;        case pix_format_bgra32:        case pix_format_abgr32:        case pix_format_argb32:        case pix_format_rgba32:            m_sys_format = pix_format_argb32;            m_bpp = 32;            m_sys_bpp = 32;            break;        }        ::Microseconds(&m_sw_freq);        ::Microseconds(&m_sw_start);    }    //------------------------------------------------------------------------    void platform_specific::create_pmap(unsigned width,                                         unsigned height,                                        rendering_buffer* wnd)    {        m_pmap_window.create(width, height, org_e(m_bpp));        wnd->attach(m_pmap_window.buf(),                     m_pmap_window.width(),                    m_pmap_window.height(),                      m_flip_y ?                     -m_pmap_window.row_bytes() :                      m_pmap_window.row_bytes());    }    //------------------------------------------------------------------------    void platform_specific::display_pmap(WindowRef window, const rendering_buffer* src)    {        if(m_sys_format == m_format)        {            m_pmap_window.draw(window);        }        else        {            pixel_map pmap_tmp;            pmap_tmp.create(m_pmap_window.width(),                             m_pmap_window.height(),                            org_e(m_sys_bpp));            rendering_buffer rbuf_tmp;            rbuf_tmp.attach(pmap_tmp.buf(),                            pmap_tmp.width(),                            pmap_tmp.height(),                            m_flip_y ?                             -pmap_tmp.row_bytes() :                              pmap_tmp.row_bytes());            switch(m_format)            {            case pix_format_gray8:                return;            case pix_format_rgb565:                color_conv(&rbuf_tmp, src, color_conv_rgb565_to_rgb555());                break;            case pix_format_bgr24:                color_conv(&rbuf_tmp, src, color_conv_bgr24_to_rgb24());                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;            case pix_format_rgba32:                color_conv(&rbuf_tmp, src, color_conv_rgba32_to_argb32());                break;            }            pmap_tmp.draw(window);        }    }    //------------------------------------------------------------------------    bool platform_specific::save_pmap(const char* fn, unsigned idx,                                       const rendering_buffer* src)    {        if(m_sys_format == m_format)        {            return m_pmap_img[idx].save_as_qt(fn);        }        else        {            pixel_map pmap_tmp;            pmap_tmp.create(m_pmap_img[idx].width(),                             m_pmap_img[idx].height(),                            org_e(m_sys_bpp));            rendering_buffer rbuf_tmp;            rbuf_tmp.attach(pmap_tmp.buf(),                            pmap_tmp.width(),                            pmap_tmp.height(),                            m_flip_y ?                             -pmap_tmp.row_bytes() :                              pmap_tmp.row_bytes());            switch(m_format)            {            case pix_format_gray8:                return false;            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_bgr24());                break;            case pix_format_abgr32:                color_conv(&rbuf_tmp, src, color_conv_abgr32_to_bgra32());                break;            case pix_format_argb32:                color_conv(&rbuf_tmp, src, color_conv_argb32_to_bgra32());                break;            case pix_format_rgba32:                color_conv(&rbuf_tmp, src, color_conv_rgba32_to_bgra32());                break;            }            return pmap_tmp.save_as_qt(fn);        }        return true;    }    //------------------------------------------------------------------------    bool platform_specific::load_pmap(const char* fn, unsigned idx,                                       rendering_buffer* dst)    {        pixel_map pmap_tmp;        if(!pmap_tmp.load_from_qt(fn)) return false;        rendering_buffer rbuf_tmp;        rbuf_tmp.attach(pmap_tmp.buf(),                        pmap_tmp.width(),                        pmap_tmp.height(),                        m_flip_y ?                         -pmap_tmp.row_bytes() :                          pmap_tmp.row_bytes());        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].row_bytes() :                       m_pmap_img[idx].row_bytes());        switch(m_format)        {        case pix_format_gray8:            return false;            break;        case pix_format_rgb555:            switch(pmap_tmp.bpp())

⌨️ 快捷键说明

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