private static void HandleUicolorwheelEvent(WidgetEvent ev) { UIWidget widget = (UIWidget)ev.Target; if (widget.Equals(null)) { return; } if (ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) { if (widget.GetId() == "uicolorwheelcode") { AtomicMain.AppLog("UIColorWheel support : " + widget.GetId() + " was pressed "); AtomicMain.ViewCode("Components/code_uicolorwheel.cs", widget.GetParent()); } if (widget.GetId() == "uicolorwheellayout") { AtomicMain.AppLog("UIColorWheel support : " + widget.GetId() + " was pressed "); AtomicMain.ViewCode("Scenes/layout_uicolorwheel.ui.txt", widget.GetParent()); } } else if (ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED) { if (widget.GetId() == "colorwheeldemo") { UIColorWheel cwx = (UIColorWheel)widget; // collect click color info if (!cwx.Equals(null)) { AtomicMain.AppLog("UIColorWheel event : " + widget.GetId() + " hue = " + cwx.GetHue().ToString() + " saturation = " + cwx.GetSaturation().ToString()); } } } }
// actually update our mesh protected override void OnPopulateMesh(VertexHelper vh) { // Clear vertex helper to reset vertices, indices etc. vh.Clear(); if (selectedHueIndex >= 0 && selectedSatIndex >= 0 && selectedSatIndex < colorWheel.radialWedgeCount) { // Center Vector2 center = Vector2.zero; // Add wedges int subWedgeCount = Mathf.Max(1, Mathf.CeilToInt(angleInc / UIColorWheel.minAngle)); float subWedgeAngleInc = 2.0f * Mathf.PI / (circularWegdeCount * subWedgeCount); float prevRadius = radiusInc * (selectedSatIndex + 1); float nextRadius = radiusInc * (selectedSatIndex + 2); float borderPrevRadius = prevRadius - selectionThickness; float borderNextRadius = nextRadius + selectionThickness; // A wedge has the same color, but is subdivided into subwedges for more rounded look for (int k = 0; k < subWedgeCount; ++k) { float prevAngle = subWedgeAngleInc * (selectedHueIndex * subWedgeCount + k); float nextAngle = subWedgeAngleInc * (selectedHueIndex * subWedgeCount + k + 1); Vector2 corner00 = center + new Vector2(Mathf.Cos(prevAngle), Mathf.Sin(prevAngle)) * prevRadius; Vector2 corner01 = center + new Vector2(Mathf.Cos(nextAngle), Mathf.Sin(nextAngle)) * prevRadius; Vector2 corner02 = center + new Vector2(Mathf.Cos(nextAngle), Mathf.Sin(nextAngle)) * borderPrevRadius; Vector2 corner03 = center + new Vector2(Mathf.Cos(prevAngle), Mathf.Sin(prevAngle)) * borderPrevRadius; UIColorWheel.AddQuad(vh, this.color, corner00, corner01, corner02, corner03); Vector2 corner10 = center + new Vector2(Mathf.Cos(prevAngle), Mathf.Sin(prevAngle)) * borderNextRadius; Vector2 corner11 = center + new Vector2(Mathf.Cos(nextAngle), Mathf.Sin(nextAngle)) * borderNextRadius; Vector2 corner12 = center + new Vector2(Mathf.Cos(nextAngle), Mathf.Sin(nextAngle)) * nextRadius; Vector2 corner13 = center + new Vector2(Mathf.Cos(prevAngle), Mathf.Sin(prevAngle)) * nextRadius; UIColorWheel.AddQuad(vh, this.color, corner10, corner11, corner12, corner13); } // Add sides float minAngle = subWedgeAngleInc * (selectedHueIndex * subWedgeCount); Vector2 outwardVec = new Vector2(Mathf.Cos(minAngle), Mathf.Sin(minAngle)); Vector2 rightVec = new Vector2(outwardVec.y, -outwardVec.x) * selectionThickness; Vector2 corner20 = center + outwardVec * borderNextRadius + rightVec; Vector2 corner21 = center + outwardVec * borderNextRadius; Vector2 corner22 = center + outwardVec * borderPrevRadius; Vector2 corner23 = center + outwardVec * borderPrevRadius + rightVec; UIColorWheel.AddQuad(vh, this.color, corner20, corner21, corner22, corner23); float maxAngle = subWedgeAngleInc * (selectedHueIndex * subWedgeCount + subWedgeCount); Vector2 outward2Vec = new Vector2(Mathf.Cos(maxAngle), Mathf.Sin(maxAngle)); Vector2 leftVec = new Vector2(-outward2Vec.y, outward2Vec.x) * selectionThickness; Vector2 corner30 = center + outward2Vec * borderNextRadius; Vector2 corner31 = center + outward2Vec * borderNextRadius + leftVec; Vector2 corner32 = center + outward2Vec * borderPrevRadius + leftVec; Vector2 corner33 = center + outward2Vec * borderPrevRadius; UIColorWheel.AddQuad(vh, this.color, corner30, corner31, corner32, corner33); } }