about summary refs log tree commit diff
path: root/src/game/editor
diff options
context:
space:
mode:
authorxalduin <xalduin@gmail.com>2010-06-13 21:18:44 -0400
committeroy <Tom_Adams@web.de>2010-07-04 16:59:02 +0200
commit052820dc888a0912fd2ff413389bc24b1cfbf08d (patch)
treeabb3bb2b319d86533444ee677a7c9f8924459702 /src/game/editor
parent882a99b955312a6fac4c929cd88c68bbc23d53f1 (diff)
downloadzcatch-052820dc888a0912fd2ff413389bc24b1cfbf08d.tar.gz
zcatch-052820dc888a0912fd2ff413389bc24b1cfbf08d.zip
Issue #92, fixed scrollbars in editor
Diffstat (limited to 'src/game/editor')
-rw-r--r--src/game/editor/ed_editor.cpp69
1 files changed, 36 insertions, 33 deletions
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp
index da97ed61..c951912d 100644
--- a/src/game/editor/ed_editor.cpp
+++ b/src/game/editor/ed_editor.cpp
@@ -1674,17 +1674,18 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 	if(ValidGroup && m_SelectedLayer >= 0 && m_SelectedLayer < m_Map.m_lGroups[m_SelectedGroup]->m_lLayers.size())
 		ValidLayer = 1;
 
-	int Num = (int)(View.h/16.0f);
+	float LayersHeight = 12.0f;	 // Height of AddGroup button
 	static int s_ScrollBar = 0;
 	static float s_ScrollValue = 0;
 
-	int LayerNum = 0;
 	for(int g = 0; g < m_Map.m_lGroups.size(); g++)
-		LayerNum += m_Map.m_lGroups[g]->m_lLayers.size() + 1;
+		// Each group is 19.0f
+		// Each layer is 14.0f
+		LayersHeight += 19.0f + m_Map.m_lGroups[g]->m_lLayers.size() * 14.0f;
 
-	int ScrollNum = LayerNum-Num+10;
+	float ScrollDifference = LayersHeight - LayersBox.h;
 
-	if(LayerNum > Num)	// Do we even need a scrollbar?
+	if(LayersHeight > LayersBox.h)	// Do we even need a scrollbar?
 	{
 		CUIRect Scroll;
 		LayersBox.VSplitRight(15.0f, &LayersBox, &Scroll);
@@ -1693,12 +1694,12 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue);
 	}
 
-	int LayerStartAt = (int)(ScrollNum*s_ScrollValue);
-	if(LayerStartAt < 0)
-		LayerStartAt = 0;
+	float LayerStartAt = ScrollDifference * s_ScrollValue;
+	if(LayerStartAt < 0.0f)
+		LayerStartAt = 0.0f;
 
-	int LayerStopAt = LayerStartAt+Num;
-	int LayerCur = 0;
+	float LayerStopAt = LayersHeight - ScrollDifference * (1 - s_ScrollValue);
+	float LayerCur = 0;
 
 	// render layers
 	{
@@ -1706,9 +1707,9 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		{
 			if(LayerCur > LayerStopAt)
 				break;
-			else if(LayerCur + m_Map.m_lGroups[g]->m_lLayers.size() + 1 < LayerStartAt)
+			else if(LayerCur + m_Map.m_lGroups[g]->m_lLayers.size() * 14.0f + 19.0f < LayerStartAt)
 			{
-				LayerCur += m_Map.m_lGroups[g]->m_lLayers.size() + 1;
+				LayerCur += m_Map.m_lGroups[g]->m_lLayers.size() * 14.0f + 19.0f;
 				continue;
 			}
 
@@ -1733,13 +1734,15 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 				}
 				LayersBox.HSplitTop(2.0f, &Slot, &LayersBox);
 			}
-			LayerCur++;
+			LayerCur += 14.0f;
 
 			for(int i = 0; i < m_Map.m_lGroups[g]->m_lLayers.size(); i++)
 			{
-				if(LayerCur < LayerStartAt || LayerCur > LayerStopAt)
+				if(LayerCur > LayerStopAt)
+					break;
+				else if(LayerCur < LayerStartAt)
 				{
-					LayerCur++;
+					LayerCur += 14.0f;
 					continue;
 				}
 
@@ -1762,10 +1765,12 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 						UiInvokePopupMenu(&s_LayerPopupId, 0, UI()->MouseX(), UI()->MouseY(), 120, 150, PopupLayer);
 				}
 
-				LayerCur++;
+				LayerCur += 14.0f;
 				LayersBox.HSplitTop(2.0f, &Slot, &LayersBox);
 			}
-			LayersBox.HSplitTop(5.0f, &Slot, &LayersBox);
+			if(LayerCur > LayerStartAt && LayerCur < LayerStopAt)
+				LayersBox.HSplitTop(5.0f, &Slot, &LayersBox);
+			LayerCur += 5.0f;
 		}
 	}
 
@@ -1780,9 +1785,6 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 			m_SelectedGroup = m_Map.m_lGroups.size()-1;
 		}
 	}
-
-	//LayersBox.HSplitTop(5.0f, &Slot, &LayersBox);
-
 }
 
 static void ExtractName(const char *pFileName, char *pName)
@@ -1962,14 +1964,12 @@ void CEditor::SortImages()
 
 void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 {
-	int Num = (int)(View.h/15.0f);
 	static int s_ScrollBar = 0;
 	static float s_ScrollValue = 0;
+	float ImagesHeight = 30.0f + 14.0f * m_Map.m_lImages.size() + 27.0f;
+	float ScrollDifference = ImagesHeight - ToolBox.h;
 
-	int ImageNum = m_Map.m_lImages.size();
-	int ScrollNum = ImageNum-Num+10;
-
-	if(ImageNum > Num)	// Do we even need a scrollbar?
+	if(ImagesHeight > ToolBox.h)	// Do we even need a scrollbar?
 	{
 		CUIRect Scroll;
 		ToolBox.VSplitRight(15.0f, &ToolBox, &Scroll);
@@ -1978,12 +1978,12 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue);
 	}
 
-	int ImageStartAt = (int)(ScrollNum*s_ScrollValue);
-	if(ImageStartAt < 0)
-		ImageStartAt = 0;
+	float ImageStartAt = ScrollDifference * s_ScrollValue;
+	if(ImageStartAt < 0.0f)
+		ImageStartAt = 0.0f;
 
-	int ImageStopAt = ImageStartAt+Num;
-	int ImageCur = 0;
+	float ImageStopAt = ImagesHeight - ScrollDifference * (1 - s_ScrollValue);
+	float ImageCur = 0.0f;
 
 	for(int e = 0; e < 2; e++) // two passes, first embedded, then external
 	{
@@ -2000,7 +2000,7 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 			else
 				UI()->DoLabel(&Slot, Localize("External"), 12.0f, 0);
 		}
-		ImageCur++;
+		ImageCur += 15.0f;
 
 		for(int i = 0; i < m_Map.m_lImages.size(); i++)
 		{
@@ -2014,10 +2014,10 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 				break;
 			else if(ImageCur < ImageStartAt)
 			{
-				ImageCur++;
+				ImageCur += 14.0f;
 				continue;
 			}
-			ImageCur++;
+			ImageCur += 14.0f;
 
 			char aBuf[128];
 			str_copy(aBuf, m_Map.m_lImages[i]->m_aName, sizeof(aBuf));
@@ -2055,6 +2055,9 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View)
 		}
 	}
 
+	if(ImageCur + 27.0f > ImageStopAt)
+		return;
+
 	CUIRect Slot;
 	ToolBox.HSplitTop(5.0f, &Slot, &ToolBox);