diff --git a/text/text.go b/text/text.go
index a160da27d9279268c5ecb4737e8d316c4c0b003b..a0bf35e1bb46a6da4c360c06a9c03300fcaf25ea 100644
--- a/text/text.go
+++ b/text/text.go
@@ -109,6 +109,27 @@ func (txt *Text) Bounds() pixel.Rect {
 	return txt.bounds
 }
 
+func (txt *Text) BoundsOf(s string) pixel.Rect {
+	dot := txt.Dot
+	prevR := txt.prevR
+	bounds := pixel.Rect{}
+
+	for _, r := range s {
+		var b pixel.Rect
+		_, _, b, dot = txt.Atlas().DrawRune(prevR, r, dot)
+
+		if bounds.W()*bounds.H() == 0 {
+			bounds = b
+		} else {
+			bounds = bounds.Union(b)
+		}
+
+		prevR = r
+	}
+
+	return bounds
+}
+
 func (txt *Text) Color(c color.Color) {
 	rgba := pixel.ToRGBA(c)
 	for i := range txt.glyph {