}//!DrawPresets bool DrawCell(Rect rect, Texture2D tex, string name, bool selected, ISupportedPostComponent component) { rect = Params.Shrink( rect, 2 ); if (Event.current.type == EventType.Repaint) GUI.skin.window.Draw( rect, new GUIContent(), 0 ); rect = Params.Shrink( rect, 2 ); if (selected) EditorGUI.DrawRect( rect, Color.red ); var tr = rect; var lr = tr; tr.height -= 16; tr = Params.Shrink( tr, 2 ); if (tex) GUI.DrawTexture( tr, tex ); else GUI.DrawTexture( tr, Texture2D.blackTexture ); lr.y += lr.height -= 16; lr.height = 16; GUI.Label( lr, name ); if (selected) { lr.width /= 2; lr.x += lr.width; lr.width -= 10; var newAmount = GUI.HorizontalSlider( lr, component.LutAmount, 0,1); if (newAmount != component.LutAmount) { component.CREATE_UNDO( "set post blend" ); component.LutAmount = newAmount; component.SET_DIRTY(); SceneView.RepaintAll(); } } #if !P128 var favcontains = favorites.ContainsKey( name ); var fav_r = rect; var SIZE = Math.Min(32,fav_r.height* 0.3f); fav_r.x += fav_r.width - SIZE - 5; fav_r.y += 5; fav_r.width = fav_r.height = SIZE; if (favcontains || selected || Event.current.control) { GUI.DrawTexture( fav_r, favorites.ContainsKey( name ) ? favicon_enable : favicon_disable ); EditorGUIUtility.AddCursorRect( fav_r, MouseCursor.Link ); if (GUI.Button( fav_r, favContent, Params.Button )) { if (favcontains) RemoveFavorite( name ); else CreateFavorite( name ); } } #endif // if (selected) GUI.DrawTexture( rect, Button.active.background ); return GUI.Button( rect, "", Params.Button ); }
void DrawPresets(ISupportedPostComponent component) { var zoom = (int)Mathf.Clamp(Params.zoomFactor + 1, 1, 3); int cellHeight = (int)((125 + 16) / ((zoom - 1) / 2f + 1)); int CAPTUREHeight = (int)((125) / ((zoom - 1) / 2f + 1)); var WIN_HEIGHT = position.height - (40 + 20 + 24 + 20); var sortNotInverse = ((int)Params.sortInverse & (1 << (int)Params.sortMode)) == 0; var targetArray = default_gradients; switch ((int)Params.sortMode) { case 0: targetArray = sortNotInverse ? default_gradients : inverse_default_gradients; break; case 1: targetArray = sortNotInverse ? bright_gradients : inverse_bright_gradients; break; case 2: targetArray = sortNotInverse ? hue_gradients : inverse_hue_gradients; break; case 3: targetArray = sortNotInverse ? compareToFirst_gradients : inverse_compareToFirst_gradients; break; }//sort type var l = component.LutTexture; int selectIndex = -1; int filteredSelectIndex = -1; var __i = -1; var __M = -1; for (__i = 0; __i < targetArray.Count; __i++) { if (!SeartchValidate(targetArray[__i].name)) { continue; } if (Params.showFav == 1 && !favorites.ContainsKey(targetArray[__i].name)) { continue; } __M++; if (selectIndex == -1 && l == targetArray[__i].gradientTexture) { filteredSelectIndex = __M; selectIndex = __i; } } // var XXX = Math.Min(3 * zoom, Math.Max(1, M + 1)); var XXX = 3 * zoom; int displaingCount = Mathf.CeilToInt(WIN_HEIGHT / cellHeight + 1) * XXX; var scrollX = Params.presetScrollX; var scrollY = Params.presetScrollY; if (Params.showFav == 1) { scrollX = Params.favScrollX; scrollY = Params.favScrollY; } if (mayResetScroll) { mayResetScroll = false; if (filteredSelectIndex != -1) { var fixedcellHeight = cellHeight; //(float)Params.presetScrollY + " " + filteredSelectIndex / XXX * cellHeight + " " + WIN_HEIGHT + " " + (filteredSelectIndex / XXX * cellHeight + //Debug.Log( fixedcellHeight > Params.presetScrollY + WIN_HEIGHT ); if (filteredSelectIndex / XXX * fixedcellHeight < scrollY) { scrollY.Set(filteredSelectIndex / XXX * fixedcellHeight); } else if (filteredSelectIndex / XXX * fixedcellHeight + fixedcellHeight > scrollY + WIN_HEIGHT) { scrollY.Set(filteredSelectIndex / XXX * fixedcellHeight + fixedcellHeight - WIN_HEIGHT); } } }//frame scroll Params.scroll.x = scrollX; Params.scroll.y = scrollY; Params.scroll = GUILayout.BeginScrollView(Params.scroll); scrollX.Set(Params.scroll.x); scrollY.Set(Params.scroll.y); GUILayout.BeginVertical(); var height = Mathf.Ceil(gradients.Length / (float)XXX); int wasRender = 0; int __FirstRenderInc = -1; bool needRepaint = false; var newCheck = component.GetHashString(); if (Params.AutoRefresh == 1 && !string.Equals(newCheck, oldCheck, StringComparison.Ordinal)) { oldCheck = newCheck; ClearImages(false); currentWindow.Repaint(); }//refrest if changed __i = -1; Rect line = new Rect(); bool renderTexture = false; bool newLine = false; if (__M == -1) { if (Params.showFav == 1) { GUILayout.Label("No Favorite Elements", Params.Label); } else { GUILayout.Label("No elements '" + (string)Params.filtres + "' found", Params.Label); } } else { line = EditorGUILayout.GetControlRect(GUILayout.Height((__M / XXX + 1) * cellHeight)); line.height = cellHeight; line.y -= line.height; int __renderInc = -1; for (int y = 0; y < height; y++) { newLine = true; for (int x = 0; x < XXX; x++) { __i++; //var i = x + y * XXX; if (__i >= targetArray.Count) { break; } if (!SeartchValidate(targetArray[__i].name)) { x--; continue; } if (Params.showFav == 1 && !favorites.ContainsKey(targetArray[__i].name)) { x--; continue; } if (newLine) { newLine = false; //line = EditorGUILayout.GetControlRect( GUILayout.Height( cellHeight ) ); line.y += line.height; renderTexture = line.y + line.height >= Params.scroll.y && line.y - line.height <= Params.scroll.y + WIN_HEIGHT; } var rect = line; rect.width = line.width / XXX; rect.x = rect.width * x; if (!renderTexture) { continue; } __renderInc++; if (__FirstRenderInc == -1) { __FirstRenderInc = __renderInc; } if (renderedScreen.Length != targetArray.Count) { System.Array.Resize(ref renderedScreen, targetArray.Count); ClearImages(false); currentWindow.Repaint(); } if (renderedIndex < __FirstRenderInc) { renderedIndex = __FirstRenderInc; } /* if (Params.showFav == 1) * Debug.Log( (wasRender < (Params.zoomFactor + 1) * IMAGE_RENDER_PER_FRAME) + " " + (renderedIndex % displaingCount) + " " + __renderInc + " " + __FirstRenderInc );*/ if (wasRender < (Params.zoomFactor + 1) * IMAGE_RENDER_PER_FRAME && renderedIndex % displaingCount == (__renderInc - __FirstRenderInc)) { if ((int)rect.width - 10 > 0 && !renderedDoubleCheck[__i]) { renderedIndex++; component.CameraPredrawAction(); // PRE //memory var oldLutEnable = component.LutEnable; var oldLutTexture = component.LutTexture; var oldAmount = component.LutAmount; //change component.LutEnable = true; component.LutTexture = (targetArray[__i]).gradientTexture; component.LutAmount = (1); var oldAnti = component.AntiAliasEnable; component.AntiAliasEnable = false; //draw if (renderedScreen[__i]) { DestroyImmediate(renderedScreen[__i], true); } renderedDoubleCheck[__i] = renderedScreen[__i] = TakeScreen(Camera.main, (int)rect.width - 10, CAPTUREHeight); component.AntiAliasEnable = oldAnti; //restore component.LutEnable = oldLutEnable; component.LutTexture = (oldLutTexture); component.LutAmount = (oldAmount); component.CameraPostDrawAction(); // POST wasRender++; } } var screen = renderedScreen[__i]; if (!renderedDoubleCheck[__i]) { needRepaint = true; } if (DrawCell(rect, screen, targetArray[__i].name, selectIndex == __i, component)) { WasElementsChanged = true; component.CREATE_UNDO("set " + targetArray[__i].name); component.LutTexture = (targetArray[__i].gradientTexture); if (!component.LutEnable) { component.LutAmount = (1); } component.LutEnable = true; component.SET_DIRTY(); UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); } } } } GUILayout.EndVertical(); if (wasRender < (Params.zoomFactor + 1) * IMAGE_RENDER_PER_FRAME) { // renderedIndex = firstI; renderedIndex += (int)(Params.zoomFactor + 1) * IMAGE_RENDER_PER_FRAME - wasRender; //needRepaint = true; } if (needRepaint) { Repaint(); } GUILayout.EndScrollView(); }//!DrawPresets