Initial revision
diff --git a/Lib/lib-stdwin/BoxParent.py b/Lib/lib-stdwin/BoxParent.py
new file mode 100644
index 0000000..7a0723a
--- /dev/null
+++ b/Lib/lib-stdwin/BoxParent.py
@@ -0,0 +1,41 @@
+from TransParent import TransParent
+
+class BoxParent() = TransParent():
+	#
+	def create(self, (parent, (dh, dv))):
+		self = TransParent.create(self, parent)
+		self.dh = dh
+		self.dv = dv
+		return self
+	#
+	def getminsize(self, (m, (width, height))):
+		width = max(0, width - 2*self.dh)
+		height = max(0, height - 2*self.dv)
+		width, height = self.child.getminsize(m, (width, height))
+		return width + 2*self.dh, height + 2*self.dv
+	#
+	def setbounds(self, bounds):
+		(left, top), (right, bottom) = bounds
+		self.bounds = bounds
+		left = min(right, left + self.dh)
+		top = min(bottom, top + self.dv)
+		right = max(left, right - self.dh)
+		bottom = max(top, bottom - self.dv)
+		self.innerbounds = (left, top), (right, bottom)
+		self.child.setbounds(self.innerbounds)
+	#
+	def getbounds(self):
+		return self.bounds
+	#
+	def draw(self, args):
+		d, area = args
+		(left, top), (right, bottom) = self.bounds
+		left = left + 1
+		top = top + 1
+		right = right - 1
+		bottom = bottom - 1
+		d.box((left, top), (right, bottom))
+		TransParent.draw(self, args) # XXX clip to innerbounds?
+	#
+	# XXX should scroll clip to innerbounds???
+	# XXX currently the only user restricts itself to child's bounds