Widgets and Books for Squeak

Bob Arning arning at charm.net
Fri Mar 24 15:44:46 UTC 2000

On Fri, 24 Mar 2000 09:00:14 -0500 John_Gardner at dmr.ca wrote:
>1. I am not dissing Morphic.
>It is truly incredible and extensible. It is an excellent UI. However, it is BIG
>and somewhat slower than MVC. While the speed issue may be resolved through
>tuning, size is still an issue. Perhaps the bytecode compiler could be extended
>to provide information to a "discard..." method which would remove all
>unnecessary classes. This would be an option, of course, and it would only work
>at the system category (application) level. The context here is creating
>applications for end users.


If you are interested in exploring size reductions in Morphic for particular applications, I have enclosed a changeset that will help. It reports the size of Morphic divided into two groups - classes to keep and classes to delete. You can play with the exclusion criteria to manually adjust the keep group to what your app would need and see how much space would be saved. The output could easily be input to a method to remove the unwanted parts of Morphic as part of a shrink prior to deployment.


'From Squeak2.8alpha of 13 January 2000 [latest update: #1919] on 24 March 2000 at 10:36:25 am'!
"Change Set:		morphicSpace
Date:			24 March 2000
Author:			Bob Arning


	Smalltalk computeMorphicSizePartitioned

to get a report that shows the size of code of Morphic-related classes broken down into two groups: those one might keep for a Morphic Lite application and those one might omit. The grouping is determined by a list in the method and is rather subjective. I removed a number of the larger classes that would still leave a rather healthy (MVC++) UI capability. More could obviously be pruned and some of the pruned ones might be of interest in a particular application. As it stands, it shows the keep category at 400K and the remove at 340K. I'm sure this could be reduced quite a bit more, depending on the type of application"!

!SystemDictionary methodsFor: 'shrinking' stamp: 'RAA 3/24/2000 10:28'!
computeMorphicSizePartitioned   "Smalltalk computeMorphicSizePartitioned"

	| allClasses possibleDeletes a1 a2 |

	allClasses _ Morph withAllSubclasses.
	#('User Objects' 'Experimental-*' 'Balloon-*' 'Morphic-*' 'TrueType-*'
			'Graphics-Transformations' 'Alice2.0-*' 'MM-Flash-*') do: [ :partialCat |
		(SystemOrganization categories select: [:c | partialCat match: c]) do: [ :cat |
			(SystemOrganization listAtCategoryNamed: cat) do: [ :classSymbol |
				allClasses add: (Smalltalk at: classSymbol)
	possibleDeletes _ #(
		PlayingCard FlashFileReader PostscriptCanvas StandardScriptingSystem FlashMorphReader
		FlashFileStream FlashCodec 
		TrashCanMorph BookMorph ScriptEditorMorph SketchEditorMorph PaintBoxMorph 
		FlapTab HaloMorph EnvelopeEditorMorph TileMorph WaveEditor PianoRollScoreMorph
		FlashPlayerMorph ScorePlayerMorph TabbedPalette EventRecorderMorph 
		CategoryViewer FreeCell FatBitsPaint PlayingCardDeck WonderlandWrapperMorph
		PhraseTileMorph MidiInputMorph WonderlandCameraMorph ColorPickerMorph
		SpectrumAnalyzerMorph WonderlandMorph FlashCharacterMorph FreeCellBoard
		LipsMorph SameGameBoard KeyboardMorphForInput FlashButtonMorph 
		SameGame IRCMorph FlashMorph ReferenceMorph FlashSpriteMorph PinMorph
		MoviePlayerMorph GraphicalDictionaryMenu BlobMorph HeadMorph
		GraphMorph StandardViewer MovieMorph TilePadMorph CompoundTileMorph
		JoystickMorph ScreeningMorph RecordingControlsMorph IndexTabs 
		BookPageThumbnailMorph PartsWindow MagnifierMorph WiWPasteUpMorph
		BooklikeMorph PianoRollNoteMorph BouncingAtomsMorph FaceMorph
		KlattFrameMorph TetrisBoard FlashSorterMorph FishEyeMorph Tetris
		MultiuserTinyPaint ViewerEntry RemoteHandMorph PlayingCardMorph
		SoundLoopMorph FlashPlayerWindow WonderlandActorData SpeakerMorph
		Viewer TabSorterMorph FunctionComponent GraphicalMenu MIDIControllerMorph
		BookPageSorterMorph HeadingMorph SoundDemoMorph LedDigitMorph EyeMorph
		MIDIPianoKeyboardMorph PaintBoxColorPicker WonderlandCameraControls ColorTileMorph
	a1 _ self reportSizeOfClasses: (allClasses reject: [ :each | possibleDeletes includes: each name]).
	a2 _ self reportSizeOfClasses: (allClasses select: [ :each | possibleDeletes includes: each name]).

	StringHolder new 
		contents: 'Keep these


And remove these

		openLabel: 'Possible Morphic Lite Configuration'.

! !

!SystemDictionary methodsFor: 'shrinking' stamp: 'RAA 3/24/2000 10:22'!
reportSizeOfClasses: someClasses
Morph spaceUsedWithSubclasses
	| data answer total |
	data _ someClasses asArray collect: [ :each | {each name. each spaceUsed}].
	data _ data asSortedCollection: [ :a :b | a second >= b second].

	answer _ String streamContents: [ :strm |
		total _ 0.
		data do: [ :each |
			strm nextPutAll: (each second printString padded: #left to: 8 with: $ ),' - ',
				each first; cr.
			total _ total + each second.
		strm cr; nextPutAll: (total printString padded: #left to: 8 with: $ ),' - TOTAL'; cr; cr.

! !

More information about the Squeak-dev mailing list