From ca3f2328f04e118c2135cb92eb78b9eb64231b6f Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Thu, 8 Aug 2019 18:56:06 -0400 Subject: [PATCH] Update Cacao README --- .../net/shadowfacts/asmr/TestCacaoScreen.kt | 15 ++++++--- .../net/shadowfacts/asmr/util/RedstoneMode.kt | 1 + .../kotlin/net/shadowfacts/cacao/README.md | 32 ++++++++++++++++++- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/net/shadowfacts/asmr/TestCacaoScreen.kt b/src/main/kotlin/net/shadowfacts/asmr/TestCacaoScreen.kt index 3d35267..f27841e 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/TestCacaoScreen.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/TestCacaoScreen.kt @@ -3,6 +3,7 @@ package net.shadowfacts.asmr import net.shadowfacts.cacao.CacaoScreen import net.shadowfacts.cacao.Window import net.shadowfacts.cacao.view.* +import net.shadowfacts.cacao.view.button.Button import net.shadowfacts.cacao.viewcontroller.ViewController /** @@ -17,16 +18,20 @@ class TestCacaoScreen: CacaoScreen() { } override fun viewDidLoad() { - val labelContainer = view.addSubview(View()) + val container = view.addSubview(View()) createConstraints { - labelContainer.centerXAnchor equalTo view.centerXAnchor - labelContainer.centerYAnchor equalTo view.centerYAnchor + container.centerXAnchor equalTo view.centerXAnchor + container.centerYAnchor equalTo view.centerYAnchor } embedChild(object: ViewController() { override fun loadView() { - this.view = Label("test child") + val button = Button(Label("test button")) + button.handler = { + println("button clicked") + } + this.view = button } - }, container = labelContainer) + }, container = container) } } addWindow(Window(viewController)) diff --git a/src/main/kotlin/net/shadowfacts/asmr/util/RedstoneMode.kt b/src/main/kotlin/net/shadowfacts/asmr/util/RedstoneMode.kt index 152c22b..b7897fc 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/util/RedstoneMode.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/util/RedstoneMode.kt @@ -8,6 +8,7 @@ enum class RedstoneMode { companion object { fun localize(value: RedstoneMode): String { + // todo: localize me return value.name.toLowerCase().capitalize() } } diff --git a/src/main/kotlin/net/shadowfacts/cacao/README.md b/src/main/kotlin/net/shadowfacts/cacao/README.md index cd3b3c6..c873a79 100644 --- a/src/main/kotlin/net/shadowfacts/cacao/README.md +++ b/src/main/kotlin/net/shadowfacts/cacao/README.md @@ -1,3 +1,33 @@ # Cacao +Cacao is a UI framework for Fabric/Minecraft mods based on Apple's [Cocoa](https://en.wikipedia.org/wiki/Cocoa_(API) +UI toolkit. -Cacao is a UI framework for Fabric/Minecraft mods based on Apple's [Cocoa](https://en.wikipedia.org/wiki/Cocoa_(API)) UI toolkit. \ No newline at end of file +## Architecture +### Screen +A [CacaoScreen][] is the object that acts as the interface between Minecraft GUI code and the Cacao framework. + +The CacaoScreen draws Cacao views on screen and passes Minecraft input events to the appropriate Views. The CacaoScreen +owns a group of [Window](#window) objects which are displayed on screen, one on top of the other. + +[CacaoScreen]: https://git.shadowfacts.net/minecraft/ASMR/src/branch/master/src/main/kotlin/net/shadowfacts/cacao/CacaoScreen.kt + +### Window +A [Window][] object has a root [View Controller](#view-controller) that it displays on screen. + +The Window occupies the entire screen space and translates events from the screen to the root View Controller's View. +It owns a Solver object that manages layout constraints. The window also handles screen resizing and re-lays out the +view hierarchy. + +[Window]: https://git.shadowfacts.net/minecraft/ASMR/src/branch/master/src/main/kotlin/net/shadowfacts/cacao/Window.kt + +### View Controller +A [ViewController][] object owns a view, receives lifecycle events for it, and is generally used to control the view. + +Each View Controller has a single root [View](#view) which in turn may have subviews. + +[ViewController]: https://git.shadowfacts.net/minecraft/ASMR/src/branch/master/src/main/kotlin/net/shadowfacts/cacao/viewcontroller/ViewController.kt + +### View +A [View][] object represents a single view on screen. It handles drawing, positioning, and directly handles input. + +[View]: https://git.shadowfacts.net/minecraft/ASMR/src/branch/master/src/main/kotlin/net/shadowfacts/cacao/view/View.kt