So-net無料ブログ作成

NetWalker用アプリの開発について [NetWalker]

だらだらDashcodeをいじっている間に、魅力的な端末が出てきてしまいました。先日発売されたNetWalkerです。Linux Zaurusを先日紛失してしまったため、迷わず買ってしまいました。Zaurusの時はLinux Zaurusと言いつつもLinuxをほぼ意識しなくてもいい作りになっていたんですが、NetWalkerはほぼLinux(Ubuntuと言うディストリビューション)そのままらしいです。シャープ独自のアプリも入っていない様です。また、各種のソフトウェアは、Zaurusの時のように移植の作業が必要なく、Ubuntu様に配布されているアプリケーションがそのまま使える様子です。と言うことで、ほぼ、新規にアプリを開発するような必要性はなさげなんですが、一応、おもちゃとして、これ用のソフトの開発もできるようになりたいと思います。Dashcodeはかなり中途半端ですが、こちらが飽きるまでお預けです。

さて、Zaurusの時はRuby/Qteと言うとても便利(と言うか、らくちんと言うか・・)な環境を先に覚えてしまったので、ネイティブアプリの開発は全く勉強しませんでした。NetWalkerでも、Ruby-GNOME2と言うのが使えそうな感じなんですけど、それは我慢して、NetWalkerでは先にネイティブアプリの開発について調べたいと思います。こっちは、ちゃっちゃと行きたいんですけどねぇ〜。

*

仕様一覧によると、NetWalkerに搭載されているOSはUbuntu 9.04です。Ubuntu 9.04技術概要によると、デスクトップ環境はGNOME 2.26だとの事。GNOME 2.26 リリースノート内、4. 新しくなったこと 〜開発者向け〜の箇所に使うべきでないライブラリの話や、GTK+ 2.16でGNOME 2.26が構成されていること、統合開発環境について(NetWalkerで動くんかな・・?)などが書かれています。

Ubuntuのページには開発者向けのページが無さげだったので、GNOMEの開発者用ページから情報をたどって行きます。と思いましたが、文書が英語の様なので、日本GNOMEユーザー会のページからたどることにします。

まずは、GNOMEプラットフォームの概要から。2006年改訂とのことなので、情報が古い可能性もありますが、まあ、大雑把に概要を知りたいだけなので、これで済ませました。ちなみに、GNOME 2.26の文書はこちらです。ま、いろいろと書いていましたが、プログラミング言語は基本はCの様ですね。C++も使えると言う感じで書かれています。が、GUI関連のことを考えるとCは厳しいと思われるのと、C++では本格的にアプリを書いた事がないので、できればC++を基本に考えたいですねぇ。

また、GNOMEの開発では、Anjutaと言う統合環境が奨励されている様です。でも、これは統合環境ですね。コンパイラやライブラリも含まれているんでしょうか?と思って、検索してみたら、やっぱり入ってない様ですAnjutaの説明によるとAnjutaを動かすのに(?)下記のライブラリが必要な様です。また、それぞれに応じたdevelパッケージが必要だとか・・。

gdlGNOME development library
libgdaGNOME DB library
liboptsCommand options processing(autogenに必要)
guileScripting engine(autogenに必要)
autogenTemplate processing engine


また、これらの他に下記の項目が挙げられています。

GladeGUIエディタらしい。C言語用とか書かれています・・。
Devhelp開発者用のヘルプシステム。
gtkmmGTKのC++ラッパー。
WxWindowsクロスプラットフォームのGUIキット。WxWindowsベースのアプリ開発に必要。
SDLSimple DirectMedia Layerのグラフィックライブラリ。


Gladeとか、Cを前提としてるんですね・・。GTK+って、GTKのC++バージョンだと思ってたんですが、どうやら違う様ですね。なんだか良くわからない(と言うか、何がほんとに必要なのかも、もやもやしてる)ので、最初はCで行くことにしようかな・・。


つづく・・。


