package gui
This package contains tools for building simple GUIs. The toolkit is particularly well suited to constructing GUIs that display information as 2D images and/or geometric shapes. It is not designed for demanding graphical needs that call for high efficiency. Some of the tools in this package are built on the Swing GUI library, and the two libraries can be used in combination.
Some of the types in this package have aliases in the top-level package o1, so they are
accessible to students simply via import o1._
. Some of the package contents are not available
in the top-level package or included in this documentation.
Please note: One of this package’s key components (views) comes in multiple varieties, which
which are defined in the subpackages o1.gui.mutable and o1.gui.immutable and not listed below.
The View
that is most commonly used in O1 (and aliased as o1.View
in the top-level package) is
o1.gui.mutable.ViewFrame.
- Alphabetic
- By Inheritance
- gui
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Package Members
- package colors
This package contains Color constants.
This package contains Color constants. They cover all the colors listed in the W3C’s CSS Color Module specification (July 5th, 2017); there are some additional ones as well.
All the colors are fully opaque, except Transparent, which is fully transparent.
The contents of this package are aliased in the top-level package o1 so that they are accessible to students simply via
import o1._
. - package event
This package exists in order to provide aliases to event classes in Swing and to add some methods to Swing’s InputEvent via o1.gui.event.ConvenientInputEvent.
This package exists in order to provide aliases to event classes in Swing and to add some methods to Swing’s InputEvent via o1.gui.event.ConvenientInputEvent.
The contents of this package are aliased in the top-level package o1, so that they are accessible to students simply via*
import o1._
. - package layout
The package
o1.gui.layout
contains utilities that make it more convenient to lay out components in simple GridBagPanels from Scala's Swing library.The package
o1.gui.layout
contains utilities that make it more convenient to lay out components in simple GridBagPanels from Scala's Swing library. These utilities are used internally by some of the given GUIs in O1.NOTE TO STUDENTS: In this course, you don't need to understand how this package works or can be used.
Type Members
- type Anchor = world.objects.Anchor
The
Anchor
type represents anchoring points of two-dimensional elements (such as Pics) within other such elements; it is an alias for the class of the same name ino1.world.objects
. - class Animation extends AnyRef
An
Animation
object has an iterable sequence of Pics which it can show in a separate window (a simple View). - type Bounds = world.Bounds
The
Bounds
type represents rectangular boundaries on a two-dimensional plane; it is an alias for the class of the same name ino1.world
. - final class Color extends AnyRef
Each instance of this class represents a color.
Each instance of this class represents a color. The class uses the RGB color scheme: each color is a combination of a red, green, and blue components; there’s also a fourth component of opacity.
Color
objects are immutable.You don’t instantiate
Color
directly; instead, you createColors
s with the methods on theColor
companion object (e.g.Color(200, 150, 255)
) or use one of the named color constants in o1.gui.colors. There are also a few methods in this class that returns new Color objects defined in terms of existing ones (e.g., lighter, edit).This class has an alias in the top-level package o1, so it’s accessible to students simply via
import o1._
. - trait DefaultFrameSettings extends Frame
Give this convenience trait to a Swing GUI frame to place it at (200, 200) and set it as unresizeable.
- trait Escapable extends Frame
Give this convenience trait to a Swing GUI frame to make it close when the Escape key is pressed.
- type HasAnchor = world.objects.HasAnchor
A supertype for two-dimensional elements that have an anchoring point; this is an alias for the class of the same name in
o1.world.objects
. - type Key = scala.swing.event.Key
The
Key
type represents keys on the keyboard; it is an alias for the corresponding type in Scala’s Swing GUI library - final class Pic extends HasAnchor
Each instance of this class represents a picture: an immutable two-dimensional image.
Each instance of this class represents a picture: an immutable two-dimensional image.
You don’t instantiate
Pic
directly; instead, you createPic
s with the methods on thePic
companion object. For instance, you can:- load existing images:
Pic("mypic.png")
orPic("http://address.of/mypic.png")
), - create
Pic
s of shapes (e.g.,circle(150, Red)
orstar(100, Black)
); or - generate the pixels of a
Pic
with a function.
Moreover, many of the methods of a
Pic
object create and return newPic
s that represent combinations or transformations of existingPic
s.This class has an alias in the top-level package o1, so it’s accessible to students simply via
import o1._
.The examples below illustrate a few of the methods (assuming the above import):
val background = rectangle(400, 300, Red) val rotatedSquare = square(50, Blue).clockwise(30) val squareAgainstBg = background.place(rotatedSquare, Pos(100, 100)) squareAgainstBg.show() val ladybug = Pic("ladybug.png").scaleTo(100).flipHorizontal val combination = circle(100, Red).leftOf(ladybug) val part = combination.crop(Pos(10, 10), 180, 80) val negative = part.transformColors( _.negative ) negative.show()
Some of the methods of a
Pic
that use Pos objects or plain x and y coordinates to indicate positions within thePic
(e.g.,place
andcrop
above). All these methods consider the origo to be at the top left-hand corner or thePic
, with x values increasing downwards and y values rightwards. The coordinates are in pixels.Each image has an anchor that defines where it connects to other
Pic
s. By default, the anchor is Center; for example, theplace
method call above puts the center of the square atPos(100, 100)
within the background.Here is a of the main types of operations as methods on a
Pic
, and examples of each type:- Combining
Pic
s by positioning them relative to each other:above
,below
,leftOf
,rightOf
,onto
,against
,place
. - Rotations (*):
clockwise
,counterclockwise
- Changing size (*):
scaleBy
,scaleTo
- Selecting and moving pixels (**):
crop
,shift
,flipHOrizontal
,flipVertical
- Examining and manipulating individual pixels (**):
pixelColor
,transformXY
,transformColors
,combine
- Convenience methods for experimentation and
debugging:
show
,hide
.
Notes on implementation and efficiency:
Internally, a
Pic
stores its contents either as vector-based graphics, as a bitmap (raster), or as a combination of the two. By design, that internal representation is meant to be largely opaque to the user of thePic
class: students in O1 working on O1’s standard assignments generally shouldn’t need to know or care about it. Nevertheless, whether a particularPic
is stored in vector or bitmap form does have very substantial effect on efficiency in some contexts;Pic
, like the rest of O1Library, is not designed for high-performance graphics.Some users of this class may wish to know the following:
Pic
s start out in either vector form or bitmap form, depending on which method created them. Specifically, the shape-creating methods (likerectangle
andcircle
). producePic
s in vector form.- No operation on a
Pic
ever changes an already rasterized bitmap into vector graphics. (An operation such asleftOf
can produce anPic
that is stored as a combination of a vector graphic and a bitmap.) - Some operations always produce a rasterized
Pic
. These are marked with a double asterisk (**) in the list above. Some operations sometimes produce rasterizedPic
s but may retain the vector-based representation in simple cases. These are marked with a single asterisk (*). - You can call freeze to force rasterization.
- load existing images:
- type Pos = world.Pos
The
Pos
type represents locations on a two-dimensional plane; it is an alias for the class of the same name ino1.world
. - class SimpleFrame extends Frame with DefaultFrameSettings
Inherit this class to obtain a Swing GUI frame that has the DefaultFrameSettings and the given title.
- trait TerminatesOnClose extends Window
Give this convenience trait to a Swing GUI frame to make it terminate the application when closed.
Value Members
- val Anchor: world.objects.Anchor.type
The
Anchor
type represents anchoring points of two-dimensional elements (such as Pics) within other such elements; it is an alias for the class of the same name ino1.world.objects
. - val Bounds: world.Bounds.type
The
Bounds
type represents rectangular boundaries on a two-dimensional plane; it is an alias for the class of the same name ino1.world
. - val Key: scala.swing.event.Key.type
The
Key
type represents keys on the keyboard; it is an alias for the corresponding type in Scala’s Swing GUI library - val Pos: world.Pos.type
The
Pos
type represents locations on a two-dimensional plane; it is an alias for the class of the same name ino1.world
. - var isInTestMode: Boolean
- object Animation
This companion object of class Animation provides a couple of convenience methods (show, generate) for starting animations and an enumeration (AtEnd) for use with the class.
- object Color
This companion object of class
Color
provides methods for creating newColor
objects.This companion object of class
Color
provides methods for creating newColor
objects. There is also a small selection of related utility methods and constants.For many constants of type Color that represent different preset colors, see o1.gui.colors.
This object has an alias in the top-level package o1, so it’s accessible to students simply via
import o1._
. - object Dialog
This object provides convenience methods for displaying messages and reading user input via simple Swing dialogs.
- object Pic extends ShapeAPI
The primary purpose of this companion object of class
Pic
is to provide methods for creating new Pic instances: (apply, generate, circle, etc.The primary purpose of this companion object of class
Pic
is to provide methods for creating new Pic instances: (apply, generate, circle, etc. There is also a small selection of related utility methods.This object has an alias in the top-level package o1, so it’s accessible to students simply via
import o1._
. The shape-creating methods of this object (such ascircle
) are also available as functions in package o1. - object View
- object immutable
This package contains a version of
View
s that is not much used in O1: views to immutable domain models.This package contains a version of
View
s that is not much used in O1: views to immutable domain models. In O1, the other implementation in o1.gui.mutable is more relevant. - object mutable
This package contains the version of
View
s that we primarily use in O1: views to mutable domain models.This package contains the version of
View
s that we primarily use in O1: views to mutable domain models.The top-level package o1 provides an alias to the ViewFrame class in this package, so it is available to students as
View
simply by importingo1._
.There is an alternative implementation of
View
s in o1.gui.immutable.