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

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                if(SDL_PollEvent(&event))                {                    ev_flag = true;                }                else                {                    on_idle();                }            }            if(ev_flag)            {                if(event.type == SDL_QUIT)                {                    break;                }                int y;                unsigned flags = 0;                switch (event.type)                 {                case SDL_VIDEORESIZE:                    if(!init(event.resize.w, event.resize.h, m_window_flags)) return false;                    on_resize(m_rbuf_window.width(), m_rbuf_window.height());                    trans_affine_resizing(event.resize.w, event.resize.h);                    m_specific->m_update_flag = true;                    break;                case SDL_KEYDOWN:                    {                        flags = 0;                        if(event.key.keysym.mod & KMOD_SHIFT) flags |= kbd_shift;                        if(event.key.keysym.mod & KMOD_CTRL)  flags |= kbd_ctrl;                        bool left  = false;                        bool up    = false;                        bool right = false;                        bool down  = false;                        switch(event.key.keysym.sym)                        {                        case key_left:                            left = true;                            break;                        case key_up:                            up = true;                            break;                        case key_right:                            right = true;                            break;                        case key_down:                            down = true;                            break;                        }                        if(m_ctrls.on_arrow_keys(left, right, down, up))                        {                            on_ctrl_change();                            force_redraw();                        }                        else                        {                            on_key(m_specific->m_cur_x,                                   m_specific->m_cur_y,                                   event.key.keysym.sym,                                   flags);                        }                    }                    break;                case SDL_MOUSEMOTION:                    y = m_flip_y ?                         m_rbuf_window.height() - event.motion.y :                         event.motion.y;                    m_specific->m_cur_x = event.motion.x;                    m_specific->m_cur_y = y;                    flags = 0;                    if(event.motion.state & SDL_BUTTON_LMASK) flags |= mouse_left;                    if(event.motion.state & SDL_BUTTON_RMASK) flags |= mouse_right;                    if(m_ctrls.on_mouse_move(m_specific->m_cur_x,                                              m_specific->m_cur_y,                                             (flags & mouse_left) != 0))                    {                        on_ctrl_change();                        force_redraw();                    }                    else                    {                        on_mouse_move(m_specific->m_cur_x,                                       m_specific->m_cur_y,                                       flags);                    }		    SDL_Event eventtrash;		    while (SDL_PeepEvents(&eventtrash, 1, SDL_GETEVENT, SDL_EVENTMASK(SDL_MOUSEMOTION))!=0){;}                    break;		case SDL_MOUSEBUTTONDOWN:                    y = m_flip_y                        ? m_rbuf_window.height() - event.button.y                        : event.button.y;                    m_specific->m_cur_x = event.button.x;                    m_specific->m_cur_y = y;                    flags = 0;                    switch(event.button.button)                    {                    case SDL_BUTTON_LEFT:                        {                            flags = mouse_left;if(m_ctrls.on_mouse_button_down(m_specific->m_cur_x,                                m_specific->m_cur_y))                            {                                m_ctrls.set_cur(m_specific->m_cur_x,                                     m_specific->m_cur_y);                                on_ctrl_change();                                force_redraw();                            }                            else                            {                                if(m_ctrls.in_rect(m_specific->m_cur_x,                                     m_specific->m_cur_y))                                {                                    if(m_ctrls.set_cur(m_specific->m_cur_x,                                         m_specific->m_cur_y))                                    {                                        on_ctrl_change();                                        force_redraw();                                    }                                }                                else                                {                                    on_mouse_button_down(m_specific->m_cur_x,                                         m_specific->m_cur_y,                                         flags);                                }                            }                        }                        break;                    case SDL_BUTTON_RIGHT:                        flags = mouse_right;                        on_mouse_button_down(m_specific->m_cur_x,                             m_specific->m_cur_y,                             flags);                        break;                    } //switch(event.button.button)                    break;		                    case SDL_MOUSEBUTTONUP:                    y = m_flip_y                        ? m_rbuf_window.height() - event.button.y                        : event.button.y;                    m_specific->m_cur_x = event.button.x;                    m_specific->m_cur_y = y;                    flags = 0;                    if(m_ctrls.on_mouse_button_up(m_specific->m_cur_x,                                                   m_specific->m_cur_y))                    {                        on_ctrl_change();                        force_redraw();                    }                    on_mouse_button_up(m_specific->m_cur_x,                                        m_specific->m_cur_y,                                        flags);                    break;                }            }        }        return 0;    }    //------------------------------------------------------------------------    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)        {            if(m_specific->m_surf_img[idx]) SDL_FreeSurface(m_specific->m_surf_img[idx]);            char fn[1024];            strcpy(fn, file);            int len = strlen(fn);            if(len < 4 || strcmp(fn + len - 4, ".bmp") != 0)            {                strcat(fn, ".bmp");            }            SDL_Surface* tmp_surf = SDL_LoadBMP(fn);            if (tmp_surf == 0)             {                fprintf(stderr, "Couldn't load %s: %s\n", fn, SDL_GetError());                return false;            }            SDL_PixelFormat format;            format.palette = 0;            format.BitsPerPixel = m_bpp;            format.BytesPerPixel = m_bpp >> 8;            format.Rmask = m_specific->m_rmask;            format.Gmask = m_specific->m_gmask;            format.Bmask = m_specific->m_bmask;            format.Amask = m_specific->m_amask;            format.Rshift = 0;            format.Gshift = 0;            format.Bshift = 0;            format.Ashift = 0;            format.Rloss = 0;            format.Gloss = 0;            format.Bloss = 0;            format.Aloss = 0;            format.colorkey = 0;            format.alpha = 0;            m_specific->m_surf_img[idx] =                 SDL_ConvertSurface(tmp_surf,                                    &format,                                    SDL_SWSURFACE);            SDL_FreeSurface(tmp_surf);                        if(m_specific->m_surf_img[idx] == 0) return false;            m_rbuf_img[idx].attach((unsigned char*)m_specific->m_surf_img[idx]->pixels,                                    m_specific->m_surf_img[idx]->w,                                    m_specific->m_surf_img[idx]->h,                                    m_flip_y ? -m_specific->m_surf_img[idx]->pitch :                                                m_specific->m_surf_img[idx]->pitch);            return true;        }        return false;    }    //------------------------------------------------------------------------    bool platform_support::save_img(unsigned idx, const char* file)    {        if(idx < max_images && m_specific->m_surf_img[idx])        {            char fn[1024];            strcpy(fn, file);            int len = strlen(fn);            if(len < 4 || strcmp(fn + len - 4, ".bmp") != 0)            {                strcat(fn, ".bmp");            }            return SDL_SaveBMP(m_specific->m_surf_img[idx], fn) == 0;        }        return false;    }    //------------------------------------------------------------------------    bool platform_support::create_img(unsigned idx, unsigned width, unsigned height)    {        if(idx < max_images)        {            if(m_specific->m_surf_img[idx]) SDL_FreeSurface(m_specific->m_surf_img[idx]);             m_specific->m_surf_img[idx] =                  SDL_CreateRGBSurface(SDL_SWSURFACE,                                       width,                                       height,                                      m_specific->m_surf_screen->format->BitsPerPixel,                                      m_specific->m_rmask,                                       m_specific->m_gmask,                                       m_specific->m_bmask,                                       m_specific->m_amask);            if(m_specific->m_surf_img[idx] == 0)             {                fprintf(stderr, "Couldn't create image: %s\n", SDL_GetError());                return false;            }            m_rbuf_img[idx].attach((unsigned char*)m_specific->m_surf_img[idx]->pixels,                                    m_specific->m_surf_img[idx]->w,                                    m_specific->m_surf_img[idx]->h,                                    m_flip_y ? -m_specific->m_surf_img[idx]->pitch :                                                m_specific->m_surf_img[idx]->pitch);            return true;        }        return false;    }        //------------------------------------------------------------------------    void platform_support::start_timer()    {        m_specific->m_sw_start = SDL_GetTicks();    }    //------------------------------------------------------------------------    double platform_support::elapsed_time() const    {        int stop = SDL_GetTicks();        return double(stop - m_specific->m_sw_start);    }    //------------------------------------------------------------------------    void platform_support::message(const char* msg)    {        fprintf(stderr, "%s\n", msg);    }    //------------------------------------------------------------------------    void platform_support::force_redraw()    {        m_specific->m_update_flag = true;    }    //------------------------------------------------------------------------    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) {}}int agg_main(int argc, char* argv[]);int main(int argc, char* argv[]){    return agg_main(argc, argv);}

⌨️ 快捷键说明

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