【参考】
仕様一覧|NetWalker - シャープ
Ubuntu 9.04技術概要 - Ubuntu Japanese Team
GNOMEドキュメントライブラリ
日本GNOMEユーザー会
Anjuta DevStudio: GNOME Integrated Development Environment
Anjuta IDE マニュアル


ウィジェットのリサイズ Part 8 [Dashboardウィジェット]

さて、やっと書いたコードのところまで実行されるようになったのはいいんですが、動きが変です。

どう変かと言うと、マウスを右下方向にドラッグしてもウィジェットの背景のサイズはそのまま、テキストエディタの部分だけがサイズはそのままでマウスの動きに追従して右下に動いてくると言う感じです。

とりあえず、思いつくのは2点。

・ウィジェットのベースがリサイズに対応していないのでは?
・テキストエディタのウィジェットベースの端からの位置指定ができていない。

まず、ウィジェットのサイズがそのままなのは、ウィジェットのベース(灰色の部分)が固定の画像でサイズ拡大に対応していないんじゃないか?と言う意味です。サイズを変更するには、ウィジェットの土台となっている部分のウィンドウがマウスに追従して大きくなる必要があります。が、最初にウィジェットの構成について見ていたときに懸念してたんですが、この土台は固定サイズの画像(Default.png)をそのまま利用していたと思います。今回デフォルトのテンプレートを利用しているので、こちらでも同様に固定サイズの画像になっていて、そもそも土台自体のサイズ変更はできないんじゃないかな~とぼんやり思いはじめました。そういえば、リサイズマークもマウスに追従してないような気も・・。

後者はテキストエディタの土台との位置関係です。Dashcodeを使い始めた時の記事で、「インスペクタ」で設定する「自動サイズ調整」のバネマークがどういう意味なんか良くわかってませんでしたが、まさにここの設定がうまくいっていないんだと思いますね。

*

さて、まずは土台です。こちらの記事を読み直してみると「Default.png」は基本的には「ウィジェットのロード中に表示される画像」で、「動作中の背景としても使用可」と言う感じのようです。今は、ロード中、動作中ともに同じ画像ファイルを利用している様で(←要確認!)、リサイズを実現するためには根本的にこれを変えないといけないような気もしますね。

背景に画像を使うのでわかるように、ダッシュボードには「ウィンドウ」と言う土台が無いようなので、自分で土台の拡大描画をする必要があるのでしょうか?その場合は、Canvasを使ってJavascriptで描画することになりますか・・。もしくは、テキストボックスの様に自動でサイズを拡張してくれるライブラリを土台として使うことになるんでしょうか・・?後者の方が楽そうですけど、それが可能なのかどうかを調べないとだめですね・・・。

以前見た「Resizer」のサンプルを再度Dashcodeで見てみました。・・・ウィジェットを構成する部品が9個に分割されていますね・・。左上、上部中央、右上、中央左、中央、中央右、左下、下部中央、右下と言う感じです。リサイズマークをドラッグしたら、それに応じて、端に位置する各部品を移動させるとともに、各部中央に位置する部品のサイズを変更すると言う感じですかね・・。めんどそうですねぇ。


さてさて。

ウィジェットのリサイズ Part 7 [Dashboardウィジェット]

スイスイ行くと思ってたんですが、予想外に予想外の動作をされてしまいました・・・。

と言う事で、何が悪いのか探して行きます。現象としては、onmousedownイベントがドラッグした際は来なくて、クリックしたときは来ていると言う状況です。前者の場合はイベントが最初にリサイズマークに発生しているのではなく、他の要素に掴まえられて、破棄されていて、後者の場合はそうはなっていないと言うような感じになるんでしょうか?でも、onmousedownイベントはマウスボタンを押した時に最初に発生するイベントのはずなので、そんなことも考えにくいんですけどね・・・。

とりあえず、ソースを追っていくことにします。まず、「main.html」。リサイズマークの追加で追加された箇所は下記の通りだと思われます。

