/** * \file xvfb.h * \author FMSoft * \date 2007/10/25 * * \brief This file includes global and miscellaneous interfaces of * xVFB for MiniGUI. * \verbatim This file is part of MiniGUI, a mature cross-platform windowing and Graphics User Interface (GUI) support system for embedded systems and smart IoT devices. Copyright (C) 2007~2018, Beijing FMSoft Technologies Co., Ltd. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . Or, As this program is a library, any link to this program must follow GNU General Public License version 3 (GPLv3). If you cannot accept GPLv3, you need to be licensed from FMSoft. If you have got a commercial license of this program, please use it under the terms and conditions of the commercial license. For more information about the commercial license, please refer to . \endverbatim */ /* * $Id: xvfb.h 7682 2007-09-26 03:27:02Z wangxuguang $ * * MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks, * pSOS, ThreadX, NuCleus, OSE, and Win32. */ #ifndef _MGUI_XVFB_H #define _MGUI_XVFB_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /** * \addtogroup global_vars Global variables * @{ */ /** * \defgroup xvfb_vars x virtual framebuffer * @{ */ /** infomation header of xvfb frame buffer. */ typedef struct _XVFBHeader { /** size of infomation header*/ unsigned int info_size; /** width of x virtual framebuffer */ int width; /** height of x virtual framebuffer */ int height; /** color depth of x virtual framebuffer */ int depth; /** * The flag indicating the Most Significant Bits (MSB) * is left when depth is less than 8. */ Uint8 MSBLeft; /** the pixel red color mask for x virtual framebuffer. */ Uint32 Rmask; /** the pixel green color mask for x virtual framebuffer. */ Uint32 Gmask; /** the pixel blue color mask for x virtual framebuffer. */ Uint32 Bmask; /** the pixel alpha mask for x virtual framebuffer. */ Uint32 Amask; /** The pitch of x virtual framebuffer. */ int pitch; /** * Flag indicate whether x virtual framebuffer should be update, * and should reset to false after refreshing the dirty area */ int dirty; /** the left of dirty area */ int dirty_rc_l; /** the top of dirty area */ int dirty_rc_t; /** the right of dirty area */ int dirty_rc_r; /** the bottom of dirty area */ int dirty_rc_b; /** * Flag indicate whether palette have been changed, * and should reset to false after reflecting the change. */ int palette_changed; /** the offset off palette based on address of XVFBHeader. */ int palette_offset; /** the offset off framebuffer based on address of XVFBHeader. */ int fb_offset; } XVFBHeader; /** data of keyboard event */ typedef struct _XVFBKEYDATA { /** the scancode in minigui of the keyboard. */ unsigned short key_code; /** * the keyboard state * - 0 pressed * - 1 released */ unsigned short key_state; } XVFBKEYDATA; /** data of mouse event */ typedef struct _XVFBMOUSEDATA { /** x coordinate of mouse */ unsigned short x; /** y coordinate of mouse */ unsigned short y; /** * buttons pressed of mouse, can be OR'ed by following values: * - 0x0001 left button pressed * - 0x0002 right button pressed */ unsigned short btn; } XVFBMOUSEDATA; /** event sended to minigui by x virtual framebuffer*/ typedef struct _XVFBEVENT { /** * - 0 the event is mouse event * - 1 the event is keyboard event */ int event_type; union { /** keyboard event data*/ XVFBKEYDATA kb_data; /** mouse event data*/ XVFBMOUSEDATA mouse_data; }; } XVFBEVENT; /** the entry in palette*/ typedef struct _XVFBPalEntry { /** red of color in palette*/ unsigned char r; /** gree of color in palette*/ unsigned char g; /** blue of color in palette*/ unsigned char b; /** alpha weight of color in palette*/ unsigned char a; } XVFBPalEntry; /** * \var XVFBHeader* __mg_rtos_xvfb_event_buffer * \brief shared memory header of x virtual framebuffer. */ extern MG_EXPORT XVFBHeader* __mg_rtos_xvfb_header; /** * \var void* __mg_rtos_xvfb_event_buffer * \brief event circular buffer * * x virtual framebuffer put event to it, * and minigui get event from it. */ extern MG_EXPORT void* __mg_rtos_xvfb_event_buffer; /** @} end of xvfb_vars */ /** @} end of global_vars */ /** * \fn XVFBHeader* xVFBAllocVirtualFrameBuffer ( \ * int width, int height, int depth, \ * Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask, \ * BOOL MSBLeft) * \brief create virtual framebuffer * \param width the width of virtual framebuffer * \param height the height of virtual framebuffer * \param depth the color depth of virtual framebuffer * \param Rmask the pixel red color mask * \param Gmask the pixel green color mask * \param Bmask the pixel blue color mask * \param Amask the pixel alpha mask * \param MSBLeft The flag indicating the Most Significant Bits (MSB) \ * is left when depth is less than 8. * \return the header of virtual framebuffer */ MG_EXPORT XVFBHeader* GUIAPI xVFBAllocVirtualFrameBuffer (int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask, BOOL MSBLeft); /** * \fn void GUIAPI xVFBFreeVirtualFrameBuffer (XVFBHeader* buf) * \brief free virtual framebuffer. * * \param buf The pointer to virtual framebuffer. */ MG_EXPORT void GUIAPI xVFBFreeVirtualFrameBuffer (XVFBHeader* buf); /** * \fn void* GUIAPI xVFBCreateEventBuffer (int nr_events) * \brief create event circular buffer. * \param nr_events capability of the event buffer * \return the address of event circular buffer. */ MG_EXPORT void* GUIAPI xVFBCreateEventBuffer (int nr_events); /** * \fn void GUIAPI xVFBDestroyEventBuffer (void* event_buf) * \brief destroy event circular buffer. * \param event_buf The pointer to event circular buffer. */ MG_EXPORT void GUIAPI xVFBDestroyEventBuffer (void* event_buf); /** * \fn int xVFBNotifyNewEvent (const void* xvfb_event_buffer, XVFBEVENT* event) * \brief put a event to event circular buffer * \param xvfb_event_buffer event circular buffer * \param event event shall be put into xvfb_event_buffer * \return * - 0 indicate the event has been put into buffer * - 1 indicate the buffer is full * - 2 the buffer has been distroyed (MiniGUI terminated). */ MG_EXPORT int GUIAPI xVFBNotifyNewEvent (const void* xvfb_event_buffer, XVFBEVENT* event); #ifdef __cplusplus } #endif #endif