Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

Widgets/BitmapWidget.cpp

Committer:
duncanFrance
Date:
2016-05-22
Revision:
16:e9a771ecfdbe
Parent:
15:e69fd74d42e4

File content as of revision 16:e9a771ecfdbe:

#include "BitmapWidget.h"

BitmapWidget::BitmapWidget(GraphicsContext *context) : 
Widget(context), _monochrome(false), _bitmapWidth(0), _bitmapHeight(0)
{
}

BitmapWidget::BitmapWidget(GraphicsContext *context, bool monochrome) : 
Widget(context), _monochrome(monochrome), _bitmapWidth(0), _bitmapHeight(0)
{
}

void BitmapWidget::setMonochrome(bool enabled)
{
    _monochrome = enabled;
    dirty();
}

bool BitmapWidget::isMonochrome()
{
    return _monochrome;
}


void BitmapWidget::setBitmap(unsigned char const * bitmap, int width, int height)
{
    _bitmap = (unsigned char*)bitmap;
    _bitmapWidth = width;
    _bitmapHeight = height;
    // Adjust overall size so that the inner window fits the bitmap
    // Really we should just clip, but that's too hard for now
    setSize(((_padding + _borderWidth) * 2) + _bitmapWidth, ((_padding + _borderWidth) * 2) + _bitmapHeight);
    dirty();
}

void BitmapWidget::setBorder(int width, uint16_t color)
{
    Widget::setBorder(width, color);
    setSize(((_padding + _borderWidth) * 2) + _bitmapWidth, ((_padding + _borderWidth) * 2) + _bitmapHeight);
    dirty();
}

void BitmapWidget::_draw()
{
    Widget::_draw();
    
    if(_monochrome) {
        int fg = display()->getForeground();
        int bg = display()->getBackground();
        display()->setForeground(_fg);
        display()->setBackground(_bg);

        display()->Bitmap_FG_BG(_inner.x, _inner.y, _inner.width, _inner.height, _bitmap);

        display()->setForeground(fg);
        display()->setBackground(bg);
    } else {
        display()->Bitmap(_inner.x, _inner.y, _inner.width, _inner.height, _bitmap);
    }
}