summaryrefslogtreecommitdiff
path: root/hammer/AnchorMgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/AnchorMgr.h')
-rw-r--r--hammer/AnchorMgr.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/hammer/AnchorMgr.h b/hammer/AnchorMgr.h
new file mode 100644
index 0000000..786320c
--- /dev/null
+++ b/hammer/AnchorMgr.h
@@ -0,0 +1,86 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef ANCHORMGR_H
+#define ANCHORMGR_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier1/utlvector.h"
+
+
+enum ESimpleAnchor
+{
+ k_eSimpleAnchorAllSides,
+ k_eSimpleAnchorBottomRight, // The whole control follows the bottom right.
+ k_eSimpleAnchorStretchRight, // Only grow in width.
+ k_eSimpleAnchorRightSide,
+ k_eSimpleAnchorBottomSide
+};
+enum EAnchorHorz
+{
+ k_eAnchorLeft, // Anchor this side of the control to the left of its parent window.
+ k_eAnchorRight // Anchor this side of the control to the right of its parent window.
+};
+enum EAnchorVert
+{
+ k_eAnchorTop, // Anchor this side of the control to the top of its parent window.
+ k_eAnchorBottom // Anchor this side of the control to the bottom of its parent window.
+};
+
+class CAnchorDef
+{
+public:
+ friend class CAnchorMgr;
+
+ // You can use the first constructor for simple cases.
+ CAnchorDef() {}
+ CAnchorDef( int dlgItemID, ESimpleAnchor eSimpleAnchor );
+ CAnchorDef( HWND hWnd, ESimpleAnchor eSimpleAnchor );
+
+ CAnchorDef( int dlgItemID, EAnchorHorz eLeftSide=k_eAnchorLeft, EAnchorVert eTopSide=k_eAnchorTop, EAnchorHorz eRightSide=k_eAnchorRight, EAnchorVert eBottomSide=k_eAnchorBottom );
+ CAnchorDef( HWND hWnd, EAnchorHorz eLeftSide=k_eAnchorLeft, EAnchorVert eTopSide=k_eAnchorTop, EAnchorHorz eRightSide=k_eAnchorRight, EAnchorVert eBottomSide=k_eAnchorBottom );
+
+ // Only one of hWnd or dlgItemID should be set.
+ void Init( HWND hWnd, int dlgItemID, ESimpleAnchor eSimpleAnchor );
+ void Init( HWND hWnd, int dlgItemID, EAnchorHorz eLeftSide, EAnchorVert eTopSide, EAnchorHorz eRightSide, EAnchorVert eBottomSide );
+
+public:
+ int m_DlgItemID;
+ HWND m_hInputWnd; // Either this or m_DlgItemID is set.
+ EAnchorHorz m_AnchorLeft, m_AnchorRight;
+ EAnchorVert m_AnchorTop, m_AnchorBottom;
+
+private:
+ int m_OriginalPos[4]; // left, top, right, bottom
+ HWND m_hWnd;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: This class helps a resizable window resize and move its controls
+// whenever the window is resized. First, you call Init() to tell it how
+// you want all the child windows anchored, then just call OnSize() whenever
+// the parent window is sized.
+//-----------------------------------------------------------------------------
+class CAnchorMgr
+{
+public:
+ CAnchorMgr();
+ void Init( HWND hParentWnd, CAnchorMgr::CAnchorDef *pAnchors, int nAnchors );
+
+ // Call this when the parent window's size changes and it'll resize all the subcontrols.
+ void OnSize();
+
+private:
+ CUtlVector<CAnchorMgr::CAnchorDef> m_Anchors;
+ HWND m_hParentWnd;
+ int m_OriginalParentSize[2]; // wide, tall
+};
+
+
+#endif // ANCHORMGR_H