int PBListBox::MainHandler(int type, int par1, int par2) { int fcX1, fcX2, fcY1, fcY2; int clickedElem; int result = 0; if (IsVisible() && type == EVT_POINTERUP) { PBPoint clientPoint = m_pParent->ScreenToClient(PBPoint(par1, par2)); fcX1 = GetClientLeft() + PBLIST_BORDER; fcX2 = fcX1 + GetClientWidth() - (PBLIST_BORDER << 1); fcY1 = GetClientTop() + PBLIST_BORDER; fcY2 = fcY1 + GetClientHeight() - (PBLIST_BORDER << 1); if (clientPoint.GetX() > fcX1 && clientPoint.GetX() < fcX2 && clientPoint.GetY() > fcY1 && clientPoint.GetY() < fcY2 && (clickedElem = m_listOffset + (clientPoint.GetY() - fcY1) / m_itemHeight) < count()) { if (m_selected != -1) DrawSelect(m_selected, WHITE); m_selected = clickedElem; DrawSelect(m_selected, BLACK); if (m_pParent) m_pParent->OnCommand(PBLISTBOX, PBSTATECHANGED, (int) this); result = 1; } else result = PBWindow::MainHandler(type, par1, par2); } return result; }
void AGameHUD::DrawHUD() { Super::DrawHUD(); DrawHealth(); DrawResources(); DrawSelect(); }
int PBListBox::OnDraw(bool force) { int elem_iter; int elem_render_count, elem_count; if ( IsVisible() && (IsChanged() || force) && m_font) { PBGraphics *graphics = GetGraphics(); if (m_properties & DRAW_BORDER) graphics->DrawRect(GetLeft(), GetTop(), GetWidth(), GetHeight(), BLACK); graphics->FillArea(GetClientLeft() + PBLIST_BORDER, GetClientTop() + PBLIST_BORDER, GetClientWidth() - (PBLIST_BORDER << 1), GetClientHeight() - (PBLIST_BORDER << 1), WHITE); elem_count = count(); elem_render_count = calcListCapacity(); // corect elements for render if (elem_render_count > elem_count) elem_render_count = elem_count; if (elem_render_count) { if (m_AutoScroll) { if (elem_render_count < elem_count) { if (m_listOffset > m_selected) m_listOffset = m_selected; if (m_selected > (m_listOffset + elem_render_count)) m_listOffset = m_selected - elem_render_count; } } else m_AutoScroll = 1; updateScrollBar(); if (m_selected != -1) DrawSelect(m_selected, BLACK); SetFont(m_font, BLACK); elem_iter = 0; while( elem_iter < elem_render_count) { graphics->DrawTextRect(GetClientLeft() + (PBLIST_BORDER << 2), GetClientTop() + PBLIST_BORDER + elem_iter * m_itemHeight, GetClientWidth() - (PBLIST_BORDER << 3), m_itemHeight, text(elem_iter + m_listOffset), // m_stringList[elem_iter + m_listOffset].c_str(), ALIGN_LEFT | VALIGN_MIDDLE | DOTS); elem_iter++; } } } return 0;//PBWindow::Draw(); }