sprite->Draw(dest, position, col, row);
}
-void Font::DrawString(const char *s, SDL_Surface *dest, const Vector<int> &positionIn, int maxChars) const {
+void Font::DrawString(const char *s, SDL_Surface *dest, const Vector<int> &positionIn, int maxWidth) const {
if (!sprite) return;
Vector<int> position(positionIn);
+ Vector<int> lineHead(positionIn);
Vector<int> step(CharWidth(), 0);
- for (int i(0); s[i] && (maxChars <= 0 || i < maxChars); ++i, position += step) {
- DrawChar(s[i], dest, position);
+ Vector<int> lineBreak(0, CharHeight());
+ for (int i(0), col(0); s[i] && (maxWidth <= 0 || col < maxWidth); ++i) {
+ if (s[i] == '\n') {
+ lineHead += lineBreak;
+ position = lineHead;
+ col = 0;
+ } else {
+ DrawChar(s[i], dest, position);
+ position += step;
+ ++col;
+ }
}
}
-void Font::DrawStringRight(const char *s, SDL_Surface *dest, const Vector<int> &positionIn, int maxChars) const {
+void Font::DrawStringRight(const char *s, SDL_Surface *dest, const Vector<int> &positionIn, int maxWidth) const {
+ // NOTE: this does not handle line breaks
if (!sprite) return;
int length(0);
- while (length < maxChars && s[length] != '\0') {
+ while (length < maxWidth && s[length] != '\0') {
++length;
}
Vector<int> position(positionIn.X() - length * CharWidth(), positionIn.Y());
int CharWidth() const { return sprite->Width(); }
int CharHeight() const { return sprite->Height(); }
void DrawChar(char c, SDL_Surface *dest, const geometry::Vector<int> &position) const;
- void DrawString(const char *s, SDL_Surface *dest, const geometry::Vector<int> &position, int maxChars = 0) const;
- void DrawStringRight(const char *s, SDL_Surface *dest, const geometry::Vector<int> &position, int maxChars = 0) const;
+ void DrawString(const char *s, SDL_Surface *dest, const geometry::Vector<int> &position, int maxWidth = 0) const;
+ void DrawStringRight(const char *s, SDL_Surface *dest, const geometry::Vector<int> &position, int maxWidth = 0) const;
void DrawDigit(int d, SDL_Surface *dest, const geometry::Vector<int> &position) const;
void DrawNumber(int n, SDL_Surface *dest, const geometry::Vector<int> &position, int digits = 0) const;
void DrawNumberRight(int n, SDL_Surface *dest, const geometry::Vector<int> &position, int digits = 0) const;