void CLCDStreamingText::RecalcTextBoxOrigins() { if (m_Objects.size() <= 1) return; // draw everyone to the left by the offset int nOrgOffset = 0; LCD_OBJECT_LIST::iterator it = m_Objects.begin(); while(it != m_Objects.end()) { CLCDBase* pObject = *it; CLCDText* pText = (CLCDText*)pObject; assert(NULL != pObject); pText->SetLogicalSize(pText->GetHExtent().cx, pText->GetHExtent().cy); // string can be empty which generates zero logical space //assert(pText->GetLogicalSize().cx); //assert(pText->GetLogicalSize().cy); POINT& ptOrigin = pText->GetLogicalOrigin(); if (nOrgOffset == 0) { nOrgOffset = pText->GetLogicalOrigin().x; } pText->SetLogicalOrigin(nOrgOffset, ptOrigin.y); nOrgOffset += pText->GetHExtent().cx; ++it; } }
void CLCDStreamingText::ApplyOrigins(int nOffset) { // draw everyone to the left by the offset LCD_OBJECT_LIST::iterator it = m_Objects.begin(); while(it != m_Objects.end()) { CLCDBase* pObject = *it; CLCDText* pText = (CLCDText*)pObject; assert(NULL != pObject); POINT& ptOrigin = pText->GetLogicalOrigin(); pText->SetLogicalOrigin(ptOrigin.x + nOffset, ptOrigin.y); ++it; } // If the active box is no longer visible, // pop it off the push it to the end of the list if (abs(m_pQueueHead->GetLogicalOrigin().x) >= m_pQueueHead->GetHExtent().cx) { m_Objects.pop_front(); m_Objects.push_back(m_pQueueHead); RecalcTextBoxOrigins(); m_pQueueHead = (CLCDText*)*m_Objects.begin(); } }