//************************************************************************
// The Logitech LCD SDK, including all acompanying documentation,
// is protected by intellectual property laws. All use of the Logitech
// LCD SDK is subject to the License Agreement found in the
// "Logitech LCD SDK License Agreement" file and in the Reference Manual.
// All rights not expressly granted by Logitech are reserved.
//************************************************************************
//************************************************************************
//
// LCDPage.cpp
//
// Collection of items representing a page.
//
// Logitech LCD SDK
//
// Copyright 2010 Logitech Inc.
//************************************************************************
#include "LCDUI.h"
//************************************************************************
//
// CLCDPage::CLCDPage
//
//************************************************************************
CLCDPage::CLCDPage(void)
: m_dwStartTime(0),
m_dwEllapsedTime(0),
m_dwExpirationTime(0)
{
SetExpiration(INFINITE);
m_bUseBitmapBackground = FALSE;
m_bUseColorBackground = FALSE;
}
//************************************************************************
//
// CLCDPage::~CLCDPage
//
//************************************************************************
CLCDPage::~CLCDPage(void)
{
}
//************************************************************************
//
// CLCDPage::OnDraw
//
//************************************************************************
void CLCDPage::OnDraw(CLCDGfxBase &rGfx)
{
if(!IsVisible())
{
return;
}
//Draw the background first
if(m_bUseBitmapBackground)
{
m_Background.OnDraw(rGfx);
}
else if(m_bUseColorBackground)
{
HBRUSH hBackBrush = CreateSolidBrush(m_BackgroundColor);
HBRUSH hOldBrush = (HBRUSH)SelectObject(rGfx.GetHDC(), hBackBrush);
Rectangle(rGfx.GetHDC(), 0, 0, GetWidth(), GetHeight());
SelectObject(rGfx.GetHDC(), hOldBrush);
DeleteObject(hBackBrush);
}
//iterate through your objects and draw them
LCD_OBJECT_LIST::iterator it = m_Objects.begin();
while(it != m_Objects.end())
{
CLCDBase *pObject = *it++;
LCDUIASSERT(NULL != pObject);
if (pObject->IsVisible())
{
// create the clip region
// Note that pages can now be added to pages (GetOrigin of the page is now factored in)
HRGN hRgn = CreateRectRgn(GetOrigin().x + pObject->GetOrigin().x, GetOrigin().y + pObject->GetOrigin().y,
GetOrigin().x + pObject->GetOrigin().x + pObject->GetWidth(),
GetOrigin().y + pObject->GetOrigin().y + pObject->GetHeight());
// ensure that controls only draw within their specified region
SelectClipRgn(rGfx.GetHDC(), hRgn);
// free the region (a copy is used in the call above)
DeleteObject(hRgn);
// offset the control at its origin so controls use (0,0)
POINT ptPrevViewportOrg = { 0, 0 };
SetViewportOrgEx(rGfx.GetHDC(),
GetOrigin().x + pObject->GetOrigin().x,
GetOrigin().y + pObject->GetOrigin().y,
&ptPrevViewportOrg);
// allow controls to supply additional translation
// this allows controls to move freely within the confined viewport
OffsetViewportOrgEx(rGfx.GetHDC(),
pObject->GetLogicalOrigin().x,
pObject->GetLogicalOrigin().y,
NULL);
pObject->OnDraw(rGfx);
// set the clipping region to nothing
SelectClipRgn(rGfx.GetHDC(), NULL);
// restore the viewport origin
SetViewportOrgEx(rGfx.GetHDC(),
ptPrevViewportOrg.x,
ptPrevViewportOrg.y,
NULL);
// restore the viewport origin offset
OffsetViewportOrgEx(rGfx.GetHDC(), 0, 0, NULL);
}
}
}
//************************************************************************
//
// CLCDPage::OnUpdate
//
//************************************************************************
void CLCDPage::OnUpdate(DWORD dwTimestamp)
{
m_dwEllapsedTime = (dwTimestamp - m_dwStartTime);
CLCDCollection::OnUpdate(dwTimestamp);
}
//************************************************************************
//
// CLCDPage::OnLCDButtonDown
//
//************************************************************************
void CLCDPage::OnLCDButtonDown(int nButton)
{
UNREFERENCED_PARAMETER(nButton);
}
//************************************************************************
//
// CLCDPage::OnLCDButtonUp
//
//************************************************************************
void CLCDPage::OnLCDButtonUp(int nButton)
{
UNREFERENCED_PARAMETER(nButton);
}
//************************************************************************
//
// CLCDPage::SetExpiration
//
//************************************************************************
void CLCDPage::SetExpiration(DWORD dwMilliseconds)
{
m_dwStartTime = GetTickCount();
m_dwEllapsedTime = 0;
m_dwExpirationTime = dwMilliseconds;
}
//************************************************************************
//
// CLCDPage::HasExpired
//
//************************************************************************
BOOL CLCDPage::HasExpired(void)
{
return (!m_dwStartTime || !m_dwExpirationTime || (m_dwEllapsedTime >= m_dwExpirationTime));
}
//************************************************************************
//
// CLCDPage::SetBackground (using a bitmap)
//
//************************************************************************
void CLCDPage::SetBackground(HBITMAP hBitmap)
{
m_Background.SetBitmap(hBitmap);
m_Background.SetSize(320, 240);
m_bUseBitmapBackground = TRUE;
m_bUseColorBackground = FALSE;
}
//************************************************************************
//
// CLCDPage::SetBackground (using a color)
//
//************************************************************************
void CLCDPage::SetBackground(COLORREF Color)
{
m_BackgroundColor = Color;
m_bUseColorBackground = TRUE;
m_bUseBitmapBackground = FALSE;
}
//** end of LCDPage.cpp **************************************************
↑ V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: m_BackgroundColor.
↑ V807 Decreased performance. Consider creating a reference to avoid using the 'pObject->GetOrigin()' expression repeatedly.