mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 06:53:43 +00:00
123 lines
2.6 KiB
C++
123 lines
2.6 KiB
C++
#include "QDState.h"
|
|
|
|
#include "PLQDraw.h"
|
|
#include "QDStandardPalette.h"
|
|
|
|
namespace PortabilityLayer
|
|
{
|
|
QDState::QDState()
|
|
: m_fontID(applFont)
|
|
, m_textSize(12)
|
|
, m_textFace(0)
|
|
, m_foreResolvedColor16(0)
|
|
, m_backResolvedColor16(0)
|
|
, m_foreResolvedColor8(0)
|
|
, m_backResolvedColor8(0)
|
|
, m_isForeResolved16(false)
|
|
, m_isBackResolved16(false)
|
|
, m_isForeResolved8(false)
|
|
, m_isBackResolved8(false)
|
|
, m_clipRect(Rect::Create(INT16_MIN, INT16_MIN, INT16_MAX, INT16_MAX))
|
|
, m_penInvert(false)
|
|
, m_penMask(false)
|
|
, m_havePattern8x8(false)
|
|
{
|
|
m_backUnresolvedColor.r = m_backUnresolvedColor.g = m_backUnresolvedColor.b = m_backUnresolvedColor.a = 255;
|
|
m_foreUnresolvedColor.r = m_foreUnresolvedColor.g = m_foreUnresolvedColor.b = 0;
|
|
m_foreUnresolvedColor.a = 255;
|
|
m_penPos.h = m_penPos.v = 0;
|
|
|
|
memset(m_pattern8x8, 0, sizeof(m_pattern8x8));
|
|
}
|
|
|
|
void QDState::SetForeColor(const RGBAColor &color)
|
|
{
|
|
m_foreUnresolvedColor = color;
|
|
m_isForeResolved16 = false;
|
|
m_isForeResolved8 = false;
|
|
}
|
|
|
|
void QDState::SetBackColor(const RGBAColor &color)
|
|
{
|
|
m_backUnresolvedColor = color;
|
|
m_isBackResolved16 = false;
|
|
m_isBackResolved8 = false;
|
|
}
|
|
|
|
const RGBAColor &QDState::GetForeColor() const
|
|
{
|
|
return m_foreUnresolvedColor;
|
|
}
|
|
|
|
const RGBAColor &QDState::GetBackColor() const
|
|
{
|
|
return m_backUnresolvedColor;
|
|
}
|
|
|
|
uint8_t QDState::ResolveForeColor8(const RGBAColor *palette, unsigned int numColors)
|
|
{
|
|
return ResolveColor8(m_foreUnresolvedColor, m_foreResolvedColor8, m_isForeResolved8, palette, numColors);
|
|
}
|
|
|
|
uint8_t QDState::ResolveBackColor8(const RGBAColor *palette, unsigned int numColors)
|
|
{
|
|
return ResolveColor8(m_backUnresolvedColor, m_backResolvedColor8, m_isBackResolved8, palette, numColors);
|
|
}
|
|
|
|
uint8_t QDState::ResolveColor8(const RGBAColor &color, uint8_t &cached, bool &isCached, const RGBAColor *palette, unsigned int numColors)
|
|
{
|
|
if (isCached)
|
|
return cached;
|
|
|
|
if (palette)
|
|
{
|
|
PL_NotYetImplemented();
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
const uint8_t resolvedColor = StandardPalette::GetInstance()->MapColorLUT(color);
|
|
|
|
isCached = true;
|
|
cached = resolvedColor;
|
|
|
|
return resolvedColor;
|
|
}
|
|
}
|
|
|
|
void QDState::SetPenPattern8x8(const uint8_t *pattern)
|
|
{
|
|
if (!pattern)
|
|
{
|
|
m_havePattern8x8 = false;
|
|
return;
|
|
}
|
|
|
|
bool isSolid = true;
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
if (pattern[i] != 0xff)
|
|
{
|
|
isSolid = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (isSolid)
|
|
m_havePattern8x8 = false;
|
|
else
|
|
{
|
|
m_havePattern8x8 = true;
|
|
memcpy(m_pattern8x8, pattern, sizeof(m_pattern8x8));
|
|
}
|
|
}
|
|
|
|
const uint8_t *QDState::GetPattern8x8() const
|
|
{
|
|
if (m_havePattern8x8)
|
|
return m_pattern8x8;
|
|
|
|
return nullptr;
|
|
}
|
|
}
|