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