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.layoutcontains utilities that make it more convenient to lay out components in simple GridBagPanels from Scala's Swing library.The package
o1.gui.layoutcontains 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
Anchortype 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
Animationobject has an iterable sequence of Pics which it can show in a separate window (a simple View). - type Bounds = world.Bounds
The
Boundstype 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.
Colorobjects are immutable.You don’t instantiate
Colordirectly; instead, you createColorss with the methods on theColorcompanion 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
Keytype 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
Picdirectly; instead, you createPics with the methods on thePiccompanion object. For instance, you can:- load existing images:
Pic("mypic.png")orPic("http://address.of/mypic.png")), - create
Pics of shapes (e.g.,circle(150, Red)orstar(100, Black)); or - generate the pixels of a
Picwith a function.
Moreover, many of the methods of a
Picobject create and return newPics that represent combinations or transformations of existingPics.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
Picthat use Pos objects or plain x and y coordinates to indicate positions within thePic(e.g.,placeandcropabove). 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
Pics. By default, the anchor is Center; for example, theplacemethod 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
Pics 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
Picstores 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 thePicclass: students in O1 working on O1’s standard assignments generally shouldn’t need to know or care about it. Nevertheless, whether a particularPicis 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:
Pics start out in either vector form or bitmap form, depending on which method created them. Specifically, the shape-creating methods (likerectangleandcircle). producePics in vector form.- No operation on a
Picever changes an already rasterized bitmap into vector graphics. (An operation such asleftOfcan produce anPicthat 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 rasterizedPics 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
Postype 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
Anchortype 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
Boundstype 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
Keytype 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
Postype 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
Colorprovides methods for creating newColorobjects.This companion object of class
Colorprovides methods for creating newColorobjects. 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
Picis to provide methods for creating new Pic instances: (apply, generate, circle, etc.The primary purpose of this companion object of class
Picis 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
Views that is not much used in O1: views to immutable domain models.This package contains a version of
Views 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
Views that we primarily use in O1: views to mutable domain models.This package contains the version of
Views 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
Viewsimply by importingo1._.There is an alternative implementation of
Views in o1.gui.immutable.