Skip to content

Instantly share code, notes, and snippets.

@Sciss
Created April 22, 2019 11:36
Show Gist options
  • Save Sciss/04da8d1fe052f41f76f2ba6dd6cfecbc to your computer and use it in GitHub Desktop.
Save Sciss/04da8d1fe052f41f76f2ba6dd6cfecbc to your computer and use it in GitHub Desktop.
import scala.swing._
class BangIcon(ext: Int = 16) extends javax.swing.Icon {
def getIconWidth = ext
def getIconHeight = ext
var selected = false
def paintIcon(c: java.awt.Component, g: java.awt.Graphics, x: Int, y: Int) =
if (selected) {
val g2 = g.asInstanceOf[java.awt.Graphics2D]
g2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING,
java.awt.RenderingHints.VALUE_ANTIALIAS_ON)
g2.setColor(java.awt.Color.WHITE)
// g2.fillRoundRect(x, y, ext, ext, 4, 4)
g2.fillOval(x, y, ext, ext)
}
}
// val icn = new BangIcon
val r = new Button(" ") {
var active = false
// private val strkOut = new java.awt.BasicStroke(2f)
private val el = new java.awt.geom.Ellipse2D.Double
override def paintComponent(g2: java.awt.Graphics2D): Unit = {
super.paintComponent(g2)
g2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING,
java.awt.RenderingHints.VALUE_ANTIALIAS_ON)
g2.setRenderingHint(java.awt.RenderingHints.KEY_STROKE_CONTROL,
java.awt.RenderingHints.VALUE_STROKE_PURE)
g2.setColor(foreground) // java.awt.Color.WHITE)
val w = peer.getWidth
val h = peer.getHeight
val ext1 = math.max(0, math.min(w, h) - 14)
// val strk = g2.getStroke
// g2.setStroke(strkOut)
// g2.drawOval((w - ext1) >> 1, (h - ext1) >> 1, ext1, ext1)
el.setFrame((w - ext1) * 0.5, (h - ext1) * 0.5, ext1, ext1)
g2.draw(el)
// g2.setStroke(strk)
if (active) {
val ext2 = math.max(0, ext1 - 5)
// g2.fillOval((w - ext2) >> 1, (h - ext2) >> 1, ext2, ext2)
el.setFrame((w - ext2) * 0.5, (h - ext2) * 0.5, ext2, ext2)
g2.fill(el)
}
}
}
//r.icon = icn
val f = new Frame {
contents = r
pack()
open()
}
r.active = !r.active; r.repaint()
r.font = new java.awt.Font(java.awt.Font.SANS_SERIF, java.awt.Font.PLAIN, 30)
r.revalidate(); f.pack()
r.reactions += {
case event.ButtonClicked(_) =>
r.active = !r.active; r.repaint()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment