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

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    const char* platform_support::img_ext() const { return ".bmp"; }    //------------------------------------------------------------------------    const char* platform_support::full_file_name(const char* file_name)    {        return file_name;    }    //------------------------------------------------------------------------    bool platform_support::load_img(unsigned idx, const char* file)    {        if(idx < max_images)        {            char fn[1024];            strcpy(fn, file);            int len = strlen(fn);            if(len < 4 || stricmp(fn + len - 4, ".BMP") != 0)            {                strcat(fn, ".bmp");            }            return m_specific->load_pmap(fn, idx, &m_rbuf_img[idx]);        }        return true;    }    //------------------------------------------------------------------------    bool platform_support::save_img(unsigned idx, const char* file)    {        if(idx < max_images)        {            char fn[1024];            strcpy(fn, file);            int len = strlen(fn);            if(len < 4 || stricmp(fn + len - 4, ".BMP") != 0)            {                strcat(fn, ".bmp");            }            return m_specific->save_pmap(fn, idx, &m_rbuf_img[idx]);        }        return true;    }    //------------------------------------------------------------------------    bool platform_support::create_img(unsigned idx, unsigned width, unsigned height)    {        if(idx < max_images)        {            if(width  == 0) width  = m_specific->m_pmap_window.width();            if(height == 0) height = m_specific->m_pmap_window.height();            m_specific->m_pmap_img[idx].create(width, height, org_e(m_specific->m_bpp));            m_rbuf_img[idx].attach(m_specific->m_pmap_img[idx].buf(),                                    m_specific->m_pmap_img[idx].width(),                                   m_specific->m_pmap_img[idx].height(),                                   m_flip_y ?                                    m_specific->m_pmap_img[idx].stride() :                                   -m_specific->m_pmap_img[idx].stride());            return true;        }        return false;    }    //------------------------------------------------------------------------    void platform_support::force_redraw()    {        m_specific->m_redraw_flag = true;        ::InvalidateRect(m_specific->m_hwnd, 0, FALSE);    }    //------------------------------------------------------------------------    void platform_support::update_window()    {        HDC dc = ::GetDC(m_specific->m_hwnd);        m_specific->display_pmap(dc, &m_rbuf_window);        ::ReleaseDC(m_specific->m_hwnd, dc);    }    //------------------------------------------------------------------------    void platform_support::on_init() {}    void platform_support::on_resize(int sx, int sy) {}    void platform_support::on_idle() {}    void platform_support::on_mouse_move(int x, int y, unsigned flags) {}    void platform_support::on_mouse_button_down(int x, int y, unsigned flags) {}    void platform_support::on_mouse_button_up(int x, int y, unsigned flags) {}    void platform_support::on_key(int x, int y, unsigned key, unsigned flags) {}    void platform_support::on_ctrl_change() {}    void platform_support::on_draw() {}    void platform_support::on_post_draw(void* raw_handler) {}}namespace agg{    // That's ridiculous. I have to parse the command line by myself    // because Windows doesn't provide a method of getting the command    // line arguments in a form of argc, argv. Of course, there's     // CommandLineToArgv() but first, it returns Unicode that I don't    // need to deal with, but most of all, it's not compatible with Win98.    //-----------------------------------------------------------------------    class tokenizer    {    public:        enum sep_flag        {            single,            multiple,            whole_str        };        struct token        {            const char* ptr;            unsigned    len;        };    public:        tokenizer(const char* sep,                   const char* trim=0,                  const char* quote="\"",                  char mask_chr='\\',                  sep_flag sf=multiple);        void  set_str(const char* str);        token next_token();    private:        int  check_chr(const char *str, char chr);    private:        const char* m_src_string;        int         m_start;        const char* m_sep;        const char* m_trim;        const char* m_quote;        char        m_mask_chr;        unsigned    m_sep_len;        sep_flag    m_sep_flag;    };    //-----------------------------------------------------------------------    inline void tokenizer::set_str(const char* str)     {         m_src_string = str;         m_start = 0;    }    //-----------------------------------------------------------------------    inline int tokenizer::check_chr(const char *str, char chr)    {        return int(strchr(str, chr));    }    //-----------------------------------------------------------------------    tokenizer::tokenizer(const char* sep,                          const char* trim,                         const char* quote,                         char mask_chr,                         sep_flag sf) :        m_src_string(0),        m_start(0),        m_sep(sep),        m_trim(trim),        m_quote(quote),        m_mask_chr(mask_chr),        m_sep_len(sep ? strlen(sep) : 0),        m_sep_flag(sep ? sf : single)    {    }    //-----------------------------------------------------------------------    tokenizer::token tokenizer::next_token()    {        unsigned count = 0;        char quote_chr = 0;        token tok;        tok.ptr = 0;        tok.len = 0;        if(m_src_string == 0 || m_start == -1) return tok;        register const char *pstr = m_src_string + m_start;        if(*pstr == 0)         {            m_start = -1;            return tok;        }        int sep_len = 1;        if(m_sep_flag == whole_str) sep_len = m_sep_len;        if(m_sep_flag == multiple)        {            //Pass all the separator symbols at the begin of the string            while(*pstr && check_chr(m_sep, *pstr))             {                ++pstr;                ++m_start;            }        }        if(*pstr == 0)         {            m_start = -1;            return tok;        }        for(count = 0;; ++count)         {            char c = *pstr;            int found = 0;            //We are outside of qotation: find one of separator symbols            if(quote_chr == 0)            {                if(sep_len == 1)                {                    found = check_chr(m_sep, c);                }                else                {                    found = strncmp(m_sep, pstr, m_sep_len) == 0;                 }            }            ++pstr;            if(c == 0 || found)             {                if(m_trim)                {                    while(count &&                           check_chr(m_trim, m_src_string[m_start]))                    {                        ++m_start;                        --count;                    }                    while(count &&                           check_chr(m_trim, m_src_string[m_start + count - 1]))                    {                        --count;                    }                }                tok.ptr = m_src_string + m_start;                tok.len = count;                //Next time it will be the next separator character                //But we must check, whether it is NOT the end of the string.                m_start += count;                if(c)                 {                    m_start += sep_len;                    if(m_sep_flag == multiple)                    {                        //Pass all the separator symbols                         //after the end of the string                        while(check_chr(m_sep, m_src_string[m_start]))                         {                            ++m_start;                        }                    }                }                break;            }            //Switch quote. If it is not a quote yet, try to check any of            //quote symbols. Otherwise quote must be finished with quote_symb            if(quote_chr == 0)            {                if(check_chr(m_quote, c))                 {                    quote_chr = c;                    continue;                }            }            else            {                //We are inside quote: pass all the mask symbols                if(m_mask_chr && c == m_mask_chr)                {                    if(*pstr)                     {                        ++count;                        ++pstr;                    }                    continue;                 }                if(c == quote_chr)                 {                    quote_chr = 0;                    continue;                }            }        }        return tok;    }}//----------------------------------------------------------------------------int agg_main(int argc, char* argv[]);//----------------------------------------------------------------------------int PASCAL WinMain(HINSTANCE hInstance,                   HINSTANCE hPrevInstance,                   LPSTR lpszCmdLine,                   int nCmdShow){    agg::g_windows_instance = hInstance;    agg::g_windows_cmd_show = nCmdShow;    char* argv_str = new char [strlen(lpszCmdLine) + 3];    char* argv_ptr = argv_str;    char* argv[64];    memset(argv, 0, sizeof(argv));    agg::tokenizer cmd_line(" ", "\"' ", "\"'", '\\', agg::tokenizer::multiple);    cmd_line.set_str(lpszCmdLine);    int argc = 0;    argv[argc++] = argv_ptr;    *argv_ptr++ = 0;    while(argc < 64)    {        agg::tokenizer::token tok = cmd_line.next_token();        if(tok.ptr == 0) break;        if(tok.len)        {            memcpy(argv_ptr, tok.ptr, tok.len);            argv[argc++] = argv_ptr;            argv_ptr += tok.len;            *argv_ptr++ = 0;        }    }    int ret = agg_main(argc, argv);    delete [] argv_str;    return ret;}

⌨️ 快捷键说明

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