Subversion Repositories spk

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
79 cycrow 1
//************************************************************************
2
//
3
// LCDAnimatedBitmap.cpp
4
//
5
// The CLCDAnimatedBitmap class draws animated bitmaps onto the LCD.
6
// An animated bitmap consists of a tiled bitmap representing the
7
// animation. The tile size is set with the SetSubpicWidth.
8
// 
9
// Logitech LCD SDK
10
//
11
// Copyright 2005 Logitech Inc.
12
//************************************************************************
13
 
14
#include "LCDAnimatedBitmap.h"
15
 
16
 
17
//************************************************************************
18
//
19
// CLCDAnimatedBitmap::CLCDAnimatedBitmap
20
//
21
//************************************************************************
22
 
23
CLCDAnimatedBitmap::CLCDAnimatedBitmap()
24
{
25
    m_dwCurrSubpic = m_dwTotalSubpics = 0;
26
}
27
 
28
 
29
//************************************************************************
30
//
31
// CLCDAnimatedBitmap::CLCDAnimatedBitmap
32
//
33
//************************************************************************
34
 
35
CLCDAnimatedBitmap::~CLCDAnimatedBitmap()
36
{
37
 
38
}
39
 
40
 
41
//************************************************************************
42
//
43
// CLCDAnimatedBitmap::Initialize
44
//
45
//************************************************************************
46
 
47
HRESULT CLCDAnimatedBitmap::Initialize(void)
48
{
49
    m_dwRate        = 250;
50
    m_dwElapsedTime = 0;
51
    m_dwLastUpdate = GetTickCount();
52
 
53
    return CLCDBitmap::Initialize();
54
}
55
 
56
 
57
//************************************************************************
58
//
59
// CLCDAnimatedBitmap::ResetUpdate
60
//
61
//************************************************************************
62
 
63
void CLCDAnimatedBitmap::ResetUpdate(void)
64
{
65
    m_dwCurrSubpic = 0;
66
    m_dwLastUpdate = GetTickCount();
67
}
68
 
69
 
70
//************************************************************************
71
//
72
// CLCDAnimatedBitmap::SetSubpicWidth
73
//
74
//************************************************************************
75
 
76
void CLCDAnimatedBitmap::SetSubpicWidth(DWORD dwWidth)
77
{
78
    m_dwSubpicWidth = dwWidth;
79
    LCDUIASSERT(NULL != m_hBitmap);
80
    LCDUIASSERT(0 != dwWidth);
81
    if((NULL != m_hBitmap) && (0 != dwWidth))
82
    {
83
        // figure out how many tiles we have
84
        BITMAP bitmap;
85
        if(GetObject(m_hBitmap, sizeof(bitmap), &bitmap))
86
        {
87
            m_dwTotalSubpics = bitmap.bmWidth / dwWidth;
88
            SetLogicalSize(bitmap.bmWidth, bitmap.bmHeight);
89
        }
90
        else
91
        {
92
            m_dwTotalSubpics = 0;
93
        }
94
    }
95
    else
96
    {
97
        m_dwTotalSubpics = 0;
98
    }
99
}
100
 
101
//************************************************************************
102
//
103
// CLCDAnimatedBitmap::SetAnimationRate
104
//
105
//************************************************************************
106
 
107
void CLCDAnimatedBitmap::SetAnimationRate(DWORD dwRate)
108
{
109
    m_dwRate = dwRate;
110
}
111
 
112
 
113
//************************************************************************
114
//
115
// CLCDAnimatedBitmap::OnUpdate
116
//
117
//************************************************************************
118
 
119
void CLCDAnimatedBitmap::OnUpdate(DWORD dwTimestamp)
120
{
121
    m_dwElapsedTime = (dwTimestamp - m_dwLastUpdate);
122
}
123
 
124
 
125
//************************************************************************
126
//
127
// CLCDAnimatedBitmap::OnDraw
128
//
129
//************************************************************************
130
 
131
void CLCDAnimatedBitmap::OnDraw(CLCDGfx &rGfx)
132
{
133
    if(m_dwTotalSubpics > 0)
134
    {
135
        int xoffs = m_dwCurrSubpic * m_dwSubpicWidth;
136
 
137
        DWORD increment = m_dwElapsedTime / m_dwRate;
138
        if(increment > 0)
139
        {
140
            m_dwCurrSubpic += increment;
141
            m_dwCurrSubpic %= m_dwTotalSubpics;
142
            m_dwElapsedTime %= m_dwRate;
143
            m_dwLastUpdate = GetTickCount();
144
        }
145
 
146
        // stolen from: CLCDBitmap::OnDraw(rGfx);
147
        if(m_hBitmap)
148
        {
149
            HDC hCompatibleDC = CreateCompatibleDC(rGfx.GetHDC());
150
            HBITMAP hOldBitmap = (HBITMAP)SelectObject(hCompatibleDC, m_hBitmap);
151
 
152
            // get
153
            BitBlt(rGfx.GetHDC(), 0, 0, m_Size.cx, m_Size.cy, hCompatibleDC, xoffs, 0, m_dwROP);
154
 
155
            // restores
156
            SelectObject(hCompatibleDC, hOldBitmap);
157
            DeleteDC(hCompatibleDC);
158
        }
159
    }
160
}
161
 
162
 
163
//** end of LCDAnimatedBitmap.cpp ****************************************