void RenderText::caretPos(int offset, int flags, int &_x, int &_y, int &width, int &height) { if (!m_lines.count()) { _x = _y = height = -1; width = 1; return; } int pos; InlineTextBox * s = findInlineTextBox( offset, pos, true ); RenderText *t = s->renderText(); // kdDebug(6040) << "offset="<<offset << " pos="<<pos << endl; const QFontMetrics &fm = t->metrics( s->m_firstLine ); height = fm.height(); // s->m_height; _x = s->m_x + s->widthFromStart(pos); _y = s->m_y + s->baseline() - fm.ascent(); width = 1; if (flags & CFOverride) { width = offset < maxOffset() ? fm.width(str->s[offset]) : 1; }/*end if*/ #if 0 kdDebug(6040) << "_x="<<_x << " s->m_x="<<s->m_x << " s->m_start"<<s->m_start << " s->m_len" << s->m_len << " _y=" << _y << endl; #endif int absx, absy; if (absolutePosition(absx,absy)) { //kdDebug(6040) << "absx=" << absx << " absy=" << absy << endl; _x += absx; _y += absy; } else { // we don't know our absolute position, and there is no point returning // just a relative one _x = _y = -1; } }