dialect "rtobjectdraw"

def colorMixer: GraphicApplication = object {
    inherit graphicApplicationSize (400 @ 400)
    // labels for text fields for principal, interest, time, and final amount
    def redLabel: TextBox = textBoxWith ("Red: ")
    def greenLabel: TextBox = textBoxWith ("Green: ")
    def blueLabel: TextBox = textBoxWith ("Blue: ")

    // Text fields for principal, interest, and time
    def redField: NumberField = numberFieldLabeled ("0")
    def greenField: NumberField = numberFieldLabeled ("0")
    def blueField: NumberField = numberFieldLabeled ("0")

    // If the user changes the entry to any field, recalculate
    // amount gained
    redField.onChangeDo {evt: Event -> changeColor}
    greenField.onChangeDo {evt: Event -> changeColor}
    blueField.onChangeDo {evt: Event -> changeColor}

    // Set up column of labels for text fields
    def col1: Container = emptyContainer
    col1.arrangeVertical
    col1.append (redLabel)
    col1.append (greenLabel)
    col1.append (blueLabel)

    // set up column of text fields (and one label)
    def col2: Container = emptyContainer
    col2.arrangeVertical
    col2.append (redField)
    col2.append (greenField)
    col2.append (blueField)

    // Add both columns to bottom of window
    append (col1)
    append (col2)

    def background: Graphic2D =
          filledRectAt(0@0) size (canvas.size) on (canvas)

    method changeColor -> Done is confidential {
        var newColor: Color
        try {
            newColor := colorGen.r(redField.number)
                                       g(greenField.number)
                                       b(blueField.number)
        } catch {exc: ColorOutOfRange →
            print "Inputs must be between 0 and 255"
            newColor := colorGen.black
        }
        background.color := newColor
    }

    startGraphics
}
