|
概要 |
GUIシリーズ第3弾の「加法混色」。今週を含めて3週間似たような内容を取り扱い、その次の週で総まとめを行います。 色の扱い方は様々ですが、そこに共通することは何か... その構造を見抜くことが、3週間後の目標となります。 冗長(いくつもの試作)から「抽象」や「構造」を垣間見ていただければと思います。 ちなみにテキストはこちら(http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/ColorRGB/index-j.html)
|
概要 |
GUIシリーズ第3弾の「加法混色」。今週を含めて3週間似たような内容を取り扱い、その次の週で総まとめを行います。 色の扱い方は様々ですが、そこに共通することは何か... その構造を見抜くことが、3週間後の目標となります。 冗長(いくつもの試作)から「抽象」や「構造」を垣間見ていただければと思います。 ちなみにテキストはこちら(http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/ColorRGB/index-j.html)
|
準備 |
マシンメンテナンス
本題に入る前に、まずは日課から。(日々のマシンメンテナンス)
今日の目標
本日拵えるのは、次のようなGUIアプリケーションです。
RGB(Red、Green、Blue:光の三原色)の強さをスライダーで調整することで、色を作り出すアプリケーションです。
準備プログラムの実行
それでは、ワークスペースで以下のプログラムを実行して、準備を整えてください。
| aCollection | (aCollection := OrderedCollection new) add: #url: -> 'http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/ColorRGB/ColorRGB.st'; add: #comment: -> 'Copyright 2008-2011 KSU (Kyoto Sangyo University). All Right Reserved.'; add: #bundle: -> #KSU; add: #package: -> 'KSU-Template'; add: #nameSpace: -> #KSU; add: #category: -> 'KSU-Template'; add: #class: -> #{KSU.ColorRGB}; add: #protocol: -> #examples; add: #selector: -> #example1; add: #execute: -> [#{KSU.ColorRGB} value example1]; yourself. JunSystem perform: ((aCollection collect: [:each | each key]) inject: String new into: [:selector :key | selector , key]) asSymbol withArguments: (aCollection collect: [:each | each value]) asArray
|
今回のGUI部品:Label, Input Field, Slider |
|
コードリーディング |
color
ColorValueクラスによって色を作り出します。注目すべきはRGBの数値を0から1までの間に調整しているところ。max:とmin:を理解しましょう。
regGauge, greenGauge, blueGauge
先週と先々週に引き続き、今週もValueHolderです。初期値を与えた上で仕事も依頼していますね。そろそろこの構造を覚えられたでしょうか?
updateColor, postOpenWith:
updateColorは背景色の変更を行なっているんだなぁ...という程度の認識で構いません。(欲を言えば、GUI部品は様々なものにラップされているのだな、と感じてもらえると良い感じ!) 大事なのは、postOpenWith:です。「ウィンドウが開いてすぐに実行される部分」と覚えておいてください。 プログラムを動かすときに変数の初期化などを行いますが、ウィンドウが開いた後でないと初期化できないようなものもあります。 その時に重宝するのがこのpostOpenWith:です。今回の場合は、ウィンドウの背景色を変更するように書かれています。
updateColorRed:, updateColorGreen:, updateColorBlue:
テキストフィールドの値を変更してから背景色を変更するメッセージです。 注目すべきは次のフレーズ...
InputState default altDown
これは、ユーザがaltキー(optionキー)を押下しているか否かをチェックしてくれるものです。 何気ないマウス操作に裏コマンドを用意したり... 工夫一つで面白いものが作れそうですね。 ちなみに「shiftDown」も「ctrlDown」などもあります。(InputStateクラスをbrowseしてみましょう。)
valueString:
直上のupdateColor***:に登場したメッセージです。roundTo:メッセージで数値を丸めて、文字列の形で応答してくれます。
Double pi
上で求まる円周率を小数点以下2桁に丸めてみましょう。
Double pi roundTo: 0.01
「数値の丸め方」は、今日のコードライティングで必要になりますので、覚えておいてください。
|
コードライティング |
今回も、未完成メソッドが一つもありませんでしたので、プログラミングしてませんよね。 仮にも「ペアプログラミング」。ライティングもしたいではありませんか。(ね?
そんなわけで、今日は「HTMLやCSSのカラーコード」を表示できるように拡張しましょう。ところで、「カラーコード」をご存知でしょうか。
カラーコード
HTMLで次のようなフレーズがあった時...
<span color="#FF0000">Smalltalk</span>
この通り、赤色の文字列が現れます。この「#FF0000」の部分が「赤色」を指していて、カラーコードと呼びます。 シャープ記号の後ろに6桁ありますが、2桁ごとに区切ると、それぞれ赤・緑・青の強さを表す16進数の数値になっています。
#00FF80 (赤:00→0、緑:FF→255、青:80→128)
今日のアプリケーションはスライダーで色を変更することができましたが、その時の色をカラーコードに変換して、ダイアログやトランスクリプトに表示しよう、というものです。 さあ、拡張を始めましょう!
整数値を16進数にする
ヒントとして、16進数に変換する方法をご紹介しましょう。整数値に対してprintStringRadix:メッセージを送ることで、16進数文字列を得ることができます。
255 printStringRadix: 16
HTMLやCSSのカラーコードを表示できるようにする
あとは必要事項と画像のみ掲載しておきます。自分なりに試行錯誤してみてください。 また、わからないことがあっても心配いりません。Smalltalkに訊けばよいのですから! (答えとなるソースコードが、目の前に転がっていますよ!)
これを実装すれば、正規化された値(0.0から1.0までに写像された値)を自分好みに変化させる方法を知ることになりましょう。どうぞ、おきばりやしとくれやす!
|
さいごに |
GUIの部品操作にも慣れてきて、そろそろ飽きてきたやもしれませんが、いや、まだまだ飽きるべき時ではありません。 繰り返し何度も何度も「理解」と「行解」を行わねば、息をするようにプログラミングすることはままなりません。 次週と次々週は似たようなテーマになるため、さらに退屈に感じると思いますが、 その冗長(繰り返し)の先にある「構造」を見抜くまでは、手を抜かずに取り組んでください!
くれぐれも...
今日のプログラミング内容をstファイルとして保存しておきましょう。来年になって自分の後輩を指南する際に、きっと役立つ教科書となることでしょう。 「釈迦に説法」だとは思いますが、ファイル名や保存ディレクトリは適切なものにしておかないと、せっかくの教科書も失せてしまいますよ...。