#include "pixelformat.h"
#include <QIODevice>
PixelFormat::PixelFormat() : ClientMessageBase(), ServerMessageBase(),
    m_bpp(0),m_depth(0),m_bigEndian(false),m_trueColor(true),m_redMax(0),
    m_greenMax(0),m_blueMax(0),m_redShift(0),m_greenShift(0),m_blueShift(0)
{
}

int PixelFormat::bpp() const
{
    return m_bpp;
}

int PixelFormat::depth() const
{
    return m_depth;
}

bool PixelFormat::bigEndian() const
{
    return m_bigEndian;
}

bool PixelFormat::trueColor() const
{
    return m_trueColor;
}

quint16 PixelFormat::redMax() const
{
    return m_redMax;
}

quint16 PixelFormat::greenMax() const
{
    return m_greenMax;
}

quint16 PixelFormat::blueMax() const
{
    return m_blueMax;
}

int PixelFormat::redShift() const
{
    return m_redShift;
}

int PixelFormat::greenShift() const
{
    return m_greenShift;
}

int PixelFormat::blueShift() const
{
    return m_blueShift;
}

void PixelFormat::setBpp( int value )
{
    m_bpp = value;
}

void PixelFormat::setDepth( int value )
{
    m_depth = value;
}

void PixelFormat::setBigEndian( bool value )
{
    m_bigEndian = value;
}

void PixelFormat::setTrueColor( bool value )
{
    m_trueColor = value;
}

void PixelFormat::setRedMax( quint16 value )
{
    m_redMax = value;
}

void PixelFormat::setGreenMax( quint16 value )
{
    m_greenMax = value;
}

void PixelFormat::setBlueMax( quint16 value )
{
    m_blueMax = value;
}

void PixelFormat::setRedShift( int value )
{
    m_redShift = value;
}

void PixelFormat::setGreenShift( int value )
{
    m_greenShift = value;
}

void PixelFormat::setBlueShift( int value )
{
    m_blueShift = value;
}

void PixelFormat::writeBytes( QIODevice *device ) const
{
    writeUint8(device, m_bpp);
    writeUint8(device, m_depth);
    writeBool(device, m_bigEndian);
    writeBool(device, m_trueColor);
    writeUint16( device, m_redMax );
    writeUint16( device, m_greenMax );
    writeUint16( device, m_blueMax );
    writeUint8( device, m_redShift );
    writeUint8( device, m_greenShift );
    writeUint8( device, m_blueShift );
    writeUint8( device, 0x0 );
    writeUint8( device, 0x0 );
    writeUint8( device, 0x0 );
}

bool PixelFormat::loadMessage( QIODevice *device )
{
    m_bpp = readUint8(device);
    m_depth = readUint8(device);
    m_bigEndian = readBool(device);
    m_trueColor = readBool(device);
    m_redMax = readUint16(device);
    m_greenMax = readUint16(device);
    m_blueMax = readUint16(device);
    m_redShift = readUint8(device);
    m_greenShift = readUint8(device);
    m_blueShift = readUint8(device);
    readUint8(device);
    readUint8(device);
    readUint8(device);

    return true;
}

QDebug operator <<( QDebug in, const PixelFormat & message )
{
        in << QString("Pixel format BPP: %1, Depth: %2, Big endian %3, Truecolor mode: %4, Red max: %5, Green max %6, Blue max %7, Red shift %8, Green shift %9, Blue shift %10")
                    .arg( message.bpp() )
                    .arg( message.depth())
                    .arg( message.bigEndian())
                    .arg( message.trueColor())
                    .arg( message.redMax(), 4, 16)
                    .arg( message.greenMax(), 4, 16)
                    .arg( message.blueMax(), 4, 16)
                    .arg( message.redShift(), 4, 16)
                    .arg( message.greenShift(), 4, 16)
                    .arg( message.blueShift(), 4, 16);
        return in;
}

