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

📄 r2d_i.h

📁 是一个手机功能的模拟程序
💻 H
📖 第 1 页 / 共 2 页
字号:
          R2D_FREE(p); \
	  } \
    } \
   }


// Return refcount of an object
#define R2D_REFCOUNT(p) (((T_R2D_REFCOUNT*)(p))->refcount)

// Compute dithered value
// lightness is either the gray intensity (for monochrome)
// or the component intensity.
// It is coded on at most 8 bits
#if (R2D_DITHERING == R2D_ON)

  #define r2d_dithering_group_and_lightness() \
  lightness = lightness >> (8 - R2D_DITHERING_DIMENSION - R2D_PIXEL_DEPTH); \
        dithering_group=lightness >> R2D_DITHERING_DIMENSION; \
 \
        lightness=lightness & R2D_DITHERED_MASK;

  #define r2d_dithered_value(x,y) \
  \
        dvalue=dithering_group; \
        if (lightness>=r2d_get_dithering_matrix_entry(r2d_g_dithering_matrix,x,y)) \
          dvalue+=1; \
\
        if (dvalue) \
          dvalue--;
#else
  #define r2d_dithering_group_and_lightness()
  #define r2d_dithered_value(x,y)
#endif

extern INT32 r2d_ptree_find(INT32 *tree,INT32 unicode);

////////////////////////////////////////
//
//    LCD
//    FUNCTIONS
//

extern void r2d_convert_foreground_color(T_R2D_GC *gc,UINT32 color);
extern void r2d_convert_background_color(T_R2D_GC *gc,UINT32 color);
extern BOOLEAN r2d_lcd_foreground_pixel(UINT32 lcd_value,T_R2D_GC_PTR src_gc);
extern UINT32 r2d_color_to_lcd(UINT32 pixel_value,INT16 x,INT16 y);
extern UINT32 r2d_lcd_to_color(UINT32 color);

////////////////////////////////////////
//
//    SHAPE LOW LEVEL
//    FUNCTIONS
//

void r2d_release_rectangle(T_R2D_SHAPE *self);
void r2d_draw_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
void r2d_fill_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
T_R2D_SHAPE_PTR r2d_clone_rectangle_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self);

void r2d_release_circle(T_R2D_SHAPE *self);
void r2d_draw_circle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
void r2d_fill_circle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
T_R2D_SHAPE_PTR r2d_clone_circle_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self);

void r2d_release_ellipse(T_R2D_SHAPE *self);
void r2d_draw_ellipse_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
void r2d_fill_ellipse_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);

void r2d_release_round_rectangle(T_R2D_SHAPE *self);
void r2d_draw_round_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
void r2d_fill_round_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
T_R2D_SHAPE_PTR r2d_clone_round_rectangle_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self);

void r2d_release_arc(T_R2D_SHAPE *self);
void r2d_draw_arc_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
void r2d_fill_arc_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
T_R2D_SHAPE_PTR r2d_clone_arc_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self);

void r2d_release_text(T_R2D_SHAPE *self);
void r2d_draw_text_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
void r2d_fill_text_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc);
T_R2D_SHAPE_PTR r2d_clone_text_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self);

void r2d_translate_rectangle_shape(T_R2D_SHAPE *self,INT16 dx,INT16 dy);
void r2d_translate_point_shape(T_R2D_SHAPE *self,INT16 dx,INT16 dy);

BOOLEAN r2d_point_in_rectangle_shape(T_R2D_SHAPE *self,INT16 x,INT16 y);
BOOLEAN r2d_point_in_circle_shape(T_R2D_SHAPE *self,INT16 x,INT16 y);
BOOLEAN r2d_point_in_ellipse_shape(T_R2D_SHAPE *self,INT16 x,INT16 y);
BOOLEAN r2d_point_in_round_rectangle_shape(T_R2D_SHAPE *self,INT16 x,INT16 y);
BOOLEAN r2d_point_in_not_supported_shape(T_R2D_SHAPE *self,INT16 x,INT16 y);

////////////////////////////////////////
//
//    FRAMEBUFFER ACCESS
//    FUNCTIONS
//



// Write a pixel at position x,y with graphic context gc
// pixel_value must be compatible with the framebuffer owned
// by the graphic context. No color conversion is done
// here
extern void r2d_write_lcd_pixel(T_R2D_GC *gc,INT16 x,INT16 y,UINT32 pixel_value, T_R2D_DRAWING_MODE mode );
extern void r2d_write_lcd_line(T_R2D_GC* gc,INT16 x,INT16 y,INT16 nb,R2D_BOOLEAN
background);


