void CLCDAnimatedBitmap::SetSubpicWidth(DWORD dwWidth) { m_dwSubpicWidth = dwWidth; LOGIASSERT(NULL != m_hBitmap); LOGIASSERT(0 != dwWidth); if((NULL != m_hBitmap) && (0 != dwWidth)) { // figure out how many tiles we have BITMAP 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; } }
void CLCDScrollingText::OnDraw(CLCDGfxBase &rGfx) { if (!m_nTextLength) { return; } // calculate the scrolling distance if (-1 == m_nScrollingDistance) { CLCDText::OnDraw(rGfx); if (SCROLL_VERT == m_eScrollDir) { // determine how far we have to travel until scrolling stops m_nScrollingDistance = ((GetHeight()) >= GetVExtent().cy) ? 0 : (GetVExtent().cy - GetHeight()); SetLogicalSize(GetVExtent().cx, GetVExtent().cy); } else { // determine how far we have to travel until scrolling stops m_nScrollingDistance = ((GetWidth()) >= GetHExtent().cx) ? 0 : (GetHExtent().cx - GetWidth()); SetLogicalSize(max(GetSize().cx, GetHExtent().cx), GetHExtent().cy); } } switch(m_eState) { case STATE_START_DELAY: if (m_dwEllapsedTime > m_dwStartDelay) { m_eState = STATE_SCROLL; m_dwEllapsedTime = 0; m_dwLastUpdate = GetTickCount(); } break; case STATE_END_DELAY: if (m_dwEllapsedTime > m_dwEndDelay) { if (m_bRepeat) { ResetUpdate(); break; } m_dwEllapsedTime = 0; m_dwLastUpdate = GetTickCount(); m_eState = STATE_DONE; } break; case STATE_SCROLL: { // TODO: add some anti-aliasing on the movement // how much time has ellapsed? // given the speed, what is the total displacement? float fDistance = (float)(m_dwSpeed * m_dwEllapsedTime) / 1000.0f; m_fTotalDistance += fDistance; // we dont want the total distnace exceed our scrolling distance int nTotalOffset = min((int)m_fTotalDistance, m_nScrollingDistance); if (SCROLL_VERT == m_eScrollDir) { SetLogicalOrigin(GetLogicalOrigin().x, -1 * nTotalOffset); } else { SetLogicalOrigin(-1 * nTotalOffset, GetLogicalOrigin().y); } m_dwLastUpdate = GetTickCount(); if (nTotalOffset == m_nScrollingDistance) { m_eState = STATE_END_DELAY; } } break; case STATE_DONE: break; default: break; } CLCDText::OnDraw(rGfx); }
void CLCDBase::SetSize(SIZE& size) { m_Size = size; SetLogicalSize(m_Size); }