X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Ftext.cpp;h=166bbb5212c7145fbc1c39bbfccf44cf7441354f;hb=83f553a382ce554951594de85e4fd7b854305463;hp=bd358032c65ff22d6f1cee3d83af64f5570e6909;hpb=6deafc9f236b90175a303944815f7c0eac1c95c1;p=libs%2Fgltk.git diff --git a/source/text.cpp b/source/text.cpp index bd35803..166bbb5 100644 --- a/source/text.cpp +++ b/source/text.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -24,15 +25,8 @@ struct Text::CoordsToGeomData Text::Text(): - style(0) -{ - Line line; - line.start = 0; - line.bytes = 0; - line.length = 0; - line.width = 0; - lines.push_back(line); -} + lines(1) +{ } Text::Text(const Style &s, const string &t): style(&s) @@ -48,16 +42,16 @@ void Text::set_style(const Style *s) { const GL::Font &font = style->get_font(); float font_size = style->get_font_size(); - for(vector::iterator i=lines.begin(); i!=lines.end(); ++i) - i->width = static_cast(font.get_string_width(text.substr(i->start, i->bytes))*font_size); + for(Line &l: lines) + l.width = static_cast(font.get_string_width(text.substr(l.start, l.bytes))*font_size); } } unsigned Text::get_width() const { unsigned width = 0; - for(vector::const_iterator i=lines.begin(); i!=lines.end(); ++i) - width = max(width, i->width); + for(const Line &l: lines) + width = max(width, l.width); return width; } @@ -92,8 +86,7 @@ void Text::erase(unsigned pos, unsigned len) check_alignment(pos+len); text.erase(pos, len); - vector::iterator i; - for(i=lines.begin(); (i!=lines.end() && i->start+i->bytes=pos; }); if(pos+len>i->start+i->bytes) find_lines(); @@ -116,8 +109,7 @@ void Text::insert(unsigned pos, const string &s) find_lines(); else { - vector::iterator i; - for(i=lines.begin(); (i!=lines.end() && i->start+i->bytes=pos; }); i->bytes += s.size(); i->length = count_characters(i->start, i->bytes); @@ -158,7 +150,7 @@ unsigned Text::move_offset(unsigned offs, int change) const return offs; StringCodec::Utf8::Decoder dec(StringCodec::IGNORE_ERRORS); - string::const_iterator i = text.begin()+offs; + auto i = text.begin()+offs; if(change>0) { for(; change>0; --change) @@ -169,7 +161,7 @@ unsigned Text::move_offset(unsigned offs, int change) const while(change<0 && i!=text.begin()) { --i; - string::const_iterator j = i; + auto j = i; if(dec.decode_char(text, j)!=-1) ++change; } @@ -211,7 +203,7 @@ unsigned Text::coords_to_offset(unsigned row, unsigned col) const else { StringCodec::Utf8::Decoder dec; - string::const_iterator i = text.begin()+line.start; + auto i = text.begin()+line.start; for(col=min(col, line.length); col; --col) dec.decode_char(text, i); return i-text.begin(); @@ -291,8 +283,8 @@ void Text::find_lines() unsigned Text::count_characters(unsigned start, unsigned bytes) const { StringCodec::Utf8::Decoder dec; - string::const_iterator i = text.begin()+start; - string::const_iterator end = i+bytes; + auto i = text.begin()+start; + auto end = i+bytes; unsigned count = 0; for(; i