extern T_R2D_DRAWING_OP r2d_get_drawing_op(T_R2D_GC *gc,T_R2D_DRAWING_MODE mode);
#if (R2D_ASM == R2D_ON)
extern UINT32 * r2d_get_asm_drawing_op(T_R2D_GC *gc,T_R2D_DRAWING_MODE mode);

#endif

////////////////////////////////////////
//
//    COLOR
//    FUNCTIONS
//

// color conversion : on the fly dithering and color scaling
// with final conversion to the format used by the LCD if needed
// The dithered matrix or the pixel_value are cached into the gc
// structure
extern void r2d_convert_foreground_color(T_R2D_GC *gc,UINT32 color);
extern void r2d_convert_background_color(T_R2D_GC *gc,UINT32 color);

// Get value at dithering matrix position
#define r2d_get_dithering_matrix_entry(matrix,x,y) \
 *(matrix+(x&1)+(y&1)*2)

// Set element (x,y) of dithering or dithered matrix
extern void r2d_set_dithering_matrix_entry(UINT32 *matrix,UINT32 elem,INT16 x,INT16 y);

extern void r2d_convert_foreground_color_color(T_R2D_GC *gc,UINT32 color);
extern void r2d_convert_background_color_color(T_R2D_GC *gc,UINT32 color);

extern UINT16 r2d_max_color(UINT16 red,UINT16 green, UINT16 blue);
// Get min component
extern UINT16 r2d_min_color(UINT16 red,UINT16 green, UINT16 blue);

extern UINT32 r2d_get_color_pixel_value(T_R2D_GC *gc,INT16 x,INT16 y);

/********************************tangyan add it *********************************/
extern UINT32 r2d_getpixelvalue(T_R2D_GC * gc, INT16 x, INT16 y);
extern UINT32 r2d_cpy_lcdbuffer(T_R2D_GC* gc, UINT32 lcdy, UINT32 yincreament);
////////////////////////////////////////
//
//    TEXT
//    FUNCTIONS
//

#define r2d_get_char_x(p) (((INT32*)p)[0])

////////////////////////////////////////
//
//    COPY
//    FUNCTIONS
//

#if (R2D_ASM == R2D_OFF)

void           r2d_blit_lcd_to_lcd(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc,
                 T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle,
				 R2D_BOOLEAN use_foreground_color);

void           r2d_blit_color_to_color(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc,
                 T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle,
				 R2D_BOOLEAN use_foreground_color);

void           r2d_blit_lcd_to_color(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc,
                 T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle,
				 R2D_BOOLEAN use_foreground_color);

void           r2d_blit_color_to_lcd(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc,
                 T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle,
				 R2D_BOOLEAN use_foreground_color);
#else

void           r2d_blit_asm(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc,
                             T_R2D_SHAPE_PTR src_rectangle, 
							 T_R2D_SHAPE_PTR dst_rectangle,
							 R2D_BOOLEAN use_foreground_color,INT32 srcdst);
#endif


/***************************
  
	 DEFINES

***************************/

/* FOR SEARCH INSIDE PATRICIA TREE */
#define R2D_PTREE_TYPE 3
#define R2D_PTREE_BRANCHING 0
#define R2D_PTREE_PREFIX 1
#define R2D_PTREE_UNICODE_BLOCK 0
#define R2D_PTREE_GLYPH_INDEX 1
#define R2D_PTREE_CONVERSION 2
#define R2D_PTREE_LEFT 2
#define R2D_PTREE_RIGHT 3
#define R2D_PTREE_CONVERSION 2
#define R2D_PTREE_T_LEAF 0
#define R2D_PTREE_SHIFT 4

/* FOR FONT DESCRIPTION */

#define R2D_SMALL_SYSTEM_NORMAL 0
#define R2D_SMALL_SYSTEM_BOLD 1
#define R2D_SMALL_SYSTEM_ITALIC 2
#define R2D_SMALL_SYSTEM_BOLD_ITALIC 3

#define R2D_MEDIUM_SYSTEM_NORMAL 4
#define R2D_MEDIUM_SYSTEM_BOLD 5
#define R2D_MEDIUM_SYSTEM_ITALIC 6
#define R2D_MEDIUM_SYSTEM_BOLD_ITALIC 7

#define R2D_BIG_SYSTEM_NORMAL 8
#define R2D_BIG_SYSTEM_BOLD 9
#define R2D_BIG_SYSTEM_ITALIC 10
#define R2D_BIG_SYSTEM_BOLD_ITALIC 11

