MiniDisplay/minidisplay.cpp
author sl
Wed, 28 May 2014 08:06:27 +0200
changeset 6 b1b049e28772
parent 5 62a1d3631dcb
child 8 9543e1703afb
permissions -rw-r--r--
Basic font rendering now working nicely.
sl@2
     1
#include "minidisplay.h"
sl@5
     2
#include <QPainter>
sl@2
     3
sl@2
     4
MiniDisplay::MiniDisplay(QQuickItem *parent):
sl@2
     5
    QQuickItem(parent)
sl@2
     6
{
sl@2
     7
    // By default, QQuickItem does not draw anything. If you subclass
sl@2
     8
    // QQuickItem to create a visual item, you will need to uncomment the
sl@2
     9
    // following line and re-implement updatePaintNode()
sl@2
    10
sl@2
    11
    // setFlag(ItemHasContents, true);
sl@3
    12
    //
sl@4
    13
    //qDebug() << "New MiniDisplay";
sl@2
    14
}
sl@2
    15
sl@2
    16
MiniDisplay::~MiniDisplay()
sl@2
    17
{
sl@4
    18
    //qDebug() << "Delete MiniDisplay";
sl@2
    19
}
sl@2
    20
sl@4
    21
sl@4
    22
void MiniDisplay::open()
sl@4
    23
{
sl@4
    24
    if (iDisplay.Open())
sl@4
    25
    {
sl@5
    26
        emit opened();
sl@5
    27
        emit statusChanged();
sl@4
    28
    }
sl@4
    29
    else
sl@4
    30
    {
sl@5
    31
        emit openError();
sl@4
    32
    }
sl@4
    33
}
sl@4
    34
sl@4
    35
sl@4
    36
void MiniDisplay::close()
sl@4
    37
{
sl@4
    38
    iDisplay.Close();
sl@5
    39
    emit closed();
sl@5
    40
    emit statusChanged();
sl@4
    41
}
sl@4
    42
sl@4
    43
bool MiniDisplay::isOpen()
sl@4
    44
{
sl@4
    45
    return iDisplay.IsOpen();
sl@4
    46
}
sl@4
    47
sl@4
    48
void MiniDisplay::clear()
sl@4
    49
{
sl@4
    50
    if (!iDisplay.IsOpen()) return;
sl@4
    51
    //
sl@4
    52
    iDisplay.Clear();
sl@4
    53
}
sl@4
    54
sl@4
    55
void MiniDisplay::fill()
sl@4
    56
{
sl@4
    57
    if (!iDisplay.IsOpen()) return;
sl@4
    58
    //
sl@4
    59
    iDisplay.SetAllPixels(0xFF);
sl@4
    60
}
sl@4
    61
sl@4
    62
void MiniDisplay::swapBuffers()
sl@4
    63
{
sl@4
    64
    if (!iDisplay.IsOpen()) return;
sl@4
    65
    //
sl@4
    66
    iDisplay.SwapBuffers();
sl@4
    67
}
sl@5
    68
sl@5
    69
/**
sl@5
    70
 * @brief setFont
sl@5
    71
 * @param aFont
sl@5
    72
 */
sl@5
    73
void MiniDisplay::setFont(const QFont& aFont)
sl@5
    74
{
sl@5
    75
    iFont=aFont;
sl@6
    76
    iFont.setStyleStrategy(QFont::NoAntialias);
sl@5
    77
    QString strDemo="0123456789ABCDEF";
sl@5
    78
    QFontMetrics metrics(iFont);
sl@6
    79
    int w=metrics.width(strDemo);
sl@6
    80
    int h=metrics.height();
sl@6
    81
    QSize size(w,h);
sl@5
    82
    QImage image(size,QImage::Format_Mono);
sl@5
    83
    image.fill(0xFFFFFFFF);
sl@6
    84
    //Draw some text into our image
sl@5
    85
    {
sl@5
    86
        QPainter painter(&image);
sl@5
    87
        //painter.begin(&image);
sl@5
    88
        painter.setPen(0xFF000000);
sl@5
    89
        painter.setFont(iFont);
sl@5
    90
        painter.drawText(0,metrics.ascent(),strDemo);
sl@5
    91
    }
sl@6
    92
    //Save image as PNG for validation
sl@5
    93
    image.save("font.png");
sl@6
    94
    //
sl@6
    95
    //int sizeInBytes=image.byteCount();
sl@6
    96
    int pixelCount=w*h;
sl@6
    97
    BitArray bits(pixelCount);
sl@6
    98
sl@6
    99
    for (int i=0;i<w;i++)
sl@6
   100
        {
sl@6
   101
        for (int j=0;j<h;j++)
sl@6
   102
            {
sl@6
   103
            QRgb color=image.pixel(i,j);
sl@6
   104
            if (color!=0xffffffff)
sl@6
   105
                {
sl@6
   106
                bits.SetBit(i*h+j);
sl@6
   107
                }
sl@6
   108
            }
sl@6
   109
        }
sl@6
   110
sl@6
   111
    iDisplay.Clear();
sl@6
   112
    iDisplay.BitBlit(bits,w,h,0,0);
sl@6
   113
    iDisplay.SwapBuffers();
sl@6
   114
    //
sl@5
   115
}