/** ** Draw message(s). */ void MessagesDisplay::DrawMessages() { // background so the text is easier to read if (MessagesCount) { Uint32 color = Video.MapRGB(TheScreen->format, 38, 38, 78); Video.FillTransRectangleClip(color, UI.MapArea.X + 8, UI.MapArea.Y + 8, UI.MapArea.EndX - UI.MapArea.X - 16, MessagesCount * (UI.MessageFont->Height() + 1) - MessagesScrollY, 0x80); } // Draw message line(s) for (int z = 0; z < MessagesCount; ++z) { if (z == 0) { PushClipping(); SetClipping(UI.MapArea.X + 8, UI.MapArea.Y + 8, Video.Width - 1, Video.Height - 1); } VideoDrawTextClip(UI.MapArea.X + 8, UI.MapArea.Y + 8 + z * (UI.MessageFont->Height() + 1) - MessagesScrollY, UI.MessageFont, Messages[z]); if (z == 0) { PopClipping(); } } if (MessagesCount < 1) { MessagesSameCount = 0; } }
/** ** Draw number with font at x,y clipped. ** ** @param x X screen position ** @param y Y screen position ** @param font Font number ** @param number Number to be displayed. ** ** @return The length of the printed text. */ global int VideoDrawNumberClip(int x,int y,unsigned font,int number) { char buf[sizeof(int)*10+2]; sprintf(buf,"%d",number); return VideoDrawTextClip(x,y,font,buf); }
/** ** Draw number with font at x,y clipped. ** ** @param x X screen position ** @param y Y screen position ** @param font Font number ** @param number Number to be displayed. ** ** @return The length of the printed text. */ int VideoDrawNumberClip(int x, int y, CFont *font, int number) { char buf[sizeof(int) * 10 + 2]; FormatNumber(number, buf); return VideoDrawTextClip(x, y, font, buf); }
/** ** Draw reverse text with font at x,y clipped. ** ** @see DoDrawText for full description. ** ** @param x X screen position ** @param y Y screen position ** @param font Font number ** @param text Text to be displayed. ** ** @return The length of the printed text. */ int VideoDrawReverseTextClip(int x, int y, CFont *font, const std::string &text) { int width; FontColor = ReverseTextColor; width = VideoDrawTextClip(x, y, font, text); FontColor = DefaultTextColor; return width; }
/** ** Draw status line. */ void CStatusLine::Draw(void) { if (!this->StatusLine.empty()) { PushClipping(); SetClipping(this->TextX, this->TextY, this->TextX + this->Width - 1, Video.Height - 1); VideoDrawTextClip(this->TextX, this->TextY, this->Font, this->StatusLine); PopClipping(); } }
/** ** Draw additional informations of a unit. ** ** @param unit Unit pointer of drawn unit. ** @param type Unit-type pointer. ** @param x X screen pixel position of unit. ** @param y Y screen pixel position of unit. ** ** @todo FIXME: The different styles should become a function call. */ static void DrawInformations(const CUnit &unit, const CUnitType *type, int x, int y) { const CUnitStats *stats; int r; #if 0 && DEBUG // This is for showing vis counts and refs. char buf[10]; sprintf(buf, "%d%c%c%d", unit.VisCount[ThisPlayer->Index], unit.Seen.ByPlayer & (1 << ThisPlayer->Index) ? 'Y' : 'N', unit.Seen.Destroyed & (1 << ThisPlayer->Index) ? 'Y' : 'N', unit.Refs); VideoDrawTextClip(x + 10, y + 10, 1, buf); #endif stats = unit.Stats; // // For debug draw sight, react and attack range! // if (NumSelected == 1 && unit.Selected) { if (Preference.ShowSightRange) { // Radius -1 so you can see all ranges Video.DrawCircleClip(ColorGreen, x + type->TileWidth * TileSizeX / 2, y + type->TileHeight * TileSizeY / 2, ((stats->Variables[SIGHTRANGE_INDEX].Max + (type->TileWidth - 1)) * TileSizeX) - 1); } if (type->CanAttack) { if (Preference.ShowReactionRange) { r = (unit.Player->Type == PlayerPerson) ? type->ReactRangePerson : type->ReactRangeComputer; if (r) { Video.DrawCircleClip(ColorBlue, x + type->TileWidth * TileSizeX / 2, y + type->TileHeight * TileSizeY / 2, (r + (type->TileWidth - 1)) * TileSizeX); } } if (Preference.ShowAttackRange && stats->Variables[ATTACKRANGE_INDEX].Max) { // Radius + 1 so you can see all ranges Video.DrawCircleClip(ColorRed, x + type->TileWidth * TileSizeX / 2, y + type->TileHeight * TileSizeY / 2, (stats->Variables[ATTACKRANGE_INDEX].Max + (type->TileWidth - 1)) * TileSizeX + 1); } } } // FIXME: johns: ugly check here, should be removed! if (unit.CurrentAction() != UnitActionDie && unit.IsVisible(ThisPlayer)) { DrawDecoration(unit, type, x, y); } }
void CFont::drawString(gcn::Graphics *graphics, const std::string &txt, int x, int y) { const gcn::ClipRectangle &r = graphics->getCurrentClipArea(); int right = std::min(r.x + r.width - 1, Video.Width - 1); int bottom = std::min(r.y + r.height - 1, Video.Height - 1); if (r.x > right || r.y > bottom) { return; } PushClipping(); SetClipping(r.x, r.y, right, bottom); VideoDrawTextClip(x + r.xOffset, y + r.yOffset, this, txt); PopClipping(); }
/** ** Draw message(s). ** ** @todo FIXME: make message font configurable. */ void DrawMessages(void) { // Draw message line(s) for (int z = 0; z < MessagesCount; ++z) { if (z == 0) { PushClipping(); SetClipping(UI.MapArea.X + 8, UI.MapArea.Y + 8, Video.Width - 1, Video.Height - 1); } VideoDrawTextClip(UI.MapArea.X + 8, UI.MapArea.Y + 8 + z * (GameFont->Height() + 1) - MessagesScrollY, GameFont, Messages[z]); if (z == 0) { PopClipping(); } } if (MessagesCount < 1) { MessagesSameCount = 0; } }