#define R2D_SMALL_TYPEWRITER_NORMAL 12
#define R2D_SMALL_TYPEWRITER_BOLD 13
#define R2D_SMALL_TYPEWRITER_ITALIC 14
#define R2D_SMALL_TYPEWRITER_BOLD_ITALIC 15

#define R2D_MEDIUM_TYPEWRITER_NORMAL 16
#define R2D_MEDIUM_TYPEWRITER_BOLD 17
#define R2D_MEDIUM_TYPEWRITER_ITALIC 18
#define R2D_MEDIUM_TYPEWRITER_BOLD_ITALIC 19

#define R2D_BIG_TYPEWRITER_NORMAL 20
#define R2D_BIG_TYPEWRITER_BOLD 21
#define R2D_BIG_TYPEWRITER_ITALIC 22
#define R2D_BIG_TYPEWRITER_BOLD_ITALIC 23

#define R2D_SMALL_PROPORTIONAL_NORMAL 24
#define R2D_SMALL_PROPORTIONAL_BOLD 25
#define R2D_SMALL_PROPORTIONAL_ITALIC 26
#define R2D_SMALL_PROPORTIONAL_BOLD_ITALIC 27

#define R2D_MEDIUM_PROPORTIONAL_NORMAL 28
#define R2D_MEDIUM_PROPORTIONAL_BOLD 29
#define R2D_MEDIUM_PROPORTIONAL_ITALIC 30
#define R2D_MEDIUM_PROPORTIONAL_BOLD_ITALIC 31

#define R2D_BIG_PROPORTIONAL_NORMAL 32
#define R2D_BIG_PROPORTIONAL_BOLD 33
#define R2D_BIG_PROPORTIONAL_ITALIC 34
#define R2D_BIG_PROPORTIONAL_BOLD_ITALIC 35


/***************************

     GLOBALS

****************************/

// and for reentrancy they should be read only if possible
// or protected by a semaphore otherwise

#if (R2D_ASM == R2D_ON)
extern T_RVF_MUTEX * r2d_g_blit_mutex;
extern T_R2D_DRAWING_MODE r2d_g_old_mode;
extern R2D_BOOLEAN r2d_g_old_use_foreground;
extern INT32 r2d_g_old_srcdst;
#endif

// Global mutex for access to global variables
extern T_RVF_MUTEX * r2d_g_global_mutex;


// Drawing operators (C version)
extern const T_R2D_DRAWING_OPERATORS r2d_g_lcd_operators,r2d_g_color_operators;

extern UINT32 *r2d_g_asm_lcd_operators[],*r2d_g_asm_color_operators[];

// LCD framebuffer
extern T_R2D_FRAMEBUFFER* r2d_g_framebuffer;
/* Robert Chen add, for sub LCD, 2003-12-13 */
#if R2D_SUBLCD_SUPPORT
extern T_R2D_FRAMEBUFFER* r2d_g_subframebuffer;  /* for sub LCD */
#endif

// For fonts 

extern T_R2D_FONT_DESCRIPTION *r2d_g_font_configuration;

// (default pointers for initialization of graphical context)
extern T_R2D_FRAMEBUFFER *r2d_g_default_font_framebuffer;
extern INT32 *r2d_g_default_font_metrics;
extern INT32 *r2d_g_default_font_table;


// Dithering matrix
extern UINT32 *r2d_g_dithering_matrix;

// Class globals
extern const T_R2D_CLASS_SHAPE r2d_class_rectangle;
extern const T_R2D_CLASS_SHAPE r2d_class_circle;
extern const T_R2D_CLASS_SHAPE r2d_class_ellipse;
extern const T_R2D_CLASS_SHAPE r2d_class_round_rectangle;
extern const T_R2D_CLASS_SHAPE r2d_class_arc;
extern const T_R2D_CLASS_SHAPE r2d_class_text;

// Memory bank id
extern T_RVF_MB_ID r2d_mb_id;

// Global LCD graphical context
extern T_R2D_GC_PTR r2d_g_lcd_gc;
extern T_R2D_GC_PTR r2d_g_lcd_gc;

// Global flag to check if event required
extern INT8 r2d_g_event_was_sent;

// Global flag to disable refresh
extern INT16 r2d_g_refresh_disabled;

/* global addr id */
extern T_RVF_ADDR_ID r2d_addr_id;


#endif

⌨️ 快捷键说明

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