Skip to content

Instantly share code, notes, and snippets.

@armcha
Created March 9, 2026 10:25
Show Gist options
  • Select an option

  • Save armcha/7192e9225a8e1a5c12db02d4815db38b to your computer and use it in GitHub Desktop.

Select an option

Save armcha/7192e9225a8e1a5c12db02d4815db38b to your computer and use it in GitHub Desktop.
Remote Compose — Creating a Button Document (JVM Server Side)
/**
* Remote Compose — Creating a Button Document (JVM, no Android needed)
*
* Produces a binary .rc document that RemoteComposePlayer can render.
*/
fun createButtonDocument(): ByteArray {
val density = 2.625f
fun dp(v: Int) = v * density
val writer = RemoteComposeWriter(
JvmRcPlatformServices(),
RemoteComposeWriter.HTag(Header.DOC_WIDTH, (400 * density).toInt()),
RemoteComposeWriter.HTag(Header.DOC_HEIGHT, (800 * density).toInt()),
)
val radius = dp(24)
val shape = RoundedRectShape(radius, radius, radius, radius)
val buttonMod = RecordingModifier()
.fillMaxWidth()
.clip(shape)
.background(0xFF6200EA.toInt())
.onClick(HostAction(1001, writer.addText("my_action")))
.padding(dp(32), dp(14), dp(32), dp(14))
writer.root {
writer.column(RecordingModifier().fillMaxSize().padding(dp(24)), ColumnLayout.CENTER, ColumnLayout.CENTER) {
writer.startBox(buttonMod, BoxLayout.CENTER, BoxLayout.CENTER)
writer.textComponent(RecordingModifier(), writer.addText("Click Me"), 0xFFFFFFFF.toInt(), dp(16), 0, 600f, null, CoreText.TEXT_ALIGN_CENTER, 0, Int.MAX_VALUE) {}
writer.endBox()
}
}
return writer.encodeToByteArray()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment