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); } }
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(); }
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(); }