| 6141 | } |
| 6142 | |
| 6143 | void 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 | |
| 6197 | void CEditor::RenderMenubar(CUIRect MenuBar) |
| 6198 | { |