Blame | Last modification | View Log | RSS feed
//************************************************************************//// LCDAnimatedBitmap.cpp//// The CLCDAnimatedBitmap class draws animated bitmaps onto the LCD.// An animated bitmap consists of a tiled bitmap representing the// animation. The tile size is set with the SetSubpicWidth.//// Logitech LCD SDK//// Copyright 2005 Logitech Inc.//************************************************************************#include "LCDAnimatedBitmap.h"//************************************************************************//// CLCDAnimatedBitmap::CLCDAnimatedBitmap////************************************************************************CLCDAnimatedBitmap::CLCDAnimatedBitmap(){m_dwCurrSubpic = m_dwTotalSubpics = 0;}//************************************************************************//// CLCDAnimatedBitmap::CLCDAnimatedBitmap////************************************************************************CLCDAnimatedBitmap::~CLCDAnimatedBitmap(){}//************************************************************************//// CLCDAnimatedBitmap::Initialize////************************************************************************HRESULT CLCDAnimatedBitmap::Initialize(void){m_dwRate = 250;m_dwElapsedTime = 0;m_dwLastUpdate = GetTickCount();return CLCDBitmap::Initialize();}//************************************************************************//// CLCDAnimatedBitmap::ResetUpdate////************************************************************************void CLCDAnimatedBitmap::ResetUpdate(void){m_dwCurrSubpic = 0;m_dwLastUpdate = GetTickCount();}//************************************************************************//// CLCDAnimatedBitmap::SetSubpicWidth////************************************************************************void CLCDAnimatedBitmap::SetSubpicWidth(DWORD dwWidth){m_dwSubpicWidth = dwWidth;LCDUIASSERT(NULL != m_hBitmap);LCDUIASSERT(0 != dwWidth);if((NULL != m_hBitmap) && (0 != dwWidth)){// figure out how many tiles we haveBITMAP bitmap;if(GetObject(m_hBitmap, sizeof(bitmap), &bitmap)){m_dwTotalSubpics = bitmap.bmWidth / dwWidth;SetLogicalSize(bitmap.bmWidth, bitmap.bmHeight);}else{m_dwTotalSubpics = 0;}}else{m_dwTotalSubpics = 0;}}//************************************************************************//// CLCDAnimatedBitmap::SetAnimationRate////************************************************************************void CLCDAnimatedBitmap::SetAnimationRate(DWORD dwRate){m_dwRate = dwRate;}//************************************************************************//// CLCDAnimatedBitmap::OnUpdate////************************************************************************void CLCDAnimatedBitmap::OnUpdate(DWORD dwTimestamp){m_dwElapsedTime = (dwTimestamp - m_dwLastUpdate);}//************************************************************************//// CLCDAnimatedBitmap::OnDraw////************************************************************************void CLCDAnimatedBitmap::OnDraw(CLCDGfx &rGfx){if(m_dwTotalSubpics > 0){int xoffs = m_dwCurrSubpic * m_dwSubpicWidth;DWORD increment = m_dwElapsedTime / m_dwRate;if(increment > 0){m_dwCurrSubpic += increment;m_dwCurrSubpic %= m_dwTotalSubpics;m_dwElapsedTime %= m_dwRate;m_dwLastUpdate = GetTickCount();}// stolen from: CLCDBitmap::OnDraw(rGfx);if(m_hBitmap){HDC hCompatibleDC = CreateCompatibleDC(rGfx.GetHDC());HBITMAP hOldBitmap = (HBITMAP)SelectObject(hCompatibleDC, m_hBitmap);// getBitBlt(rGfx.GetHDC(), 0, 0, m_Size.cx, m_Size.cy, hCompatibleDC, xoffs, 0, m_dwROP);// restoresSelectObject(hCompatibleDC, hOldBitmap);DeleteDC(hCompatibleDC);}}}//** end of LCDAnimatedBitmap.cpp ****************************************