00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#include <SDL.h>
00024
#include "guitypedefs.h"
00025
#ifdef _WIN32
00026
#pragma warning(push)
00027
00028
#include <yvals.h>
00029
00030
#pragma warning(disable: 4251)
00031
#pragma warning(disable: 4786) // identifier was truncated to 'number' characters in the debug information
00032
00033
00034
00035
00036
00037
#include <sge.h>
00038
00039
#pragma warning(pop)
00040
#else
00041
#include <sge.h>
00042
#endif
00043
00044
00045
#include "TTFont.h"
00046
#include "SDLControl.h"
00047
#include "Surface.h"
00048
#include "Output.h"
00049
00050
00051
namespace gui
00052 {
00053
00054
00055 Output::Output(
Surface *s,
coord_t x,coord_t y,coord_t w,coord_t h,
SurfaceHelper *pclHelper)
00056 :
Surface(s,x,y,w,h,pclHelper)
00057 {
00058 }
00059
00060
00061 Output::~Output()
00062 {
00063 }
00064
00065
00066 void Output::AddLine(
const string &str)
00067 {
00068
TTFont *font =
GetTTFont();
00069 stringvector_t::iterator it;
00070
00071
00072
m_lines =
GetH() / font ->
GetH();
00073
while (
m_strings.size() < (
unsigned)
m_lines)
00074 {
00075
m_strings.insert(
m_strings.end(),
"");
00076 }
00077
00078
m_strings.insert(
m_strings.end(), str);
00079
while (
m_strings.size() > (
unsigned)
m_lines)
00080 {
00081
m_strings.erase(
m_strings.begin());
00082 }
00083
00084 SetDirty(
true);
00085
00086
00087
00088 SDL_Rect r =
GetAbsoluteRect();
00089 r.w = 0;
00090
for (it =
m_strings.begin(); it !=
m_strings.end(); it++)
00091 {
00092 SDL_Rect rect = sge_TTF_TextSize(font -> GetFont(), (
char *)(*it).c_str() );
00093
if (rect.w > r.w)
00094 {
00095 r.w = rect.w;
00096 }
00097 }
00098
00099
DEB(printf(
"InvalidateRectEv(%d,%d,%d,%d)\n",r.x,r.y,r.w,r.h);)
00100 InvalidateRectEv(r);
00101 }
00102
00103
00104 void Output::Draw()
00105 {
00106 stringvector_t::iterator it;
00107 SDL_Rect *area =
GetClientRectPtr();
00108 Uint32 color;
00109
TTFont *font =
GetTTFont();
00110 SDL_Color fg;
00111 SDL_Color bg;
00112
coord_t x = 0;
00113
coord_t y = font ->
GetH();
00114
00115 color =
GetFgColor();
00116 memmove(&fg,&color,4);
00117 color =
GetBgColor();
00118 memmove(&bg,&color,4);
00119
00120 SDL_FillRect(m_screen, area, color );
00121
00122
for (it =
m_strings.begin(); it !=
m_strings.end(); it++)
00123 {
00124 sge_tt_textoutf(m_screen, font -> GetFont(),
00125 x,y,
00126 fg.r,fg.g,fg.b,
00127 bg.r,bg.g,bg.b,
00128 SDL_ALPHA_OPAQUE,
00129
"%s",(*it).c_str());
00130 y += font ->
GetH();
00131 }
00132
00133 }
00134
00135
00136 }