void createBorders()
    {
        int numBorders = System.Enum.GetNames(typeof(zDraggableBorder.Borders)).Length - 2;

        if (frame == null)
        {
            RectTransform frameRect;
            frame     = new GameObject("Frame");
            frameRect = frame.AddComponent <RectTransform>();
            frameRect.SetParent(transform);
            frameRect.offsetMax = new Vector2(0, 0);
            frameRect.offsetMin = new Vector2(0, 0);
            frameRect.anchorMin = new Vector2(0, 0);
            frameRect.anchorMax = new Vector2(1, 1);
            frameRect           = frame.GetComponent <RectTransform>();
            borderRects         = new RectTransform[numBorders];
            borders             = new zDraggableBorder[numBorders];
            GameObject    thisSegment;
            Transform     header = null;
            RectTransform segRect;
            var           le = frame.AddComponent <LayoutElement>();
            le.ignoreLayout = true;
            for (int i = 0; i < numBorders; i++)
            {
                thisSegment = new GameObject(((zDraggableBorder.Borders)i).ToString());
                segRect     = thisSegment.AddComponent <RectTransform>();
                segRect.SetParent(frameRect);
                segRect.offsetMax = new Vector2(0, 0);
                segRect.offsetMin = new Vector2(0, 0);
                segRect.anchorMin = new Vector2(0, 0);
                segRect.anchorMax = new Vector2(1, 1);
                zDraggableBorder border = thisSegment.AddComponent <zDraggableBorder>();

                border.SetDirection((zDraggableBorder.Borders)i);
                border.SetBorderWidth(borderWidth, headerHeight);
                border.SetTargetRect(rect);
                borders[i]     = border;
                borderRects[i] = segRect;

                if (i == (int)zDraggableBorder.Borders.Drag)
                {
                    header = thisSegment.transform;
                    HorizontalLayoutGroup headerLayout = thisSegment.AddComponent <HorizontalLayoutGroup>();
                    headerLayout.childControlWidth     = true;
                    headerLayout.childForceExpandWidth = true;
                }
            }
            if (draggableMenu == null)
            {
                draggableMenu = Resources.Load("zDraggableMenu") as GameObject;
            }

            if (draggableMenu != null)
            {
                GameObject thisMenu = Instantiate(draggableMenu, frame.transform);

                thisMenu.transform.SetParent(frame.transform);
                thisMenu.GetComponent <RectTransform>().anchoredPosition = Vector3.zero;
                menuController = thisMenu.GetComponent <zDraggableMenuController>();
            }
            else
            {
                Debug.Log("no menu");
            }
        }
        for (int i = 0; i < numBorders; i++)
        {
            borders[i].SetDirection((zDraggableBorder.Borders)i);
            if (i == (int)zDraggableBorder.Borders.L || i == (int)zDraggableBorder.Borders.R)
            {
                if (useLineGraphics)
                {
                    borders[i].SetImage(zResourceLoader.lineV);
                }
                else
                {
                    borders[i].SetImage(null);
                }
            }
            if (i == (int)zDraggableBorder.Borders.T || i == (int)zDraggableBorder.Borders.B)
            {
                if (useLineGraphics)
                {
                    borders[i].SetImage(zResourceLoader.lineH);
                }
                else
                {
                    borders[i].SetImage(null);
                }
            }
            borders[i].SetBorderWidth(borderWidth, headerHeight);
        }
    }
    void OnValidate()
    {
        if (image == null)
        {
            image = GetComponent <Image>();
        }

        if (rect == null)
        {
            rect = GetComponent <RectTransform>();
        }
        if (!enabled)
        {
            return;
        }
        if (!gameObject.activeInHierarchy)
        {
            return;
        }
        SetHorizontalPivot(anchorHorizontal);
        SetVerticalPivot(anchorVertical);
        if (refresh)
        {
            refresh = false;
        }
        if (!gameObject.activeInHierarchy || !enabled)
        {
            return;
        }
        isDragging = false;
        // if (headerHeight < borderWidth) headerHeight = borderWidth;

        SetAnchorAndPivotBasedOnAnchoring();

        createBorders();

        if (layoutElement == null)
        {
            layoutElement = GetComponent <LayoutElement>();
        }
        if (layoutElement == null)
        {
            layoutElement = gameObject.AddComponent <LayoutElement>();
        }
        layoutElement.preferredHeight = rect.rect.width;
        layoutElement.preferredWidth  = rect.rect.height;


        if (menuController == null)
        {
            menuController = GetComponentInChildren <zDraggableMenuController>();
        }
        if (menuController != null)
        {
            menuController.SetHeight(headerHeight);
        }
        if (colorsChanged != null)
        {
            colorsChanged();
        }
    }