summaryrefslogtreecommitdiff
path: root/public/panorama/text/iuitextlayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/panorama/text/iuitextlayout.h')
-rw-r--r--public/panorama/text/iuitextlayout.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/public/panorama/text/iuitextlayout.h b/public/panorama/text/iuitextlayout.h
new file mode 100644
index 0000000..2dd92c8
--- /dev/null
+++ b/public/panorama/text/iuitextlayout.h
@@ -0,0 +1,69 @@
+//=========== Copyright Valve Corporation, All rights reserved. ===============//
+//
+// Purpose:
+//=============================================================================//
+
+#ifndef IUITEXTLAYOUT_H
+#define IUITEXTLAYOUT_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "mathlib/mathlib.h"
+#include "mathlib/vector2d.h"
+#include "tier1/utlvector.h"
+#include "panorama/panoramatypes.h"
+
+namespace panorama
+{
+
+//
+// Interface that needs to be implemented for text layout on all platforms
+//
+class IUITextLayout
+{
+public:
+ virtual ~IUITextLayout() {}
+
+ // Set formatting for character ranges
+ virtual void SetFontName( uint32 unCharStartIndex, uint32 unCharEndIndex, const char *pchFontName ) = 0;
+ virtual void SetFontSize( uint32 unCharStartIndex, uint32 unCharEndIndex, float flFontSize ) = 0;
+ virtual void SetFontStyle( uint32 unCharStartIndex, uint32 unCharEndIndex, EFontStyle eFontStyle ) = 0;
+ virtual void SetFontWeight( uint32 unCharStartIndex, uint32 unCharEndIndex, EFontWeight eFontWeight ) = 0;
+ virtual void SetUnderline( uint32 unCharStartIndex, uint32 unCharEndIndex, bool bUnderline ) = 0;
+ virtual void SetStrikethrough( uint32 unCharStartIndex, uint32 unCharEndIndex, bool bStrikethrough ) = 0;
+ virtual void SetInlineObject( uint32 unCharIndex, float flWidth, float flHeight ) = 0;
+ virtual void MarkColorRangeForMeasurement( uint32 unCharStartIndex, uint32 unCharEndIndex ) = 0;
+
+ // Gets the size required to fully draw the text layout
+ virtual void GetRequiredSize( float &flWidth, float &flHeight ) = 0;
+
+ // Hit tests a point against the text layout.
+ // unHitRunLength returns the character index hit
+ // bIsTrailingHit indicates whether the hit is on the leading or trailing side of the char
+ // bInside is true if the hit is within the text region, when false the position closest the point is returned as
+ // the character hit offset
+ virtual void HitTestPoint( Vector2D point, uint32 &unFirstHitOffset, bool &bIsTrailingHit, bool &bIsInsideString ) = 0;
+
+ // Struct used in some calls below
+ struct HitTestRegionRect_t
+ {
+ Vector2D topLeft;
+ Vector2D bottomRight;
+ uint32 unCharStart;
+ uint32 unCharEnd;
+ bool bIsText;
+ bool bIsTrimmed;
+ };
+
+ // Determines the layout coordinates for a given character offset, coordinates are relative to top left of text layout
+ virtual void GetCharacterCoordinates( uint32 unCharIndex, HitTestRegionRect_t &charRegionRect ) = 0;
+
+ // Determines a vector of rects enclosing a range of text, normally used for getting selection highlight regions
+ virtual void GetCharacterRangeCoordinates( uint32 unCharStartIndex, uint32 unCharEndIndex, CUtlVector<HitTestRegionRect_t> &vecRangeRegionRects ) = 0;
+};
+
+} // namespace panorama
+
+#endif // IUITEXTLAYOUT_H \ No newline at end of file