MCPcopy Create free account
hub / github.com/ddnet/ddnet / DoEditorDragBar

Method DoEditorDragBar

src/game/editor/editor.cpp:6143–6195  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6141}
6142
6143void CEditor::DoEditorDragBar(CUIRect View, CUIRect *pDragBar, EDragSide Side, float *pValue, float MinValue, float MaxValue)
6144{
6145 enum EDragOperation
6146 {
6147 OP_NONE,
6148 OP_DRAGGING,
6149 OP_CLICKED
6150 };
6151 static EDragOperation s_Operation = OP_NONE;
6152 static float s_InitialMouseY = 0.0f;
6153 static float s_InitialMouseOffsetY = 0.0f;
6154 static float s_InitialMouseX = 0.0f;
6155 static float s_InitialMouseOffsetX = 0.0f;
6156
6157 bool IsVertical = Side == EDragSide::TOP || Side == EDragSide::BOTTOM;
6158
6159 if(Ui()->MouseInside(pDragBar) && Ui()->HotItem() == pDragBar)
6160 m_CursorType = IsVertical ? CURSOR_RESIZE_V : CURSOR_RESIZE_H;
6161
6162 bool Clicked;
6163 bool Abrupted;
6164 if(int Result = DoButton_DraggableEx(pDragBar, "", 8, pDragBar, &Clicked, &Abrupted, 0, "Change the size of the editor by dragging."))
6165 {
6166 if(s_Operation == OP_NONE && Result == 1)
6167 {
6168 s_InitialMouseY = Ui()->MouseY();
6169 s_InitialMouseOffsetY = Ui()->MouseY() - pDragBar->y;
6170 s_InitialMouseX = Ui()->MouseX();
6171 s_InitialMouseOffsetX = Ui()->MouseX() - pDragBar->x;
6172 s_Operation = OP_CLICKED;
6173 }
6174
6175 if(Clicked || Abrupted)
6176 s_Operation = OP_NONE;
6177
6178 if(s_Operation == OP_CLICKED && absolute(IsVertical ? Ui()->MouseY() - s_InitialMouseY : Ui()->MouseX() - s_InitialMouseX) > 5.0f)
6179 s_Operation = OP_DRAGGING;
6180
6181 if(s_Operation == OP_DRAGGING)
6182 {
6183 if(Side == EDragSide::TOP)
6184 *pValue = std::clamp(s_InitialMouseOffsetY + View.y + View.h - Ui()->MouseY(), MinValue, MaxValue);
6185 else if(Side == EDragSide::RIGHT)
6186 *pValue = std::clamp(Ui()->MouseX() - s_InitialMouseOffsetX - View.x + pDragBar->w, MinValue, MaxValue);
6187 else if(Side == EDragSide::BOTTOM)
6188 *pValue = std::clamp(Ui()->MouseY() - s_InitialMouseOffsetY - View.y + pDragBar->h, MinValue, MaxValue);
6189 else if(Side == EDragSide::LEFT)
6190 *pValue = std::clamp(s_InitialMouseOffsetX + View.x + View.w - Ui()->MouseX(), MinValue, MaxValue);
6191
6192 m_CursorType = IsVertical ? CURSOR_RESIZE_V : CURSOR_RESIZE_H;
6193 }
6194 }
6195}
6196
6197void CEditor::RenderMenubar(CUIRect MenuBar)
6198{

Callers

nothing calls this directly

Calls 6

UiFunction · 0.85
absoluteFunction · 0.85
MouseInsideMethod · 0.80
HotItemMethod · 0.80
MouseYMethod · 0.80
MouseXMethod · 0.80

Tested by

no test coverage detected