if (!rect.intersects(tnRect)) return false;
for (int i = 0 ; i < list.size(); i++) {
StrokingTextPainter.TextRun run;
run = (StrokingTextPainter.TextRun)list.get(i);
TextSpanLayout layout = run.getLayout();
AttributedCharacterIterator aci = run.getACI();
aci.first();
SoftReference sr;
sr =(SoftReference)aci.getAttribute(TEXT_COMPOUND_ID);
Element runElem = (Element)sr.get();
if (runElem == null) continue;
// Only consider runElem if it is sensitive.
if (checkSensitivity && !isTextSensitive(runElem)) continue;
Element p = runElem;
while ((p != null) && (p != txtElem) && (p != elem)) {
p = (Element) txtBridge.getParentNode(p);
}
if (p != elem) continue;
// runElem is a child of elem so check it out.
Rectangle2D glBounds = layout.getBounds2D();
if (glBounds == null) continue;
glBounds = at.createTransformedShape(glBounds).getBounds2D();
if (!rect.intersects(glBounds)) continue;
GVTGlyphVector gv = layout.getGlyphVector();
for (int g = 0; g < gv.getNumGlyphs(); g++) {
Shape gBounds = gv.getGlyphLogicalBounds(g);
if (gBounds != null) {
gBounds = at.createTransformedShape
(gBounds).getBounds2D();