carousel <- function(fn="Rplots.pdf") {
	stopifnot(require(ggplot2))
	stopifnot(require(aRtsy))
	stopifnot(require(meme))
	stopifnot(require(ggwordcloud))
	stopifnot(require(gridExtra))
	stopifnot(require(ggtext))

	# page 1
	set.seed(13)
	title_colour <- colorPalette("mixer4")[3]
	yellow <- colorPalette("mixer4")[1]
	p1 <- canvas_flow(
		colors = colorPalette("mixer4"), 
		polar=T, background = "#EFEFEF", 
		lwd=2
	) + 
	ggtitle("Create Carousel\nPosts with R") + 
	theme(plot.title = element_text(
			face="bold", colour=title_colour, size=42, vjust=-0.5
		)
	) +
	theme(plot.margin = unit(c(1,0.5,0,0), "cm")) 

	# page 2
	tools <- data.frame(word=c(
		"Photoshop", "Canva", "Visme", "Spark", "Design Wizard", "Easil",
		"Snappa", "Crello", "Stencil", "PicMonkey", "Vectornator", "Visme",
		"Stencil", "Snappa", "Piktochart", "Design Wizard", "Easil", "Pixelied",
		"Tyle", "Pixlr", "Fotojet", "Fotor", "Venngage", "PicMonkey",
		"Desygner", "Figma", "Penpot", "Affinity Publisher", "Vectr", "InDesign",
		"Fireworks", "Polotno Studio", "Genially", "PicMonkey", "Corel Vector",
		"PosterMyWall", "PixTeller", "VistaCreate", "Venngage", "Simplified",
		"reThumbnail", "Cretorial", "Lucidpress", "Baseline", "Picofme.io",
		"EvolveUI", "Drawtify", "VivaDesigner", "Pikiz", "Tallery Gallery",
		"MockoFun", "Picmaker", "Plasfy", "APITemplate.io", "SoVisual.co",
		"Pozters", "Mediamodifier", "Dezo", "365Layouts.com", "Sprightly",
		"Etimat Designer"
	))
	p2 <- ggplot(tools, aes(
			label = word,
			color = factor(sample(5, nrow(tools), replace = T))
		)) +
		scale_colour_manual(values=colorPalette("mixer4")) + 
		geom_text_wordcloud_area(shape="square") +
		scale_size_area(max_size = 8) + theme_minimal() +
		ggtitle("If you think you \nneed a special tool...") + 
		theme(plot.title = element_text(
			face="bold", colour=title_colour, size=42, vjust=-0.5
		)) +
		theme(plot.margin = unit(c(1,0.5,0,0.5), "cm")) 
	
    # page 3
	dat <- data.frame(x = 1, y = 1, 
		label = paste0(
			"<span style='color: red; font-size: 100pt'>It's just a PDF!</span><br>",
			paste0(
				"<span style='color: ", title_colour, "; font-size: 20pt'>@ 1080x1080px.<br><br>It always has been.</span>"
			)
		)
	)
	p3 <- ggplot(dat) +
	ggtext::geom_textbox(
		aes(x = x, y = y, label = label), box.colour = NA, width = unit(10, "cm"),
		fill=yellow
	) +
	theme_void() + 
	theme(
		panel.background = element_rect(fill = yellow, colour = NA,	size = 0),
		panel.border = element_blank(),
		panel.grid.major = element_blank(),
		panel.grid.minor = element_blank()
	) +
	ggtitle("... then you are mistaken:") + 
	theme(plot.title = element_text(
		face="bold", colour=title_colour, size=42, vjust=-0.5
	)) +
	theme(plot.margin = unit(c(1,0.5,0,0.5), "cm")) +
	theme(plot.background = element_rect(fill = yellow))
		
	# page 4
	credits <- c(
		"aRtsy: Generative Art with 'ggplot2'",
		"ggwordcloud: A Word Cloud Geom for 'ggplot2'",
		"ggtext: Improved Text Rendering Support for 'ggplot2'"
	)	
	n_lines <- length(credits)
	dat <- data.frame(x = 1, y=n_lines:1, label = credits)
	p4 <- ggplot(dat) +
		ggtext::geom_textbox(
			aes(x = x, y = y, label = label), 
			box.colour = NA, width=unit(500, "pt"), fill="#EFEFEF",
			size=8
		) + ylim(-2, n_lines+2) + 
		theme_void() +
		ggtitle("Credits") + 
		theme(plot.title = element_text(
			face="bold", colour=title_colour, size=42, vjust=-0.5
		)) +
		theme(plot.margin = unit(c(1,0.5,0,0.5), "cm")) 
	 
    # save it
	res <- marrangeGrob(list(p1, p2, p3, p4), nrow=1, ncol=1, top=NULL)
	ggsave(fn, 
		plot=res, device="pdf", width=1080, height=1080, units="px", dpi=72,
		bg="#EFEFEF", scale=0.5
	)


}