BlinkGTK ページ内検索とズーム API リファレンス

バージョン: 1.2.0-build2
最終更新: 2026-07-29
言語: 日本語 |

English


このページについて

表示中のページを対象にした 文字列検索(一致箇所のハイライトと巡回)と、
ズーム(表示倍率の変更・取得)の API です。読書アプリの「本文検索」や
「文字を大きく」ボタンは、この 4 つで作れます。

使い方

/* ページ内の「組版」を検索してハイライト */
blink_web_view_find_in_page(view, "組版", TRUE, FALSE, FALSE);

/* 同じ語で次の一致へ (find_next=TRUE で繰り返し呼ぶ) */
blink_web_view_find_in_page(view, "組版", TRUE, FALSE, TRUE);

/* 検索を終える (TRUE でハイライトも消す) */
blink_web_view_stop_finding(view, TRUE);

/* 表示を 150% に */
blink_web_view_set_zoom_level(view, 1.5);

一覧

したいこと API
ページ内を検索してハイライト blink_web_view_find_in_page()
検索を終了 blink_web_view_stop_finding()
表示倍率を変更 blink_web_view_set_zoom_level()
現在の倍率を取得 blink_web_view_get_zoom_level()

ズームはページ全体の表示倍率です。本文の文字サイズだけを変えたい場合は
Settings API の blink_web_view_set_default_font_size() を使ってください。


ページ内検索

ページ内の文字列を検索し、一致箇所をハイライトします。

シグネチャ:

void blink_web_view_find_in_page(BlinkWebView* web_view,
                                 const char* search_text,
                                 gboolean forward,
                                 gboolean match_case,
                                 gboolean find_next);
引数 意味
search_text 検索する文字列
forward TRUE で前方 (文書の末尾方向) へ検索
match_case TRUE で大文字小文字を区別
find_next TRUE で前回の検索を継続し、次の一致へ移動

最初の呼び出しは find_next=FALSE で行い、「次を検索」ボタンでは同じ語のまま
find_next=TRUE で呼びます。一致箇所を一巡すると先頭に戻ります。

検索を終了します。

シグネチャ:

void blink_web_view_stop_finding(BlinkWebView* web_view,
                                 gboolean clear_selection);

clear_selectionTRUE にするとハイライトを消します。FALSE にすると
現在の一致箇所を選択状態のまま残します (「検索を閉じても見つけた場所は
分かるようにしたい」場合はこちら)。


ズーム

表示倍率を設定します。1.0 が 100%、1.5 が 150%、0.5 が 50% です。

シグネチャ:

void blink_web_view_set_zoom_level(BlinkWebView* web_view, gdouble zoom_level);

現在の表示倍率を返します。

シグネチャ:

gdouble blink_web_view_get_zoom_level(BlinkWebView* web_view);

「拡大」「縮小」ボタンの実装例 (現在値に対する相対変更):

static void on_zoom_in(GtkButton *button, gpointer user_data) {
    BlinkWebView *view = BLINK_WEB_VIEW(user_data);
    gdouble z = blink_web_view_get_zoom_level(view);
    blink_web_view_set_zoom_level(view, z + 0.1);
}

完全な例: 検索バー付きビューア

#include <blink_gtk/blink_gtk.h>
#include <gtk/gtk.h>

static BlinkWebView *g_view = NULL;
static GtkEntry *g_entry = NULL;

static void on_search(GtkButton *button, gpointer user_data) {
    gboolean is_next = GPOINTER_TO_INT(user_data);
    const char *text = gtk_editable_get_text(GTK_EDITABLE(g_entry));
    if (text && *text)
        blink_web_view_find_in_page(g_view, text, TRUE, FALSE, is_next);
}

int main(int argc, char **argv) {
    blink_gtk_init(&argc, &argv);

    GtkWidget *win = gtk_window_new();
    gtk_window_set_default_size(GTK_WINDOW(win), 1024, 768);

    GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    GtkWidget *bar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);

    GtkWidget *entry = gtk_entry_new();
    GtkWidget *find = gtk_button_new_with_label("検索");
    GtkWidget *next = gtk_button_new_with_label("次へ");
    gtk_widget_set_hexpand(entry, TRUE);
    gtk_box_append(GTK_BOX(bar), entry);
    gtk_box_append(GTK_BOX(bar), find);
    gtk_box_append(GTK_BOX(bar), next);

    GtkWidget *view = blink_web_view_new();
    gtk_widget_set_vexpand(view, TRUE);
    gtk_box_append(GTK_BOX(box), bar);
    gtk_box_append(GTK_BOX(box), view);
    gtk_window_set_child(GTK_WINDOW(win), box);

    g_view = BLINK_WEB_VIEW(view);
    g_entry = GTK_ENTRY(entry);
    g_signal_connect(find, "clicked", G_CALLBACK(on_search), GINT_TO_POINTER(0));
    g_signal_connect(next, "clicked", G_CALLBACK(on_search), GINT_TO_POINTER(1));

    gtk_window_present(GTK_WINDOW(win));
    blink_web_view_load_uri(g_view, "https://example.com/");

    return blink_gtk_run_main_loop();
}

ビルド:

cc -o search-viewer search-viewer.c $(pkg-config --cflags --libs blinkgtk-0.1)

関連

変更履歴

バージョン 変更
v1.1.0 本ページ初版 (API 自体は v1.0 系から提供)