public override void CursorPressed(Mogre.Vector2 cursorPos) { Mogre.OverlayManager om = Mogre.OverlayManager.Singleton; if (isExpanded) { if (scrollHandleElement.IsVisible) // check for scrolling { Mogre.Vector2 co = Widget.CursorOffset(scrollHandleElement, cursorPos); if (co.SquaredLength <= 81f) { isDragging = true; dragOffset = co.y; return; } else if (Widget.IsCursorOver(scrollTrackElement, cursorPos)) { float newTop = scrollHandleElement.Top + co.y; float lowerBoundary = scrollTrackElement.Height - scrollHandleElement.Height; scrollHandleElement.Top = (UIMathHelper.clamp <int>((int)newTop, 0, (int)lowerBoundary)); float scrollPercentage = UIMathHelper.clamp <float>(newTop / lowerBoundary, 0f, 1f); setDisplayIndex((uint)(scrollPercentage * (Items.Count - itemElements.Count) + 0.5f)); return; } } if (!IsCursorOver(expandedBoxElement, cursorPos, 3f)) { retract(); } else { float l = itemElements[0]._getDerivedLeft() * om.ViewportWidth + 5f; float t = itemElements[0]._getDerivedTop() * om.ViewportHeight + 5f; float r = l + itemElements[itemElements.Count - 1].Width - 10f; float b = itemElements[itemElements.Count - 1]._getDerivedTop() * om.ViewportHeight + itemElements[itemElements.Count - 1].Height - 5; if (cursorPos.x >= l && cursorPos.x <= r && cursorPos.y >= t && cursorPos.y <= b) { if (highlightIndex != selectionIndex) { SelectItem((uint)highlightIndex); } retract(); } } } else { if (Items.Count < 2) // don't waste time showing a menu if there's no choice { return; } if (IsCursorOver(smallBoxElement, cursorPos, 4f)) { expandedBoxElement.Show(); smallBoxElement.Hide(); // calculate how much vertical space we need float idealHeight = itemsShown * (smallBoxElement.Height - 8f) + 20f; expandedBoxElement.Height = (idealHeight); scrollTrackElement.Height = (expandedBoxElement.Height - 20f); expandedBoxElement.Left = (smallBoxElement.Left - 4f); // if the expanded menu goes down off the screen, make it go up instead if (smallBoxElement._getDerivedTop() * om.ViewportHeight + idealHeight > om.ViewportHeight) { expandedBoxElement.Top = (smallBoxElement.Top + smallBoxElement.Height - idealHeight + 3f); // if we're in thick style, hide the caption because it will interfere with the expanded menu if (textAreaElement.HorizontalAlignment == GuiHorizontalAlignment.GHA_CENTER) { textAreaElement.Hide(); } } else { expandedBoxElement.Top = (smallBoxElement.Top + 3f); } isExpanded = true; highlightIndex = selectionIndex; setDisplayIndex((uint)highlightIndex); if (itemsShown < Items.Count) // update scrollbar position { scrollHandleElement.Show(); float lowerBoundary = scrollTrackElement.Height - scrollHandleElement.Height; scrollHandleElement.Top = ((int)(displayIndex * lowerBoundary / (Items.Count - itemElements.Count))); } else { scrollHandleElement.Hide(); } } } }
public void Hide() { _TextArea.Hide(); }