Commit 9a3b037e authored by Dan Lipsa's avatar Dan Lipsa

BUG: lastPos = firstPos + size - 1.

In computing the text bounding box, the -1 in the formula was omitted.
parent 87f9baa6
......@@ -441,21 +441,17 @@ void vtkTextMapper::UpdateQuad(vtkActor2D *actor, int dpi)
int dims[3];
this->Image->GetDimensions(dims);
// Add a fudge factor to the texture coordinates to prevent the top
// row of pixels from being truncated on some systems. The coordinates
// are calculated to be centered on a texel and trim the padding from the
// image. (padding is often added to create textures that have power-of-two
// dimensions)
// The coordinates are calculated to be centered on a texel and
// trim the padding from the image. (padding is often added to
// create textures that have power-of-two dimensions)
float tw = static_cast<float>(this->TextDims[0]);
float th = static_cast<float>(this->TextDims[1]);
float iw = static_cast<float>(dims[0]);
float ih = static_cast<float>(dims[1]);
float tcXMin = 1.f / (2.f * iw);
float tcYMin = 1.f / (2.f * ih);
float tcXMax = std::min(1.0f,
(((2.f * tw - 1.f) / (2.f)) + 0.000001f) / iw);
float tcYMax = std::min(1.0f,
(((2.f * th - 1.f) / (2.f)) + 0.000001f) / ih);
float tcXMin = 0;
float tcYMin = 0;
float tcXMax = static_cast<float>(tw) / iw;
float tcYMax = static_cast<float>(th) / ih;
if (vtkFloatArray *tc =
vtkArrayDownCast<vtkFloatArray>(
this->PolyData->GetPointData()->GetTCoords()))
......
......@@ -1357,6 +1357,7 @@ bool vtkFreeTypeTools::RenderStringInternal(vtkTextProperty *tprop,
ptr[3] = 255;
}
}
return true;
}
......@@ -1509,8 +1510,12 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
// The rotated padding on the text's vertical and horizontal axes:
vtkVector2i hPad(pad, 0);
vtkVector2i vPad(0, pad);
vtkVector2i hOne(1, 0);
vtkVector2i vOne(0, 1);
rotateVector2i(hPad, s, c);
rotateVector2i(vPad, s, c);
rotateVector2i(hOne, s, c);
rotateVector2i(vOne, s, c);
// Calculate the bottom left corner of the data rect. Start at anchor point
// (0, 0) and subtract out justification. Account for background/frame padding to
......@@ -1522,7 +1527,7 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
metaData.BL = metaData.BL - (metaData.dx * 0.5);
break;
case VTK_TEXT_RIGHT:
metaData.BL = metaData.BL - metaData.dx + hPad;
metaData.BL = metaData.BL - metaData.dx + hPad + hOne;
break;
case VTK_TEXT_LEFT:
metaData.BL = metaData.BL - hPad;
......@@ -1541,7 +1546,7 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
metaData.BL = metaData.BL - vPad;
break;
case VTK_TEXT_TOP:
metaData.BL = metaData.BL - metaData.dy + vPad;
metaData.BL = metaData.BL - metaData.dy + vPad + vOne;
break;
default:
vtkErrorMacro(<< "Bad vertical alignment flag: "
......@@ -1550,9 +1555,9 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
}
// Compute the other corners of the data:
metaData.TL = metaData.BL + metaData.dy;
metaData.TR = metaData.TL + metaData.dx;
metaData.BR = metaData.BL + metaData.dx;
metaData.TL = metaData.BL + metaData.dy - vOne;
metaData.TR = metaData.TL + metaData.dx - hOne;
metaData.BR = metaData.BL + metaData.dx - hOne;
// First baseline offset from top-left corner.
vtkVector2i penOffset(pad, -pad);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment