digistuff-cd2025/docs/touchscreen.md
2022-01-22 17:42:03 +11:00

9.1 KiB

Digilines Touchscreen

The touchscreen is designed to be a customizable interface for input and display, it allows creating a custom formspec using a series of digiline commands, usually from a Luacontroller.

Commands

set - Changes settings.

digiline_send("touchscreen", {
	command = "set",
	locked = false,
	no_prepend = false,
	real_coordinates = false,
	fixed_size = false,
	width = 10,
	height = 8,
	focus = "<name>",
})

add - Adds an element, appending it after other elements.

digiline_send("touchscreen", {
	command = "add",
	element = "<element>",
})

insert - Adds an element at a specific index.

digiline_send("touchscreen", {
	command = "insert",
	index = 1,
	element = "<element>",
})

replace - Replaces an existing element.

digiline_send("touchscreen", {
	command = "replace",
	index = 1,
	element = "<element>",
})

remove - Removes an element.

digiline_send("touchscreen", {
	command = "remove",
	index = 1,
})

clear - Removes all elements, but keeps settings.

digiline_send("touchscreen", {
	command = "clear",
})

Supported formspec elements

Standard elements:

  • tooltip
  • image
  • animated_image
  • model
  • item_image
  • bgcolor
  • background
  • background9
  • pwdfield
  • field
  • field_close_on_enter
  • textarea
  • label
  • hypertext
  • vertlabel
  • button
  • image_button
  • item_image_button
  • button_exit
  • image_button_exit
  • textlist
  • tabheader
  • box
  • dropdown
  • checkbox
  • style
  • style_type

Elements as settings:

  • size
  • no_prepend
  • real_coordinates
  • set_focus

Special elements:

  • tooltip_area - Separate element for the alternate syntax of tooltip.
  • table - Combination of table, tableoptions and tablecolumns.
  • item_grid - Helper for displaying a grid of item buttons or images.

Unsupported formspec elements

These elements, for design or other reasons, are not supported by the touchscreen:

  • formspec_version
  • position
  • anchor
  • container
  • container_end
  • scroll_container
  • scroll_container_end
  • scrollbar
  • scrollbaroptions
  • list
  • listring
  • listcolors

Formspec element reference

Example code for each of the supported formspec elements. For more details see the Minetest Lua API.

All values except command and element are optional, with default values being used when a value is nil or invalid.

tooltip

digiline_send("touchscreen", {
	command = "add",
	element = "tooltip",
	element_name = "button",
	tooltip_text = "tooltip",
	bgcolor = "#303030",
	fontcolor = "#ffffff",
})

tooltip_area

digiline_send("touchscreen", {
	command = "add",
	element = "tooltip_area",
	X = 0,
	Y = 0,
	W = 100,
	H = 100,
	tooltip_text = "tooltip area",
	bgcolor = "#303030",
	fontcolor = "#ffffff",
})

image

digiline_send("touchscreen", {
	command = "add",
	element = "image",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	texture_name = "default_dirt.png",
})

animated_image

digiline_send("touchscreen", {
	command = "add",
	element = "animated_image",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	name = "animated_image",
	texture_name = "default_lava_flowing_animated.png",
	frame_count = 16,
	frame_duration = 200,
	frame_start = 1,
})

model

digiline_send("touchscreen", {
	command = "add",
	element = "model",
	X = 0,
	Y = 0,
	W = 2,
	H = 2,
	name = "model",
	mesh = "character.b3d",
	textures = {character.png},
	rotation_x = 0,
	rotation_y = 0,
	continuous = false,
	mouse_control = true,
})

item_image

digiline_send("touchscreen", {
	command = "add",
	element = "item_image",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	item_name = "default:dirt_with_grass",
})

bgcolor

digiline_send("touchscreen", {
	command = "add",
	element = "bgcolor",
	bgcolor = "#ffffff",
	fullscreen = false,
	fbgcolor = "",
})

background

digiline_send("touchscreen", {
	command = "add",
	element = "background",
	X = 0,
	Y = 0,
	W = 0,
	H = 0,
	texture_name = "digistuff_ts_bg.png",
	auto_clip = true,
})

background9

digiline_send("touchscreen", {
	command = "add",
	element = "background9",
	X = 0,
	Y = 0,
	W = 0,
	H = 0,
	texture_name = "digistuff_ts_bg.png",
	auto_clip = true,
	middle = 3,
})

pwdfield

digiline_send("touchscreen", {
	command = "add",
	element = "pwdfield",
	X = 0,
	Y = 0,
	W = 3,
	H = 0.8,
	name = "pwdfield",
	label = "",
})

field

digiline_send("touchscreen", {
	command = "add",
	element = "field",
	X = 0,
	Y = 0,
	W = 3,
	H = 0.8,
	name = "field",
	label = "field",
	default = "",
})

field_close_on_enter

digiline_send("touchscreen", {
	command = "add",
	element = "field_close_on_enter",
	name = "field",
	close_on_enter = true,
})

textarea

digiline_send("touchscreen", {
	command = "add",
	element = "textarea",
	X = 0,
	Y = 0,
	W = 4,
	H = 3,
	name = "textarea",
	label = "",
	default = "",
})

label

digiline_send("touchscreen", {
	command = "add",
	element = "label",
	X = 0,
	Y = 0,
	label = "label",
})

hypertext

digiline_send("touchscreen", {
	command = "add",
	element = "hypertext",
	X = 0,
	Y = 0,
	W = 4,
	H = 3,
	name = "hypertext",
	text = "<i>hypertext</i>",
})

vertlabel

digiline_send("touchscreen", {
	command = "add",
	element = "vertlabel",
	X = 0,
	Y = 0,
	label = "vertlabel",
})

button

digiline_send("touchscreen", {
	command = "add",
	element = "button",
	X = 0,
	Y = 0,
	W = 3,
	H = 0.8,
	name = "button",
	label = "button",
})

image_button

digiline_send("touchscreen", {
	command = "add",
	element = "image_button",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	texture_name = "default_stone_block.png",
	name = "image_button",
	label = "button",
	noclip = true,
	drawborder = true,
	pressed_texture_name = "",
})

item_image_button

digiline_send("touchscreen", {
	command = "add",
	element = "item_image_button",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	item_name = "default:stone_block",
	name = "item_image_button",
	label = "",
})

button_exit

digiline_send("touchscreen", {
	command = "add",
	element = "button_exit",
	X = 0,
	Y = 0,
	W = 3,
	H = 0.8,
	name = "button_exit",
	label = "button",
})

image_button_exit

digiline_send("touchscreen", {
	command = "add",
	element = "image_button_exit",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	texture_name = "default_mese_block.png",
	name = "image_button_exit",
	label = "button",
})

textlist

digiline_send("touchscreen", {
	command = "add",
	element = "textlist",
	X = 0,
	Y = 0,
	W = 4,
	H = 3,
	name = "textlist",
	listelements = {"a", "b", "c"},
	selected_id = 0,
	transparent = false,
})

tabheader

digiline_send("touchscreen", {
	command = "add",
	element = "tabheader",
	X = 0,
	Y = 0,
	name = "tabheader",
	captions = {"a", "b", "c"},
	current_tab = 0,
	transparent = false,
	draw_border = false,
})

box

digiline_send("touchscreen", {
	command = "add",
	element = "box",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	color = "#ffffff",
})

dropdown

digiline_send("touchscreen", {
	command = "add",
	element = "dropdown",
	X = 0,
	Y = 0,
	W = 3,
	H = 0.8,
	name = "dropdown",
	choices = {"a", "b", "c"},
	selected_id = 0,
	index_event = false,
})

checkbox

digiline_send("touchscreen", {
	command = "add",
	element = "checkbox",
	X = 0,
	Y = 0,
	name = "checkbox",
	label = "checkbox",
	selected = false,
})

style

digiline_send("touchscreen", {
	command = "add",
	element = "style",
	selectors = {
		"button_name",
	},
	properties = {
		border = false,
	},
})

style_type

digiline_send("touchscreen", {
	command = "add",
	element = "style_type",
	selectors = {
		"button",
	},
	properties = {
		border = false,
	},
})

table

digiline_send("touchscreen", {
	command = "add",
	element = "table",
	X = 0,
	Y = 0,
	W = 4,
	H = 3,
	name = "table",
	cells = {"a", "b", "c"},
	selected_id = 0,
	color = "#ffffff",
	background = "#000000",
	border = true,
	highlight = "#466432",
	highlight_text = "#ffffff",
	opendepth = 0,
	columns = {
		{type = "text", align = "center"},
	},
})

item_grid

  • W and H are the size of the grid in number of items.
  • name is a prefix for the buttons, which are numbered with their index. (e.g. grid_1, grid_2, ...)
  • size is the size of the buttons. Used for width and height.
  • spacing is the space between buttons. Used for vertical and horizontal spacing.
  • interactable determines whether buttons or images are used.
  • offset is for paginating the list of items.
digiline_send("touchscreen", {
	command = "add",
	element = "item_grid",
	X = 0,
	Y = 0,
	W = 1,
	H = 1,
	name = "grid",
	spacing = 0,
	size = 1,
	interactable = true,
	items = {
		"default:dirt 99",
	},
	offset = 1,
})