Переглянути джерело

Don't draw elements outside clipping or window region (WIP)

- Text element clipping a bit off since they are not sized.
- Multiple boxes not supported.
- Clipping region can be improved by intersecting with window dimensions.
Michael Ragazzon 3 роки тому
батько
коміт
4eb9d2bd8f
1 змінених файлів з 29 додано та 0 видалено
  1. 29 0
      Source/Core/ElementUtilities.cpp

+ 29 - 0
Source/Core/ElementUtilities.cpp

@@ -275,6 +275,35 @@ bool ElementUtilities::SetClippingRegion(Element* element, Context* context)
 		ApplyActiveClipRegion(context, render_interface);
 	}
 
+	if (element)
+	{
+		if (!clip)
+		{
+			clip_origin = Vector2i(0);
+			clip_dimensions = context->GetDimensions();
+		}
+
+		float clip_top = (float)clip_origin.y;
+		float clip_left = (float)clip_origin.x;
+		float clip_right = (float)(clip_origin.x + clip_dimensions.x);
+		float clip_bottom = (float)(clip_origin.y + clip_dimensions.y);
+
+		const Vector2f offset = element->GetAbsoluteOffset(Box::BORDER);
+		const Vector2f size = element->GetBox().GetSize(Box::BORDER);
+
+		float x = offset.x;
+		float y = offset.y;
+
+		bool render_element = !(x > clip_right);
+		render_element &= !(x + size.x < clip_left);
+
+		render_element &= !(y > clip_bottom);
+		render_element &= !(y + size.y < clip_top);
+
+		if (!render_element)
+			return false;
+	}
+
 	return true;
 }