Use RASTER_SIZE() to compute... err... the raster size.
[bertos.git] / drv / lcd_gfx_qt.cpp
1 /**
2  * \file
3  * <!--
4  * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
5  * This file is part of DevLib - See README.devlib for information.
6  * -->
7  *
8  * \version $Id$
9  *
10  * \author Bernardo Innocenti <bernie@develer.com>
11  *
12  * \brief Custom control for graphics LCD emulation (interface)
13  */
14
15 /*#*
16  *#* $Log$
17  *#* Revision 1.3  2006/01/23 23:11:07  bernie
18  *#* Use RASTER_SIZE() to compute... err... the raster size.
19  *#*
20  *#* Revision 1.2  2006/01/17 02:30:43  bernie
21  *#* Fix QImage format.
22  *#*
23  *#* Revision 1.1  2006/01/16 03:51:35  bernie
24  *#* Add LCD Qt emulator.
25  *#*
26  *#*/
27
28 #include "lcd_gfx_qt.h"
29 #include <emul/emul.h>
30 #include <cfg/debug.h>
31
32 #include <qpainter.h>
33 #include <qimage.h>
34 #include <qsizepolicy.h>
35 #include <qsize.h>
36
37 // Display colors
38 #define LCD_FG_COLOR 0x0, 0x0, 0x0
39 #define LCD_BG_COLOR 0xBB, 0xCC, 0xBB
40
41
42 EmulLCD::EmulLCD(QWidget *parent, const char *name) :
43         QFrame(parent, name, WRepaintNoErase | WResizeNoErase),
44         fg_color(LCD_FG_COLOR),
45         bg_color(LCD_BG_COLOR)
46 {
47         // initialize bitmap
48         memset(raster, 0xAA, sizeof(raster));
49
50         // set widget frame
51         setFrameStyle(QFrame::Panel | QFrame::Sunken);
52         frame_width = frameWidth();
53 }
54
55
56 EmulLCD::~EmulLCD()
57 {
58         // nop
59 }
60
61
62 QSizePolicy EmulLCD::sizePolicy() const
63 {
64         return QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed, false);
65 }
66
67
68 QSize EmulLCD::sizeHint() const
69 {
70         return QSize(
71                 WIDTH + frame_width * 2,
72                 HEIGHT + frame_width * 2);
73 }
74
75
76 void EmulLCD::drawContents(QPainter *p)
77 {
78         QImage img(raster, WIDTH, HEIGHT, 1, NULL, 0, QImage::BigEndian);
79
80         p->setBackgroundMode(OpaqueMode);
81         p->setPen(fg_color);
82         p->setBackgroundColor(bg_color);
83         p->drawImage(frame_width, frame_width, img);
84 }
85
86 void EmulLCD::writeRaster(uint8_t *new_raster)
87 {
88         memcpy(raster, new_raster, sizeof(raster));
89
90         QPainter p(this);
91         drawContents(&p);
92 }
93
94
95
96 #include <gfx/gfx.h>
97 #include <cfg/debug.h>
98
99 /*!
100  * Raster buffer to draw into.
101  * Bits in the bitmap bytes have vertical orientation,
102  * as required by the LCD driver.
103  */
104 DECLARE_WALL(wall_before_raster, WALL_SIZE)
105 static uint8_t lcd_raster[RASTER_SIZE(EmulLCD::WIDTH, EmulLCD::HEIGHT)];
106 DECLARE_WALL(wall_after_raster, WALL_SIZE)
107
108 /*! Default LCD bitmap */
109 struct Bitmap lcd_bitmap;
110
111 extern "C" void lcd_init(void)
112 {
113         //INIT_WALL(wall_before_raster);
114         //INIT_WALL(wall_after_raster);
115         gfx_bitmapInit(&lcd_bitmap, lcd_raster, EmulLCD::WIDTH, EmulLCD::HEIGHT);
116         gfx_bitmapClear(&lcd_bitmap);
117 }
118
119 extern "C" void lcd_blit_bitmap(Bitmap *bm)
120 {
121         //CHECK_WALL(wall_before_raster);
122         //CHECK_WALL(wall_after_raster);
123         emul->emulLCD->writeRaster(bm->raster);
124 }
125
126 #include "lcd_gfx_qt_moc.cpp"
127