[Pebble SDK] SimpleMenuLayer でメニューを表示する

公開日: : 最終更新日:2014/01/05 gadget, Pebble

Pebble SDK が 2.0 になり、SDK 1.x で作ったアプリは動かなくなってしまうということで EverLearn 用アプリの2.0対応を行っている。
iOSアプリ開発だと何か問題に遭遇しても検索すればあっという間に解決方法が見つかるが、Pebbleアプリ開発はまだ開発者が少なく、また SDK 1.x と SDK 2.0 でソースの書き方が結構変わっており 2.0の情報はまだほとんどないので、さらに情報が見つけづらい状況になっている。
頼みの綱は Developer Forum なのだが、2.0 移行のためにPebble側が大変な状況なのか、普通に放置されることも多い。
ということで、仕方なく試行錯誤を繰り返すことになるのだが、今回初めて SimpleMenuLayer を使ったら見事にはまってしまった。

やりたかったのは、Pebbleのセンターボタンを押したときにメニューを出して、単語をiPhoneに転送したり、これまでに受け取った単語を全て消したりできるようにすること。

pebble-screenshot_2013-12-22_17-05-40

しかし簡単に SimpleMenuLayer で表示できるはずが、画面が真っ黒になったり、真っ白になったりして、何も表示されない。

試行錯誤を繰り返したところ、問題は解決したが、結局原因は3つあったらしい。

問題1

SimpleMenuLayerは背景が白、文字列が黒で固定なようで、下記のように背景色を黒にしてしまうと文字列がまったく表示されなくなる。

    window_set_background_color(window_menu, GColorBlack);

これは単純な話なのでAPI説明ページに一言書いておいてくれればはまることもなかったのだが。
そしていまだにメニューのテキスト色を変える方法はわかっていない。まだできないのかも。なので、Pebbleアプリ(WatchAppというらしい)で黒背景にしていた場合、メニューを表示する際に背景を白に変える必要があった。

問題2

window_stack_push() は一通り設定を行ってから実行する必要がある。
何かのサンプルコードをコピペした時にそうなっていたのかも知れないが、なぜかいろいろ設定する前に実行してしまっていた。

問題3

MacOS Lion だとSDK 2.0 で提供されている arm-cs-tools が利用できない。1.x の時に提供されていたものを使えばビルドできるが、どうも描画まわりで挙動がおかしいように見えた。
結局MacBook ProをMountain LionにUpgradeした後にビルド、転送したところ描画問題は発生しなくなった。

原因がわかってしまえば何てことはないのだが、疑わしいところが多すぎて解決に時間がかかってしまった。
いつまで有効な情報かわからないけれども、一応メニュー表示部分のソースコードを公開してみる。

ところでPebble SDK 2.0 になってから開発環境がかなり改善されて、MacOS側にBluetooth経由でログを表示したり、コマンドラインでPebbleアプリのスクリーンショットが簡単にMacOS側に保存できたりするようになってかなり快適になった。
Pebbleは歩みがゆっくりな感じはするけれども、着実に前進している気がする。来年が勝負の年だろうか。

// Function when pressing a center button
void select_btn_pressed() {
    window_menu = window_create();
//    window_set_fullscreen(window_menu, true);
    window_set_background_color(window_menu, GColorWhite);
    
    // SimpleMenu
    menu_items[0] = (SimpleMenuItem) {
        .callback = NULL,
        .icon = NULL,
        .subtitle = "Send a word to a phone",
        .title = "Send",
    };
    menu_items[1] = (SimpleMenuItem) {
        .callback = menu_select_callback,
        .icon = NULL,
        .subtitle = "Erase All Words",
        .title = "Erase",
    };
    
    // Bind the menu items to menu sections
    menu_sections[0] = (SimpleMenuSection) {
        .items = menu_items,
        .num_items = NUM_MENU_ITEMS,
        .title = "Menu",
    };
    
    Layer *window_layer = window_get_root_layer(window_menu);
    
    // Now we prepare to initialize the simple menu layer
    // We need the bounds to specify the simple menu layer's viewport size
    // In this case, it'll be the same as the window's
    GRect bounds = layer_get_frame(window_layer);
    
    APP_LOG(APP_LOG_LEVEL_DEBUG, "select %d %d", bounds.size.h, bounds.size.w);
    
    // Initialize the simple menu layer
    simple_menu_layer = simple_menu_layer_create(bounds, window_menu, menu_sections, NUM_MENU_SECTIONS, NULL);

    // Add it to the window for display
    layer_add_child(window_layer, simple_menu_layer_get_layer(simple_menu_layer));
    
    window_stack_push(window_menu, true);
}

関連記事

自動昇降機能付きデスクFLEXISPOT EJ2購入

今後もテレワークが長く続きそうなので、憧れだった自動昇降機能付きデスクを買ってみ

記事を読む

[Apple Event]最高峰を解禁。

2022/03/09 3:00AM JST にApple Eventが行われる。今回は「最高峰を解

記事を読む

USB Type-A to Type-C のUSB 3.2 Gen2x2 ケーブルは存在しない

USB Type-A to Type-C ケーブルでよく混乱するのでメモしておく。

記事を読む

[Apple Watch] EverLearn 1.9.7 Release

初の Apple Watch 対応アプリ EverLearn 1.9.7 をリリースしました。間違え

記事を読む

Anker の高耐久ライトニングケーブルを買ってみた

立て続けに2本ライトニングケーブルが壊れたので、ふんぱつして高級ケーブルを買ってみた。 たしかに

記事を読む

TUNEWEAR ALMIGHTY DOCK nano1 USB3.2 5in1ハブ を買ってみた

ちょうどiPhone のリストアを実行中で、2時間程度かかっていたため高速ハブを使ったらもっと速く

記事を読む

ドラムちゃんに電子ドラムiWordを接続する

ドラム譜学習アプリ「ドラムちゃん」に、安価なMIDI電子ドラム iWord を接続する方法を説明し

記事を読む

m5stack + MH-Z19B で CO2 濃度を測ってみた

テレワーク期間が長く続いているが、冷房をかけて閉め切った部屋にこもっていると、どうも頭が働

記事を読む

[Kindle] Kindle用辞書 英辞郎-K を買ってみた

Kindle Paperwhite では プログレッシブ英和中辞典 が利用できる (設定 >

記事を読む

英単語学習アプリ EverLearn 1.4.0 を公開しました

ようやく、iOS7 に対応した EverLearn  1.4.0 を公開しました。 i

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

Vision Proアプリ開発本 8/24、8/26に発売

Vision Proアプリ開発入門 P400が 8/24 に発売、V

Developer Strap が日本でも購入可能に

USアカウントでしか購入できなかった Vision Pro 用 De

→もっと見る

PAGE TOP ↑