X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Flcd_gfx_qt.cpp;h=e42be22d2fc98ae90c11b087dd32c738fea32450;hb=cdf0c088714fe7b9ee7e10b94858d8eff41f7899;hp=e4582a358a158106df610f52a53aab9a620b77e9;hpb=7fce34e18d9cf800aa5756408c8f9deffccc74bc;p=bertos.git diff --git a/drv/lcd_gfx_qt.cpp b/drv/lcd_gfx_qt.cpp old mode 100755 new mode 100644 index e4582a35..e42be22d --- a/drv/lcd_gfx_qt.cpp +++ b/drv/lcd_gfx_qt.cpp @@ -1,8 +1,33 @@ /** * \file * * * \version $Id$ @@ -12,24 +37,15 @@ * \brief Custom control for graphics LCD emulation (interface) */ -/*#* - *#* $Log$ - *#* Revision 1.2 2006/01/17 02:30:43 bernie - *#* Fix QImage format. - *#* - *#* Revision 1.1 2006/01/16 03:51:35 bernie - *#* Add LCD Qt emulator. - *#* - *#*/ - #include "lcd_gfx_qt.h" #include #include +#include // CONFIG_BITMAP_FMT -#include -#include -#include -#include +#include +#include +#include +#include // Display colors #define LCD_FG_COLOR 0x0, 0x0, 0x0 @@ -37,7 +53,7 @@ EmulLCD::EmulLCD(QWidget *parent, const char *name) : - QFrame(parent, name, WRepaintNoErase | WResizeNoErase), + QFrame(parent, name, Qt::WRepaintNoErase | Qt::WResizeNoErase), fg_color(LCD_FG_COLOR), bg_color(LCD_BG_COLOR) { @@ -70,22 +86,45 @@ QSize EmulLCD::sizeHint() const } -void EmulLCD::drawContents(QPainter *p) +void EmulLCD::paintEvent(QPaintEvent * /*event*/) { + QPainter p(this); QImage img(raster, WIDTH, HEIGHT, 1, NULL, 0, QImage::BigEndian); - p->setBackgroundMode(OpaqueMode); - p->setPen(fg_color); - p->setBackgroundColor(bg_color); - p->drawImage(frame_width, frame_width, img); + p.setBackgroundMode(Qt::OpaqueMode); + p.setPen(fg_color); + p.setBackgroundColor(bg_color); + p.drawImage(frame_width, frame_width, img); } void EmulLCD::writeRaster(uint8_t *new_raster) { +#if CONFIG_BITMAP_FMT == BITMAP_FMT_PLANAR_H_MSB + + /* Straight copy */ memcpy(raster, new_raster, sizeof(raster)); - QPainter p(this); - drawContents(&p); +#elif CONFIG_BITMAP_FMT == BITMAP_FMT_PLANAR_V_LSB + + /* Rotation */ + for (int y = 0; y < HEIGHT; ++y) + { + for (int xbyte = 0; xbyte < WIDTH/8; ++xbyte) + { + uint8_t v = 0; + for (int xbit = 0; xbit < 8; ++xbit) + v |= (new_raster[(xbyte * 8 + xbit) + (y / 8) * WIDTH] & (1 << (y%8)) ) + ? 0 : (1 << (7 - xbit)); + + raster[y * ((WIDTH + 7) / 8) + xbyte] = v; + } + } + +#else + #error Unsupported bitmap format +#endif + + repaint(); } @@ -93,30 +132,31 @@ void EmulLCD::writeRaster(uint8_t *new_raster) #include #include -/*! +DECLARE_WALL(wall_before_raster, WALL_SIZE) +/** * Raster buffer to draw into. + * * Bits in the bitmap bytes have vertical orientation, * as required by the LCD driver. */ -DECLARE_WALL(wall_before_raster, WALL_SIZE) -static uint8_t lcd_raster[(EmulLCD::WIDTH + 7 / 8) * EmulLCD::HEIGHT]; +static uint8_t lcd_raster[RAST_SIZE(EmulLCD::WIDTH, EmulLCD::HEIGHT)]; DECLARE_WALL(wall_after_raster, WALL_SIZE) -/*! Default LCD bitmap */ +/** Default LCD bitmap */ struct Bitmap lcd_bitmap; -extern "C" void lcd_init(void) +/*extern "C"*/ void lcd_init(void) { - //INIT_WALL(wall_before_raster); - //INIT_WALL(wall_after_raster); + //FIXME INIT_WALL(wall_before_raster); + //FIXME INIT_WALL(wall_after_raster); gfx_bitmapInit(&lcd_bitmap, lcd_raster, EmulLCD::WIDTH, EmulLCD::HEIGHT); gfx_bitmapClear(&lcd_bitmap); } -extern "C" void lcd_blit_bitmap(Bitmap *bm) +/*extern "C"*/ void lcd_blitBitmap(Bitmap *bm) { - //CHECK_WALL(wall_before_raster); - //CHECK_WALL(wall_after_raster); + //FIXME CHECK_WALL(wall_before_raster); + //FIXME CHECK_WALL(wall_after_raster); emul->emulLCD->writeRaster(bm->raster); }