diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/client/vgui_grid.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/client/vgui_grid.cpp')
| -rw-r--r-- | mp/src/game/client/vgui_grid.cpp | 820 |
1 files changed, 410 insertions, 410 deletions
diff --git a/mp/src/game/client/vgui_grid.cpp b/mp/src/game/client/vgui_grid.cpp index 0d32295e..d5f11d6b 100644 --- a/mp/src/game/client/vgui_grid.cpp +++ b/mp/src/game/client/vgui_grid.cpp @@ -1,410 +1,410 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-#include "cbase.h"
-#include "vgui_grid.h"
-#include <vgui_controls/Controls.h>
-#include <vgui/ISurface.h>
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-
-using namespace vgui;
-
-
-#define AssertCheck(expr, msg) \
- if(!(expr))\
- {\
- assert(!msg);\
- return 0;\
- }
-
-
-
-// ------------------------------------------------------------------------------ //
-// CGrid::CGridEntry.
-// ------------------------------------------------------------------------------ //
-
-CGrid::CGridEntry::CGridEntry()
-{
- m_pPanel = NULL;
- m_bUnderline = false;
-}
-
-CGrid::CGridEntry::~CGridEntry()
-{
-}
-
-
-// ------------------------------------------------------------------------------ //
-// CGrid.
-// ------------------------------------------------------------------------------ //
-
-CGrid::CGrid()
-{
- Clear();
-}
-
-
-CGrid::~CGrid()
-{
- Term();
-}
-
-
-bool CGrid::SetDimensions(int xCols, int yRows)
-{
- Term();
-
- m_GridEntries = new CGridEntry[xCols * yRows];
- m_Widths = new int[xCols*2 + yRows*2];
- m_Heights = m_Widths + xCols;
- m_ColOffsets = m_Heights + yRows;
- m_RowOffsets = m_ColOffsets + xCols;
-
- if(!m_GridEntries || !m_Widths)
- {
- Term();
- return false;
- }
-
- memset(m_Widths, 0, sizeof(int) * (xCols*2 + yRows*2));
-
- m_xCols = xCols;
- m_yRows = yRows;
- return true;
-}
-
-
-void CGrid::Term()
-{
- delete [] m_GridEntries;
- delete [] m_Widths;
- Clear();
-}
-
-
-Panel* CGrid::GetEntry(int x, int y)
-{
- return GridEntry(x, y)->m_pPanel;
-}
-
-
-bool CGrid::SetEntry(int x, int y, Panel *pPanel)
-{
- CGridEntry *pEntry = GridEntry(x, y);
- if(!pEntry)
- return false;
-
- if (pEntry->m_pPanel)
- {
- pEntry->m_pPanel->SetParent( (Panel *)NULL );
- }
-
- pEntry->m_pPanel = pPanel;
- if (pPanel)
- {
- pPanel->SetParent(this);
- }
-
- m_bDirty = true;
- return true;
-}
-
-
-int CGrid::GetXSpacing()
-{
- return m_xSpacing;
-}
-
-
-int CGrid::GetYSpacing()
-{
- return m_ySpacing;
-}
-
-
-void CGrid::SetSpacing(int xSpacing, int ySpacing)
-{
- if(xSpacing != m_xSpacing)
- {
- m_xSpacing = xSpacing;
- CalcColOffsets(0);
- m_bDirty = true;
- }
-
- if(ySpacing != m_ySpacing)
- {
- m_ySpacing = ySpacing;
- CalcRowOffsets(0);
- m_bDirty = true;
- }
-}
-
-
-bool CGrid::SetColumnWidth(int iColumn, int width)
-{
- AssertCheck(iColumn >= 0 && iColumn < m_xCols, "CGrid::SetColumnWidth : invalid location specified");
- m_Widths[iColumn] = width;
- CalcColOffsets(iColumn+1);
- m_bDirty = true;
- return true;
-}
-
-
-bool CGrid::SetRowHeight(int iRow, int height)
-{
- AssertCheck(iRow >= 0 && iRow < m_yRows, "CGrid::SetColumnWidth : invalid location specified");
- m_Heights[iRow] = height;
- CalcRowOffsets(iRow+1);
- m_bDirty = true;
- return true;
-}
-
-
-int CGrid::GetColumnWidth(int iColumn)
-{
- AssertCheck(iColumn >= 0 && iColumn < m_xCols, "CGrid::GetColumnWidth: invalid location specified");
- return m_Widths[iColumn];
-}
-
-
-int CGrid::GetRowHeight(int iRow)
-{
- AssertCheck(iRow >= 0 && iRow < m_yRows, "CGrid::GetRowHeight: invalid location specified");
- return m_Heights[iRow];
-}
-
-
-int CGrid::CalcFitColumnWidth(int iColumn)
-{
- AssertCheck(iColumn >= 0 && iColumn < m_xCols, "CGrid::CalcFitColumnWidth: invalid location specified");
-
- int maxSize = 0;
- for(int i=0; i < m_yRows; i++)
- {
- Panel *pPanel = GridEntry(iColumn, i)->m_pPanel;
- if(!pPanel)
- continue;
-
- int w, h;
- pPanel->GetSize(w,h);
- if(w > maxSize)
- maxSize = w;
- }
-
- return maxSize;
-}
-
-
-int CGrid::CalcFitRowHeight(int iRow)
-{
- AssertCheck(iRow >= 0 && iRow < m_yRows, "CGrid::CalcFitRowHeight: invalid location specified");
-
- int maxSize = 0;
- for(int i=0; i < m_xCols; i++)
- {
- Panel *pPanel = GridEntry(i, iRow)->m_pPanel;
- if(!pPanel)
- continue;
-
- int w, h;
- pPanel->GetSize(w,h);
- if(h > maxSize)
- maxSize = h;
- }
-
- return maxSize;
-}
-
-
-void CGrid::AutoSetRowHeights()
-{
- for(int i=0; i < m_yRows; i++)
- SetRowHeight(i, CalcFitRowHeight(i));
-}
-
-
-bool CGrid::GetEntryBox(
- int col, int row, int &x, int &y, int &w, int &h)
-{
- AssertCheck(col >= 0 && col < m_xCols && row >= 0 && row < m_yRows, "CGrid::GetEntryBox: invalid location specified");
-
- x = m_ColOffsets[col];
- w = m_Widths[col];
-
- y = m_RowOffsets[row];
- h = m_Heights[row];
- return true;
-}
-
-
-bool CGrid::CopyColumnWidths(CGrid *pOther)
-{
- if(!pOther || pOther->m_xCols != m_xCols)
- return false;
-
- for(int i=0; i < m_xCols; i++)
- m_Widths[i] = pOther->m_Widths[i];
-
- CalcColOffsets(0);
- m_bDirty = true;
- return true;
-}
-
-
-void CGrid::RepositionContents()
-{
- for(int x=0; x < m_xCols; x++)
- {
- for(int y=0; y < m_yRows; y++)
- {
- Panel *pPanel = GridEntry(x,y)->m_pPanel;
- if(!pPanel)
- continue;
-
- pPanel->SetBounds(
- m_ColOffsets[x],
- m_RowOffsets[y],
- m_Widths[x],
- m_Heights[y]);
- }
- }
-
- m_bDirty = false;
-}
-
-
-int CGrid::CalcDrawHeight()
-{
- if(m_yRows > 0)
- {
- return m_RowOffsets[m_yRows-1] + m_Heights[m_yRows - 1] + m_ySpacing;
- }
- else
- {
- return 0;
- }
-}
-
-
-void CGrid::Paint()
-{
- if(m_bDirty)
- RepositionContents();
-
- Panel::Paint();
-
- int w, h;
- GetSize( w, h );
- int xx, yy;
- GetPos( xx, yy );
- // walk the grid looking for underlined rows
- int x = 0, y = 0;
- for (int row = 0; row < m_yRows; row++)
- {
- CGridEntry *cell = GridEntry(0, row);
-
- y = m_RowOffsets[ row ] + m_Heights[ row ] + m_ySpacing;
- if (cell->m_bUnderline)
- {
- vgui::surface()->DrawSetColor(cell->m_UnderlineColor[0], cell->m_UnderlineColor[1], cell->m_UnderlineColor[2], cell->m_UnderlineColor[3]);
- vgui::surface()->DrawFilledRect(x, y - (cell->m_iUnderlineOffset + 1), GetWide(), y - cell->m_iUnderlineOffset);
- }
- }
-}
-
-void CGrid::PaintBackground()
-{
- Panel::PaintBackground();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets underline color for a particular row
-//-----------------------------------------------------------------------------
-void CGrid::SetRowUnderline(int row, bool enabled, int offset, int r, int g, int b, int a)
-{
- CGridEntry *cell = GridEntry(0, row);
- cell->m_bUnderline = enabled;
- if (enabled)
- {
- cell->m_iUnderlineOffset = offset;
- cell->m_UnderlineColor[0] = r;
- cell->m_UnderlineColor[1] = g;
- cell->m_UnderlineColor[2] = b;
- cell->m_UnderlineColor[3] = a;
- }
-}
-
-void CGrid::Clear()
-{
- m_xCols = m_yRows = 0;
- m_Widths = NULL;
- m_GridEntries = NULL;
- m_xSpacing = m_ySpacing = 0;
- m_bDirty = false;
-}
-
-
-CGrid::CGridEntry* CGrid::GridEntry(int x, int y)
-{
- AssertCheck(x >= 0 && x < m_xCols && y >= 0 && y < m_yRows, "CGrid::GridEntry: invalid location specified");
- return &m_GridEntries[y*m_xCols + x];
-}
-
-
-void CGrid::CalcColOffsets(int iStart)
-{
- int cur = m_xSpacing;
- if(iStart != 0)
- cur += m_ColOffsets[iStart-1] + m_Widths[iStart-1];
-
- for(int i=iStart; i < m_xCols; i++)
- {
- m_ColOffsets[i] = cur;
- cur += m_Widths[i] + m_xSpacing;
- }
-}
-
-
-void CGrid::CalcRowOffsets(int iStart)
-{
- int cur = m_ySpacing;
- if(iStart != 0)
- cur += m_RowOffsets[iStart-1];
-
- for(int i=iStart; i < m_yRows; i++)
- {
- m_RowOffsets[i] = cur;
- cur += m_Heights[i] + m_ySpacing;
- }
-}
-
-bool CGrid::GetCellAtPoint(int worldX, int worldY, int &row, int &col)
-{
- row = -1; col = -1;
- for(int x=0; x < m_xCols; x++)
- {
- for(int y=0; y < m_yRows; y++)
- {
- Panel *pPanel = GridEntry(x,y)->m_pPanel;
- if (!pPanel)
- continue;
-
- if (pPanel->IsWithin(worldX, worldY))
- {
- col = x;
- row = y;
- return true;
- }
- }
- }
-
- return false;
-}
-
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "vgui_grid.h" +#include <vgui_controls/Controls.h> +#include <vgui/ISurface.h> + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + + +using namespace vgui; + + +#define AssertCheck(expr, msg) \ + if(!(expr))\ + {\ + assert(!msg);\ + return 0;\ + } + + + +// ------------------------------------------------------------------------------ // +// CGrid::CGridEntry. +// ------------------------------------------------------------------------------ // + +CGrid::CGridEntry::CGridEntry() +{ + m_pPanel = NULL; + m_bUnderline = false; +} + +CGrid::CGridEntry::~CGridEntry() +{ +} + + +// ------------------------------------------------------------------------------ // +// CGrid. +// ------------------------------------------------------------------------------ // + +CGrid::CGrid() +{ + Clear(); +} + + +CGrid::~CGrid() +{ + Term(); +} + + +bool CGrid::SetDimensions(int xCols, int yRows) +{ + Term(); + + m_GridEntries = new CGridEntry[xCols * yRows]; + m_Widths = new int[xCols*2 + yRows*2]; + m_Heights = m_Widths + xCols; + m_ColOffsets = m_Heights + yRows; + m_RowOffsets = m_ColOffsets + xCols; + + if(!m_GridEntries || !m_Widths) + { + Term(); + return false; + } + + memset(m_Widths, 0, sizeof(int) * (xCols*2 + yRows*2)); + + m_xCols = xCols; + m_yRows = yRows; + return true; +} + + +void CGrid::Term() +{ + delete [] m_GridEntries; + delete [] m_Widths; + Clear(); +} + + +Panel* CGrid::GetEntry(int x, int y) +{ + return GridEntry(x, y)->m_pPanel; +} + + +bool CGrid::SetEntry(int x, int y, Panel *pPanel) +{ + CGridEntry *pEntry = GridEntry(x, y); + if(!pEntry) + return false; + + if (pEntry->m_pPanel) + { + pEntry->m_pPanel->SetParent( (Panel *)NULL ); + } + + pEntry->m_pPanel = pPanel; + if (pPanel) + { + pPanel->SetParent(this); + } + + m_bDirty = true; + return true; +} + + +int CGrid::GetXSpacing() +{ + return m_xSpacing; +} + + +int CGrid::GetYSpacing() +{ + return m_ySpacing; +} + + +void CGrid::SetSpacing(int xSpacing, int ySpacing) +{ + if(xSpacing != m_xSpacing) + { + m_xSpacing = xSpacing; + CalcColOffsets(0); + m_bDirty = true; + } + + if(ySpacing != m_ySpacing) + { + m_ySpacing = ySpacing; + CalcRowOffsets(0); + m_bDirty = true; + } +} + + +bool CGrid::SetColumnWidth(int iColumn, int width) +{ + AssertCheck(iColumn >= 0 && iColumn < m_xCols, "CGrid::SetColumnWidth : invalid location specified"); + m_Widths[iColumn] = width; + CalcColOffsets(iColumn+1); + m_bDirty = true; + return true; +} + + +bool CGrid::SetRowHeight(int iRow, int height) +{ + AssertCheck(iRow >= 0 && iRow < m_yRows, "CGrid::SetColumnWidth : invalid location specified"); + m_Heights[iRow] = height; + CalcRowOffsets(iRow+1); + m_bDirty = true; + return true; +} + + +int CGrid::GetColumnWidth(int iColumn) +{ + AssertCheck(iColumn >= 0 && iColumn < m_xCols, "CGrid::GetColumnWidth: invalid location specified"); + return m_Widths[iColumn]; +} + + +int CGrid::GetRowHeight(int iRow) +{ + AssertCheck(iRow >= 0 && iRow < m_yRows, "CGrid::GetRowHeight: invalid location specified"); + return m_Heights[iRow]; +} + + +int CGrid::CalcFitColumnWidth(int iColumn) +{ + AssertCheck(iColumn >= 0 && iColumn < m_xCols, "CGrid::CalcFitColumnWidth: invalid location specified"); + + int maxSize = 0; + for(int i=0; i < m_yRows; i++) + { + Panel *pPanel = GridEntry(iColumn, i)->m_pPanel; + if(!pPanel) + continue; + + int w, h; + pPanel->GetSize(w,h); + if(w > maxSize) + maxSize = w; + } + + return maxSize; +} + + +int CGrid::CalcFitRowHeight(int iRow) +{ + AssertCheck(iRow >= 0 && iRow < m_yRows, "CGrid::CalcFitRowHeight: invalid location specified"); + + int maxSize = 0; + for(int i=0; i < m_xCols; i++) + { + Panel *pPanel = GridEntry(i, iRow)->m_pPanel; + if(!pPanel) + continue; + + int w, h; + pPanel->GetSize(w,h); + if(h > maxSize) + maxSize = h; + } + + return maxSize; +} + + +void CGrid::AutoSetRowHeights() +{ + for(int i=0; i < m_yRows; i++) + SetRowHeight(i, CalcFitRowHeight(i)); +} + + +bool CGrid::GetEntryBox( + int col, int row, int &x, int &y, int &w, int &h) +{ + AssertCheck(col >= 0 && col < m_xCols && row >= 0 && row < m_yRows, "CGrid::GetEntryBox: invalid location specified"); + + x = m_ColOffsets[col]; + w = m_Widths[col]; + + y = m_RowOffsets[row]; + h = m_Heights[row]; + return true; +} + + +bool CGrid::CopyColumnWidths(CGrid *pOther) +{ + if(!pOther || pOther->m_xCols != m_xCols) + return false; + + for(int i=0; i < m_xCols; i++) + m_Widths[i] = pOther->m_Widths[i]; + + CalcColOffsets(0); + m_bDirty = true; + return true; +} + + +void CGrid::RepositionContents() +{ + for(int x=0; x < m_xCols; x++) + { + for(int y=0; y < m_yRows; y++) + { + Panel *pPanel = GridEntry(x,y)->m_pPanel; + if(!pPanel) + continue; + + pPanel->SetBounds( + m_ColOffsets[x], + m_RowOffsets[y], + m_Widths[x], + m_Heights[y]); + } + } + + m_bDirty = false; +} + + +int CGrid::CalcDrawHeight() +{ + if(m_yRows > 0) + { + return m_RowOffsets[m_yRows-1] + m_Heights[m_yRows - 1] + m_ySpacing; + } + else + { + return 0; + } +} + + +void CGrid::Paint() +{ + if(m_bDirty) + RepositionContents(); + + Panel::Paint(); + + int w, h; + GetSize( w, h ); + int xx, yy; + GetPos( xx, yy ); + // walk the grid looking for underlined rows + int x = 0, y = 0; + for (int row = 0; row < m_yRows; row++) + { + CGridEntry *cell = GridEntry(0, row); + + y = m_RowOffsets[ row ] + m_Heights[ row ] + m_ySpacing; + if (cell->m_bUnderline) + { + vgui::surface()->DrawSetColor(cell->m_UnderlineColor[0], cell->m_UnderlineColor[1], cell->m_UnderlineColor[2], cell->m_UnderlineColor[3]); + vgui::surface()->DrawFilledRect(x, y - (cell->m_iUnderlineOffset + 1), GetWide(), y - cell->m_iUnderlineOffset); + } + } +} + +void CGrid::PaintBackground() +{ + Panel::PaintBackground(); +} + +//----------------------------------------------------------------------------- +// Purpose: sets underline color for a particular row +//----------------------------------------------------------------------------- +void CGrid::SetRowUnderline(int row, bool enabled, int offset, int r, int g, int b, int a) +{ + CGridEntry *cell = GridEntry(0, row); + cell->m_bUnderline = enabled; + if (enabled) + { + cell->m_iUnderlineOffset = offset; + cell->m_UnderlineColor[0] = r; + cell->m_UnderlineColor[1] = g; + cell->m_UnderlineColor[2] = b; + cell->m_UnderlineColor[3] = a; + } +} + +void CGrid::Clear() +{ + m_xCols = m_yRows = 0; + m_Widths = NULL; + m_GridEntries = NULL; + m_xSpacing = m_ySpacing = 0; + m_bDirty = false; +} + + +CGrid::CGridEntry* CGrid::GridEntry(int x, int y) +{ + AssertCheck(x >= 0 && x < m_xCols && y >= 0 && y < m_yRows, "CGrid::GridEntry: invalid location specified"); + return &m_GridEntries[y*m_xCols + x]; +} + + +void CGrid::CalcColOffsets(int iStart) +{ + int cur = m_xSpacing; + if(iStart != 0) + cur += m_ColOffsets[iStart-1] + m_Widths[iStart-1]; + + for(int i=iStart; i < m_xCols; i++) + { + m_ColOffsets[i] = cur; + cur += m_Widths[i] + m_xSpacing; + } +} + + +void CGrid::CalcRowOffsets(int iStart) +{ + int cur = m_ySpacing; + if(iStart != 0) + cur += m_RowOffsets[iStart-1]; + + for(int i=iStart; i < m_yRows; i++) + { + m_RowOffsets[i] = cur; + cur += m_Heights[i] + m_ySpacing; + } +} + +bool CGrid::GetCellAtPoint(int worldX, int worldY, int &row, int &col) +{ + row = -1; col = -1; + for(int x=0; x < m_xCols; x++) + { + for(int y=0; y < m_yRows; y++) + { + Panel *pPanel = GridEntry(x,y)->m_pPanel; + if (!pPanel) + continue; + + if (pPanel->IsWithin(worldX, worldY)) + { + col = x; + row = y; + return true; + } + } + } + + return false; +} + + |