diff options
| author | xalduin <xalduin@gmail.com> | 2010-06-13 21:18:44 -0400 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-07-04 16:59:02 +0200 |
| commit | 052820dc888a0912fd2ff413389bc24b1cfbf08d (patch) | |
| tree | abb3bb2b319d86533444ee677a7c9f8924459702 /src/game/editor | |
| parent | 882a99b955312a6fac4c929cd88c68bbc23d53f1 (diff) | |
| download | zcatch-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.cpp | 69 |
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); |