bool CGUIRenderingControl::InitCallback(IRenderingCallback *callback) { if (!callback) return false; CSingleLock lock(m_rendering); g_graphicsContext.CaptureStateBlock(); float x = g_graphicsContext.ScaleFinalXCoord(GetXPosition(), GetYPosition()); float y = g_graphicsContext.ScaleFinalYCoord(GetXPosition(), GetYPosition()); float w = g_graphicsContext.ScaleFinalXCoord(GetXPosition() + GetWidth(), GetYPosition() + GetHeight()) - x; float h = g_graphicsContext.ScaleFinalYCoord(GetXPosition() + GetWidth(), GetYPosition() + GetHeight()) - y; if (x < 0) x = 0; if (y < 0) y = 0; if (x + w > g_graphicsContext.GetWidth()) w = g_graphicsContext.GetWidth() - x; if (y + h > g_graphicsContext.GetHeight()) h = g_graphicsContext.GetHeight() - y; void *device = NULL; if (callback->Create((int)(x+0.5f), (int)(y+0.5f), (int)(w+0.5f), (int)(h+0.5f), device)) m_callback = callback; else return false; g_graphicsContext.ApplyStateBlock(); return true; }
bool CGUIScrollBar::UpdateBarSize() { bool changed = false; // scale our textures to suit if (m_orientation == VERTICAL) { // calculate the height to display the nib at float percent = (m_numItems == 0) ? 0 : (float)m_pageSize / m_numItems; float nibSize = GetHeight() * percent; if (nibSize < m_guiNibFocus.GetTextureHeight() + 2 * MIN_NIB_SIZE) nibSize = m_guiNibFocus.GetTextureHeight() + 2 * MIN_NIB_SIZE; if (nibSize > GetHeight()) nibSize = GetHeight(); changed |= m_guiBarNoFocus.SetHeight(nibSize); changed |= m_guiBarFocus.SetHeight(nibSize); changed |= m_guiNibNoFocus.SetHeight(nibSize); changed |= m_guiNibFocus.SetHeight(nibSize); // nibSize may be altered by the border size of the nib (and bar). nibSize = std::max(m_guiBarFocus.GetHeight(), m_guiNibFocus.GetHeight()); // and the position percent = (m_numItems == m_pageSize) ? 0 : (float)m_offset / (m_numItems - m_pageSize); float nibPos = (GetHeight() - nibSize) * percent; if (nibPos < 0) nibPos = 0; if (nibPos > GetHeight() - nibSize) nibPos = GetHeight() - nibSize; changed |= m_guiBarNoFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); changed |= m_guiBarFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); changed |= m_guiNibNoFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); changed |= m_guiNibFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); } else { // calculate the height to display the nib at float percent = (m_numItems == 0) ? 0 : (float)m_pageSize / m_numItems; float nibSize = GetWidth() * percent + 0.5f; if (nibSize < m_guiNibFocus.GetTextureWidth() + 2 * MIN_NIB_SIZE) nibSize = m_guiNibFocus.GetTextureWidth() + 2 * MIN_NIB_SIZE; if (nibSize > GetWidth()) nibSize = GetWidth(); changed |= m_guiBarNoFocus.SetWidth(nibSize); changed |= m_guiBarFocus.SetWidth(nibSize); changed |= m_guiNibNoFocus.SetWidth(nibSize); changed |= m_guiNibFocus.SetWidth(nibSize); // and the position percent = (m_numItems == m_pageSize) ? 0 : (float)m_offset / (m_numItems - m_pageSize); float nibPos = (GetWidth() - nibSize) * percent; if (nibPos < 0) nibPos = 0; if (nibPos > GetWidth() - nibSize) nibPos = GetWidth() - nibSize; changed |= m_guiBarNoFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); changed |= m_guiBarFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); changed |= m_guiNibNoFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); changed |= m_guiNibFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); } return changed; }
void CGUIRadioButtonControl::SetRadioDimensions(float posX, float posY, float width, float height) { m_radioPosX = posX; m_radioPosY = posY; if (width) { m_imgRadioOnFocus.SetWidth(width); m_imgRadioOnNoFocus.SetWidth(width); m_imgRadioOffFocus.SetWidth(width); m_imgRadioOffNoFocus.SetWidth(width); m_imgRadioOnDisabled.SetWidth(width); m_imgRadioOffDisabled.SetWidth(width); } if (height) { m_imgRadioOnFocus.SetHeight(height); m_imgRadioOnNoFocus.SetHeight(height); m_imgRadioOffFocus.SetHeight(height); m_imgRadioOffNoFocus.SetHeight(height); m_imgRadioOnDisabled.SetHeight(height); m_imgRadioOffDisabled.SetHeight(height); } // use label2 to display the button value in case no // dimensions were specified and there's no label2 yet. if (GetLabel2().empty() && !width && !height) m_useLabel2 = true; SetPosition(GetXPosition(), GetYPosition()); }
CRect CGUIControl::CalcRenderRegion() const { CPoint tl(GetXPosition(), GetYPosition()); CPoint br(tl.x + GetWidth(), tl.y + GetHeight()); return CRect(tl.x, tl.y, br.x, br.y); }
void CGUISpinControlEx::Render() { // make sure the button has focus if it should have... m_buttonControl.SetFocus(HasFocus()); m_buttonControl.SetPulseOnSelect(m_pulseOnSelect); m_buttonControl.SetEnabled(m_enabled); m_buttonControl.Render(); if (m_bInvalidated) SetPosition(GetXPosition(), GetYPosition()); CGUISpinControl::Render(); }
void Button::Update(int delta) { isMouseOver = false; isMouseDown = false; if (pOutEase->GetIsStarted() && !pOutEase->GetIsFinished()) { pOutEase->Update(delta); animationOffset = (int)pOutEase->GetCurrentValue(); } else if (pOutEase->GetIsFinished()) { SetIsHidden(true); } else if (pInEase->GetIsStarted() && !pInEase->GetIsFinished()) { pInEase->Update(delta); animationOffset = (int)pInEase->GetCurrentValue(); } else { if (GetUnlockedLockCount() > 0 && !pUnlockingAnimation->IsFinished()) { pUnlockingAnimation->Update(delta); AnimationSound * pSoundToPlay = pUnlockingAnimation->GetSoundToPlay(); if (pSoundToPlay != NULL) { pSoundToPlay->Play(gSoundEffectsVolume); } } else if (!GetIsDisabled()) { RectangleWH positionRect = RectangleWH(GetXPosition(), GetYPosition(), pTextFont->GetWidth(GetText()), TextHeight); bool isPressed = MouseHelper::PressedAndHeldAnywhere() || MouseHelper::DoublePressedAndHeldAnywhere(); if (MouseHelper::ClickedOnRect(positionRect)) { OnClicked(); } if (MouseHelper::MouseDownOnRect(positionRect) && !isPressed) { isMouseDown = true; } else if (MouseHelper::MouseOverRect(positionRect) && !isPressed) { isMouseOver = true; } } } }
void CGUIScrollBar::UpdateBarSize() { // scale our textures to suit if (m_orientation == VERTICAL) { // calculate the height to display the nib at float percent = (float)m_pageSize / m_numItems; float nibSize = GetHeight() * percent; if (nibSize < m_guiNibFocus.GetTextureHeight() + 2 * MIN_NIB_SIZE) nibSize = m_guiNibFocus.GetTextureHeight() + 2 * MIN_NIB_SIZE; if (nibSize > GetHeight()) nibSize = GetHeight(); m_guiBarNoFocus.SetHeight(nibSize); m_guiBarFocus.SetHeight(nibSize); m_guiNibNoFocus.SetHeight(nibSize); m_guiNibFocus.SetHeight(nibSize); // and the position percent = (m_numItems == m_pageSize) ? 0 : (float)m_offset / (m_numItems - m_pageSize); float nibPos = (GetHeight() - nibSize) * percent; if (nibPos < 0) nibPos = 0; if (nibPos > GetHeight() - nibSize) nibPos = GetHeight() - nibSize; m_guiBarNoFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); m_guiBarFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); m_guiNibNoFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); m_guiNibFocus.SetPosition(GetXPosition(), GetYPosition() + nibPos); } else { // calculate the height to display the nib at float percent = (float)m_pageSize / m_numItems; float nibSize = GetWidth() * percent + 0.5f; if (nibSize < m_guiNibFocus.GetTextureWidth() + 2 * MIN_NIB_SIZE) nibSize = m_guiNibFocus.GetTextureWidth() + 2 * MIN_NIB_SIZE; if (nibSize > GetWidth()) nibSize = GetWidth(); m_guiBarNoFocus.SetWidth(nibSize); m_guiBarFocus.SetWidth(nibSize); m_guiNibNoFocus.SetWidth(nibSize); m_guiNibFocus.SetWidth(nibSize); // and the position percent = (float)m_offset / (m_numItems - m_pageSize); float nibPos = (GetWidth() - nibSize) * percent; if (nibPos < 0) nibPos = 0; if (nibPos > GetWidth() - nibSize) nibPos = GetWidth() - nibSize; m_guiBarNoFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); m_guiBarFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); m_guiNibNoFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); m_guiNibFocus.SetPosition(GetXPosition() + nibPos, GetYPosition()); } }
void CGUIRadioButtonControl::SetRadioDimensions(float posX, float posY, float width, float height) { m_radioPosX = posX; m_radioPosY = posY; if (width) { m_imgRadioFocus.SetWidth(width); m_imgRadioNoFocus.SetWidth(width); } if (height) { m_imgRadioFocus.SetHeight(height); m_imgRadioNoFocus.SetHeight(height); } SetPosition(GetXPosition(), GetYPosition()); }
bool MapObject::ShouldDraw() { if(!_visible) return false; MapMode* MM = MapMode::CurrentInstance(); // Determine if the sprite is off-screen and if so, don't draw it. if(!GetGridImageRectangle().IntersectsWith(MM->GetMapFrame().screen_edges)) return false; // Move the drawing cursor to the appropriate coordinates for this sprite float x_pos = MM->GetScreenXCoordinate(GetXPosition()); float y_pos = MM->GetScreenYCoordinate(GetYPosition()); vt_video::VideoManager->Move(x_pos, y_pos); return true; }
void MapObject::DrawInteractionIcon() { if (!_interaction_icon) return; if (!MapObject::ShouldDraw()) return; MapMode* map_mode = MapMode::CurrentInstance(); vt_video::Color icon_color(1.0f, 1.0f, 1.0f, 0.0f); float icon_alpha = 1.0f - (fabs(GetXPosition() - map_mode->GetCamera()->GetXPosition()) + fabs(GetYPosition() - map_mode->GetCamera()->GetYPosition())) / INTERACTION_ICON_VISIBLE_RANGE; if (icon_alpha < 0.0f) icon_alpha = 0.0f; icon_color.SetAlpha(icon_alpha); vt_video::VideoManager->MoveRelative(0, -GetImgScreenHeight()); _interaction_icon->Draw(icon_color); }
bool CGUIControl::Animate(unsigned int currentTime) { // check visible state outside the loop, as it could change GUIVISIBLE visible = m_visible; m_transform.Reset(); bool changed = false; CPoint center(GetXPosition() + GetWidth() * 0.5f, GetYPosition() + GetHeight() * 0.5f); for (unsigned int i = 0; i < m_animations.size(); i++) { CAnimation &anim = m_animations[i]; anim.Animate(currentTime, HasProcessed() || visible == DELAYED); // Update the control states (such as visibility) UpdateStates(anim.GetType(), anim.GetProcess(), anim.GetState()); // and render the animation effect changed |= (anim.GetProcess() != ANIM_PROCESS_NONE); anim.RenderAnimation(m_transform, center); /* // debug stuff if (anim.currentProcess != ANIM_PROCESS_NONE) { if (anim.effect == EFFECT_TYPE_ZOOM) { if (IsVisible()) CLog::Log(LOGDEBUG, "Animating control %d with a %s zoom effect %s. Amount is %2.1f, visible=%s", m_controlID, anim.type == ANIM_TYPE_CONDITIONAL ? (anim.lastCondition ? "conditional_on" : "conditional_off") : (anim.type == ANIM_TYPE_VISIBLE ? "visible" : "hidden"), anim.currentProcess == ANIM_PROCESS_NORMAL ? "normal" : "reverse", anim.amount, IsVisible() ? "true" : "false"); } else if (anim.effect == EFFECT_TYPE_FADE) { if (IsVisible()) CLog::Log(LOGDEBUG, "Animating control %d with a %s fade effect %s. Amount is %2.1f. Visible=%s", m_controlID, anim.type == ANIM_TYPE_CONDITIONAL ? (anim.lastCondition ? "conditional_on" : "conditional_off") : (anim.type == ANIM_TYPE_VISIBLE ? "visible" : "hidden"), anim.currentProcess == ANIM_PROCESS_NORMAL ? "normal" : "reverse", anim.amount, IsVisible() ? "true" : "false"); } }*/ } return changed; }
void VirtualSprite::_SetNextPosition() { // Next sprite's position holders float next_pos_x = GetXPosition(); float next_pos_y = GetYPosition(); float distance_moved = CalculateDistanceMoved(); // Move the sprite the appropriate distance in the appropriate Y and X direction if(_direction & (NORTH | MOVING_NORTHWEST | MOVING_NORTHEAST)) next_pos_y -= distance_moved; else if(_direction & (SOUTH | MOVING_SOUTHWEST | MOVING_SOUTHEAST)) next_pos_y += distance_moved; if(_direction & (WEST | MOVING_NORTHWEST | MOVING_SOUTHWEST)) next_pos_x -= distance_moved; else if(_direction & (EAST | MOVING_NORTHEAST | MOVING_SOUTHEAST)) next_pos_x += distance_moved; // When not moving, do not check anything else. if(next_pos_x == GetXPosition() && next_pos_y == GetYPosition()) return; // We've got the next position, let's check whether the next position // should be revised. // Used to know whether we could fall back to a straight move // in case of collision. bool moving_diagonally = (_direction & (MOVING_NORTHWEST | MOVING_NORTHEAST | MOVING_SOUTHEAST | MOVING_SOUTHWEST)); // Handle collision with the first object encountered MapObject* collision_object = nullptr; MapMode* map_mode = MapMode::CurrentInstance(); ObjectSupervisor* object_supervisor = map_mode->GetObjectSupervisor(); COLLISION_TYPE collision_type = object_supervisor->DetectCollision(this, next_pos_x, next_pos_y, &collision_object); // Try to fall back to straight direction if(moving_diagonally && collision_type != NO_COLLISION) { // Try on x axis if(object_supervisor->DetectCollision(this, _tile_position.x, next_pos_y, &collision_object) == NO_COLLISION) { next_pos_x = _tile_position.x; collision_type = NO_COLLISION; } // and then on y axis else if(object_supervisor->DetectCollision(this, next_pos_x, _tile_position.y, &collision_object) == NO_COLLISION) { next_pos_y = _tile_position.y; collision_type = NO_COLLISION; } } // Handles special collision handling first if(_control_event) { switch(_control_event->GetEventType()) { // Don't stuck the player's character or a sprite being controlled by a prepared path. // Plus, it's better not to change a path with encountered beings once started // for simplification purpose. case PATH_MOVE_SPRITE_EVENT: collision_type = NO_COLLISION; break; // Change the direction whenever something blocking is in the way. case RANDOM_MOVE_SPRITE_EVENT: if(collision_type != NO_COLLISION) { SetRandomDirection(); return; } default: break; } } // Try to handle wall and physical collisions after a failed straight or diagonal move switch(collision_type) { case NO_COLLISION: default: break; case WALL_COLLISION: // When being blocked and moving diagonally, the npc is stuck. if(moving_diagonally) return; // Don't consider physical objects with an event to avoid sliding on their edges, // making them harder to "talk with". if (collision_object && this == map_mode->GetCamera()) { PhysicalObject *phs = reinterpret_cast<PhysicalObject *>(collision_object); if(phs && !phs->GetEventIdWhenTalking().empty()) return; } // Fix the direction and destination to walk-around obstacles if (_HandleWallEdges(next_pos_x, next_pos_y, distance_moved, collision_object)) break; // We don't do any other checks for the player sprite. else if (this == map_mode->GetCamera()) return; // NPC sprites: // When it's a true wall, try against the collision grid if(!collision_object) { // Try a random diagonal to avoid the wall in straight direction if(_direction & (NORTH | SOUTH)) _direction |= vt_utils::RandomBoundedInteger(0, 1) ? EAST : WEST; else if(_direction & (EAST | WEST)) _direction |= vt_utils::RandomBoundedInteger(0, 1) ? NORTH : SOUTH; return; } // Physical and treasure objects are the only other matching "fake" walls else { // Try a diagonal to avoid the sprite in straight direction by comparing // each one coords. float diff_x = GetXPosition() - collision_object->GetXPosition(); float diff_y = GetYPosition() - collision_object->GetYPosition(); if(_direction & (NORTH | SOUTH)) _direction |= diff_x >= 0.0f ? EAST : WEST; else if(_direction & (EAST | WEST)) _direction |= diff_y >= 0.0f ? SOUTH : NORTH; return; } // Other cases shouldn't happen. break; case ENEMY_COLLISION: // Check only whether the player has collided with a monster if(this == map_mode->GetCamera() && collision_object && collision_object->GetObjectType() == ENEMY_TYPE) { EnemySprite* enemy = reinterpret_cast<EnemySprite *>(collision_object); // Check whether the player is actually playing. If not, we don't want to start a battle. if (map_mode->CurrentState() == STATE_EXPLORE) map_mode->StartEnemyEncounter(enemy); return; } break; case CHARACTER_COLLISION: // Check whether the sprite is tangled with another character, even without moving // For instance, when colliding with a path follower npc. // And let it through in that case. if(object_supervisor->CheckObjectCollision(GetGridCollisionRectangle(), collision_object)) { collision_type = NO_COLLISION; break; } // When the sprite is controlled by the camera, let the player handle the position correction. if(this == map_mode->GetCamera()) return; // Check whether an enemy has collided with the player if(this->GetType() == ENEMY_TYPE && collision_object == map_mode->GetCamera()) { EnemySprite* enemy = reinterpret_cast<EnemySprite *>(this); // Check whether the player is actually playing. If not, we don't want to start a battle. if (map_mode->CurrentState() == STATE_EXPLORE) map_mode->StartEnemyEncounter(enemy, false, true); // The enemy gets a boost in stamina. return; } // When being blocked and moving diagonally, the npc is stuck. if(moving_diagonally) return; if(!collision_object) // Should never happen return; // Try a diagonal to avoid the sprite in straight direction by comparing // each one coords. float diff_x = GetXPosition() - collision_object->GetXPosition(); float diff_y = GetYPosition() - collision_object->GetYPosition(); if(_direction & (NORTH | SOUTH)) _direction |= diff_x >= 0.0f ? EAST : WEST; else if(_direction & (EAST | WEST)) _direction |= diff_y >= 0.0f ? SOUTH : NORTH; return; } // Inform the overlay system of the parallax movement done if needed if(this == map_mode->GetCamera()) { float x_parallax = !map_mode->IsCameraXAxisInMapCorner() ? (GetXPosition() - next_pos_x) / SCREEN_GRID_X_LENGTH * vt_video::VIDEO_STANDARD_RES_WIDTH : 0.0f; float y_parallax = !map_mode->IsCameraYAxisInMapCorner() ? (GetYPosition() - next_pos_y) / SCREEN_GRID_Y_LENGTH * vt_video::VIDEO_STANDARD_RES_HEIGHT : 0.0f; map_mode->GetEffectSupervisor().AddParallax(x_parallax, y_parallax); map_mode->GetIndicatorSupervisor().AddParallax(x_parallax, y_parallax); } // Make the sprite advance at the end SetPosition(next_pos_x, next_pos_y); _moved_position = true; }
void CGUISettingsSliderControl::SetWidth(float width) { m_buttonControl.SetWidth(width); SetPosition(GetXPosition(), GetYPosition()); }
void CGUISettingsSliderControl::SetHeight(float height) { m_buttonControl.SetHeight(height); SetPosition(GetXPosition(), GetYPosition()); }
int GameObject::GetXCenter() const { return GetXPosition() + (GetWidth() / 2); }
void CGUIMoverControl::SetLocation(int iLocX, int iLocY, bool bSetPosition) { if (bSetPosition) SetPosition(GetXPosition() + iLocX - m_iLocationX, GetYPosition() + iLocY - m_iLocationY); m_iLocationX = iLocX; m_iLocationY = iLocY; }
void State::SetYPosition(double y) { SetPosition(GetXPosition(), y); }
void CGUIRadioButtonControl::SetHeight(float height) { CGUIButtonControl::SetHeight(height); SetPosition(GetXPosition(), GetYPosition()); }
void CGUIRadioButtonControl::SetWidth(float width) { CGUIButtonControl::SetWidth(width); SetPosition(GetXPosition(), GetYPosition()); }
// Draw a header or footer string // @param aRenderingContext - rendering context to draw into // @param aHeaderFooter - indicates whether it is a header or footer // @param aJust - indicates where the string is located within the header/footer // @param aStr - the string to be drawn // @param aRect - the rect of the page // @param aHeight - the height of the font // @param aAscent - the ascent of the font // @param aWidth - available width for the string void nsPageFrame::DrawHeaderFooter(nsIRenderingContext& aRenderingContext, nsHeaderFooterEnum aHeaderFooter, PRInt32 aJust, const nsString& aStr, const nsRect& aRect, nscoord aAscent, nscoord aHeight, nscoord aWidth) { nscoord contentWidth = aWidth - (mPD->mEdgePaperMargin.left + mPD->mEdgePaperMargin.right); if ((aHeaderFooter == eHeader && aHeight < mPD->mReflowMargin.top) || (aHeaderFooter == eFooter && aHeight < mPD->mReflowMargin.bottom)) { nsAutoString str; ProcessSpecialCodes(aStr, str); PRInt32 indx; PRInt32 textWidth = 0; const PRUnichar* text = str.get(); PRInt32 len = (PRInt32)str.Length(); if (len == 0) { return; // bail is empty string } // find how much text fits, the "position" is the size of the available area if (nsLayoutUtils::BinarySearchForPosition(&aRenderingContext, text, 0, 0, 0, len, PRInt32(contentWidth), indx, textWidth)) { if (indx < len-1 ) { // we can't fit in all the text if (indx > 3) { // But we can fit in at least 4 chars. Show all but 3 of them, then // an ellipsis. // XXXbz for non-plane0 text, this may be cutting things in the // middle of a codepoint! Also, we have no guarantees that the three // dots will fit in the space the three chars we removed took up with // these font metrics! str.Truncate(indx-3); str.AppendLiteral("..."); } else { // We can only fit 3 or fewer chars. Just show nothing str.Truncate(); } } } else { return; // bail if couldn't find the correct length } if (HasRTLChars(str)) { PresContext()->SetBidiEnabled(); } // cacl the x and y positions of the text nscoord x = GetXPosition(aRenderingContext, aRect, aJust, str); nscoord y; if (aHeaderFooter == eHeader) { y = aRect.y + mPD->mExtraMargin.top + mPD->mEdgePaperMargin.top; } else { y = aRect.YMost() - aHeight - mPD->mExtraMargin.bottom - mPD->mEdgePaperMargin.bottom; } // set up new clip and draw the text aRenderingContext.PushState(); aRenderingContext.SetColor(NS_RGB(0,0,0)); aRenderingContext.SetClipRect(aRect, nsClipCombine_kIntersect); nsLayoutUtils::DrawString(this, &aRenderingContext, str.get(), str.Length(), nsPoint(x, y + aAscent)); aRenderingContext.PopState(); } }
void Button::Draw(double xOffset, double yOffset) { Color textColor; if (GetIsDisabled()) { textColor = DisabledTextColor; } else if (isMouseDown) { textColor = MouseDownTextColor; } else if (isMouseOver) { textColor = MouseOverTextColor; } else { textColor = NormalTextColor; } Vector2 textPosition = Vector2( GetXPosition() + animationOffset + xOffset, GetYPosition() + yOffset); pTextFont->Draw(GetText(), textPosition, textColor); if (pCustomIconSprite != NULL) { Vector2 spritePosition = Vector2( textPosition.GetX() - pCustomIconSprite->GetWidth() - 4, textPosition.GetY() - 4 + (36 - pCustomIconSprite->GetHeight()) / 2); pCustomIconSprite->Draw(spritePosition); } else if (GetLockCount() > 0 || GetUnlockedLockCount() > 0) { int lockPositionOffset = 0; for (int i = 0; i < GetLockCount(); i++) { lockPositionOffset += pLockSprite->GetWidth() + 2; Vector2 lockPosition = Vector2( textPosition.GetX() - lockPositionOffset, textPosition.GetY() - 9); pLockSprite->Draw(lockPosition); } for (int i = 0; i < GetUnlockedLockCount(); i++) { lockPositionOffset += pUnlockingAnimation->GetSize().GetX() + 2; Vector2 lockPosition = Vector2( textPosition.GetX() - lockPositionOffset, textPosition.GetY() - 9); pUnlockingAnimation->Draw(lockPosition); } } else if (GetShowCheckMark()) { Vector2 checkMarkPosition = Vector2( textPosition.GetX() - pCheckMarkImage->width, textPosition.GetY() - 4); pCheckMarkImage->Draw(checkMarkPosition); } }
void CGUISliderControl::Update() { m_guiBackground.SetPosition( GetXPosition(), GetYPosition()); }