#include "gdevmem.h" /* private definitions */ #define mem_gray8_strip_copy_rop mem_gray8_rgb24_strip_copy_rop /* ================ Standard (byte-oriented) device ================ */ #undef chunk #define chunk byte /* Procedures */ declare_mem_procs(mem_mapped8_copy_mono, mem_mapped8_copy_color, mem_mapped8_fill_rectangle); /* The device descriptor. */ const gx_device_memory mem_mapped8_device = mem_device("image8", 8, 0, mem_mapped_map_rgb_color, mem_mapped_map_color_rgb, mem_mapped8_copy_mono, mem_mapped8_copy_color, mem_mapped8_fill_rectangle, mem_gray8_strip_copy_rop); /* Convert x coordinate to byte offset in scan line. */ #undef x_to_byte #define x_to_byte(x) (x) /* Fill a rectangle with a color. */ private int mem_mapped8_fill_rectangle(gx_device * dev, int x, int y, int w, int h, gx_color_index color) { gx_device_memory * const mdev = (gx_device_memory *)dev; fit_fill(dev, x, y, w, h); bytes_fill_rectangle(scan_line_base(mdev, y) + x, mdev->raster,
#include "gdevmem.h" /* private definitions */ #undef chunk #define chunk byte /* The 16 bits are divided 5 for red, 6 for green, and 5 for blue. */ /* Note that the bits must always be kept in big-endian order. */ /* Procedures */ declare_mem_map_procs(mem_true16_map_rgb_color, mem_true16_map_color_rgb); declare_mem_procs(mem_true16_copy_mono, mem_true16_copy_color, mem_true16_fill_rectangle); /* The device descriptor. */ const gx_device_memory far_data mem_true16_device = mem_device("image16", 16, 0, mem_true16_map_rgb_color, mem_true16_map_color_rgb, mem_true16_copy_mono, mem_true16_copy_color, mem_true16_fill_rectangle, gx_no_strip_copy_rop); /* Map a r-g-b color to a color index. */ private gx_color_index mem_true16_map_rgb_color(gx_device *dev, gx_color_value r, gx_color_value g, gx_color_value b) { return ((r >> (gx_color_value_bits - 5)) << 11) + ((g >> (gx_color_value_bits - 6)) << 5) + (b >> (gx_color_value_bits - 5)); } /* Map a color index to a r-g-b color. */ private int mem_true16_map_color_rgb(gx_device *dev, gx_color_index color, gx_color_value prgb[3])
/**************** NOTE: copy_rop only works for gray scale ****************/ extern dev_proc_strip_copy_rop(mem_gray_strip_copy_rop); /* ================ Standard (byte-oriented) device ================ */ #undef chunk #define chunk byte #define fpat(byt) mono_fill_make_pattern(byt) /* Procedures */ declare_mem_procs(mem_mapped2_copy_mono, mem_mapped2_copy_color, mem_mapped2_fill_rectangle); /* The device descriptor. */ const gx_device_memory far_data mem_mapped2_device = mem_device("image2", 2, 0, mem_mapped_map_rgb_color, mem_mapped_map_color_rgb, mem_mapped2_copy_mono, mem_mapped2_copy_color, mem_mapped2_fill_rectangle, mem_gray_strip_copy_rop); /* Convert x coordinate to byte offset in scan line. */ #undef x_to_byte #define x_to_byte(x) ((x) >> 2) /* Define the 2-bit fill patterns. */ static const mono_fill_chunk tile_patterns[4] = { fpat(0x00), fpat(0x55), fpat(0xaa), fpat(0xff) }; /* Fill a rectangle with a color. */ private int mem_mapped2_fill_rectangle(gx_device *dev, int x, int y, int w, int h, gx_color_index color)