X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftext.cpp;h=166bbb5212c7145fbc1c39bbfccf44cf7441354f;hb=9678abb23abe450109e2feda081f5bba5f20cc94;hp=86730757fd6c93889b772ac648bbcd4913a98c85;hpb=720455325086e08bc9fdcd822d713480d0c2e0a0;p=libs%2Fgltk.git diff --git a/source/text.cpp b/source/text.cpp index 8673075..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(; imatrix()); - data.bld->matrix() *= GL::Matrix::translation(rgeom.x, rgeom.y, 0); - data.bld->matrix() *= GL::Matrix::scaling(style->get_font_size()); + GL::VertexBuilder::PushMatrix _pushm(*data.bld); + data.bld->transform(GL::Matrix::translation(rgeom.x, rgeom.y, 0)); + data.bld->transform(GL::Matrix::scaling(style->get_font_size())); style->get_font().build_string(text.substr(line.start, line.bytes), *data.bld); } @@ -350,8 +342,8 @@ void Text::coords_to_geom_line(unsigned i, const Geometry &rgeom, CoordsToGeomDa { if(i==data.row) { - string::const_iterator begin = text.begin()+lines[i].start; - string::const_iterator j = begin; + auto begin = text.begin()+lines[i].start; + auto j = begin; if(lines[i].length==lines[i].bytes) j += data.col; else