Example #1
0
    private void PopulatePanels(KeyboardSkin skin, Layout layout)
    {
        // Clear the main panel
        foreach (Transform child in _mainPanel.transform)
        {
            Destroy(child.gameObject);
        }

        // Clear the list of keys
        _keys = new List <KeyBehaviour>();

        // Clear the uppercase handler (it is recreated in Populate)
        _uppercaseBehaviour = null;

        // Set main panel background
        _mainPanel.GetComponent <Image>().color = skin.GetKeyboardBackgroundColor();

        KeyboardLayout keyboardLayout = KeyboardLayoutHandler.GetLayout(layout);

        foreach (KeyboardRow keyboardRow in keyboardLayout.Rows)
        {
            GameObject row = InitRow("Row" + keyboardRow.RowIndex, _mainPanel, keyboardRow.Spacing);
            Populate(row, keyboardRow, skin);
        }
    }
Example #2
0
    private void CreateMainPanel(KeyboardSkin skin)
    {
        // The main panel holds the four rows of the keyboard.
        _mainPanel = new GameObject("Panel");
        _mainPanel.transform.parent = transform;

        _mainPanel.AddComponent <CanvasRenderer>();

        Image image = _mainPanel.AddComponent <Image>();

        image.sprite = skin.GetBackgroundImage();
        image.pixelsPerUnitMultiplier = skin.GetBackgroundImagePixelsPerUnitMultiplier();
        image.type = Image.Type.Sliced;

        // Sets the children rows to be vertically aligned
        VerticalLayoutGroup mainLayout = _mainPanel.AddComponent <VerticalLayoutGroup>();

        mainLayout.spacing            = -3;
        mainLayout.childControlHeight = false;
        mainLayout.childControlWidth  = false;

        RectTransform rectTransform = _mainPanel.GetComponent <RectTransform>();

        rectTransform.SetCentered();
    }
Example #3
0
    private void Populate(GameObject parent, KeyboardRow row, KeyboardSkin skin)
    {
        foreach (KeyboardObject keyboardObject in row.Keys)
        {
            GameObject keyObj = new GameObject(keyboardObject.Name);
            keyObj.transform.parent   = parent.transform;
            keyObj.transform.position = Vector3.zero;

            // Set key background image (rounded rectangle)
            Image backgroundImage = keyObj.AddComponent <Image>();
            backgroundImage.sprite = skin.GetKeyBackgroundImage();
            backgroundImage.type   = Image.Type.Sliced;
            backgroundImage.color  = skin.GetKeyBackgroundColor();

            if (keyboardObject is Spacer)
            {
                backgroundImage.color = Color.clear;
            }

            // Add the button
            Button button = keyObj.AddComponent <Button>();

            // Adds the shadow
            Shadow shadow = keyObj.AddComponent <Shadow>();
            shadow.effectColor    = new Color(0, 0, 0, 80);
            shadow.effectDistance = new Vector2(0, -0.5f);

            // Adjust width and height
            RectTransform rectTransform = keyObj.GetComponent <RectTransform>();
            rectTransform.sizeDelta     = new Vector2(keyboardObject.Width, keyboardObject.Height);
            rectTransform.localPosition = Vector3.zero;

            GameObject image = null;

            // Add image
            if (keyboardObject is ImageObjectButton imageObjectButton)
            {
                image = new GameObject("Image");
                image.transform.parent = keyObj.transform;

                Image img = image.AddComponent <Image>();
                img.sprite = skin.Load <Sprite>(imageObjectButton.ImageKey);

                RectTransform imgRectTransform = image.GetComponent <RectTransform>();
                imgRectTransform.sizeDelta     = new Vector2(10, 10);
                imgRectTransform.localPosition = new Vector3(0, 0, 0);
            }

            // Add text
            if (keyboardObject is TextButton TextButton)
            {
                var color = backgroundImage.color;

                backgroundImage.color = new Color(
                    color.r,
                    color.g,
                    color.b,
                    0.8f);

                TextButtonBehaviour textButtonBehaviour = keyObj.AddComponent <TextButtonBehaviour>();
                textButtonBehaviour.Init(TextButton, skin);

                if (keyboardObject is Key key)
                {
                    KeyBehaviour keyBehaviour = keyObj.AddComponent <KeyBehaviour>();
                    keyBehaviour.Init(textButtonBehaviour.Text);
                    _keys.Add(keyBehaviour);

                    button.onClick.AddListener(() => { Write(key.Name); });
                }
                else
                {
                    textButtonBehaviour.SlightlyDarker();
                }
            }

            if (keyboardObject is UppercaseToggle uppercaseToggle)
            {
                _uppercaseBehaviour = image.AddComponent <UppercaseToggleBehaviour>();
                _uppercaseBehaviour.Init(uppercaseToggle, skin);

                button.onClick.AddListener(ToggleUppercase);
            }

            if (keyboardObject is BackspaceButton)
            {
                button.onClick.AddListener(Backspace);
            }

            if (keyboardObject is SymbolsToggle toggle)
            {
                _toggleableTextButton = keyObj.AddComponent <ToggleableTextButtonBehaviour>();
                _toggleableTextButton.Init(toggle);

                button.onClick.AddListener(ToggleSymbols);
            }

            if (keyboardObject is SpaceBarButton)
            {
                button.onClick.AddListener(() => { Write(" "); });
            }
        }

        UpdateUppercase();
    }