main.html
<img src="Images/resize.png" id="resize" apple-part="com.apple.Dashcode.part.image" onmousedown="resizeMouseDown(event)">


で、CSSに追加されたと思われるのは、下記の通り。

main.css
#resize {
    height: 12px;
    position: absolute;
    right: auto;
    bottom: auto;
    margin-top: 0px;
    width: 14px;
    top: 350px;
    left: 250px;
}


ここのサンプルとは微妙に違いますね。まあ、全く同じと言うのも無さげなんですが、どこかが影響してるんでしょうか・・?

みたところ、何となくHTMLファイルの方は問題なさそうな気がします。ちょっと気になる点もなきにしもあらずなんですけどね。一方、CSSのサンプルにある「-apple-dashboard-region:」の行が気になります。最初に見かけたときは、とりあえずほっておいたんですが、仕方がないので、ちょっと調べて見ます。

ここによると、なんか「ドラッグの際にウィジェットが動くのを抑制する」と書いてあるような気がします。と言うことで、これをそのまま追加してみることにします。(これの書式が良くわからないんですが、どっかに仕様はないんでしょうか・・?)

main.css
#resize {
    height: 12px;
    position: absolute;
    right: auto;
    bottom: auto;
    margin-top: 0px;
    width: 14px;
    top: 350px;
    left: 250px;
    -apple-dashboard-region: dashboard-region(control rectangle);
}


これで実行したところ、ブレークに来ました!と言う事で、ブレークを外して、も一度実行したところ・・・。ちゃんと(と言うか、一応)反応はしていますが、なんか動きが変です・・・。


つづく(T_T)。

ウィジェットのリサイズ Part 6 [Dashboardウィジェット]

さて、大体何をしてるのかが分かった気がするので、ちゃっちゃ〜とコードを書き込んで行きました。

それで、実行!リサイズのマークを右下にドラッグして、リサイズ!と行きましたが、反応ありません・・・。と言うか、マウスに合わせてウィジェットが右下に移動してしまいます・・・。

ちなみに、追加したソースはこちらで追加した様にビヘイビアを追加。ただし、ハンドラの名前は「resizeMouseDown」に変えました。で、グローバル変数(と言うのか良くわかってないんですが・・)は取りあえず、その「resizeMouseDown」のすぐ上に書いたので、追加したソースは下記の様な感じです。

main.js
var growboxInset;

function resizeMouseDown(event)
{
	document.addEventListener("mousemove", resizeMouseMove, true);
	document.addEventListener("mouseup", resizeMouseUp, true);
 
	growboxInset = {x:(window.innerWidth - event.x), y:(window.innerHeight - event.y)};
 
	event.stopPropagation();
	event.preventDefault();
}


function resizeMouseMove(event)
{
    var x = event.x + growboxInset.x;
    var y = event.y + growboxInset.y;
 
    document.getElementById("resize").style.top = (y-12);
    window.resizeTo(x,y);
 
    event.stopPropagation();
    event.preventDefault();
}
 
 
function resizeMouseUp(event)
{
    document.removeEventListener("mousemove", resizeMouseMove, true);
    document.removeEventListener("mouseup", resizeMouseUp, true);
 
    event.stopPropagation();
    event.preventDefault();
}


さて、見た目、何も起きていないので、何が起こっているのかさっぱり分かりません。なので、取りあえず、「resizeMouseDown」の先頭の行にブレークを張ることにしました。「main.js」のウィンドウで該当位置にカーソルを持って行き、メニューからブレークポイントを設定。

ブレークポイント.png
前途多難


で、実行&リサイズ!としてみたところ、ブレークしません・・。う〜ん、設定の仕方が間違えとんかなぁ・・・。とも思いましたが、なにげにリサイズマークをクリックしてみたところ・・。ブレーク来ました。

ブレーク.png
止まった・・


なんじゃそりゃ?・・・う〜ん、ちゃっちゃと終わらせたいんですけどねぇ・・。


つづく。

ブログを作る(無料) powered by So-netブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。