バージョン: 1.2.0-build2
最終更新: 2026-07-29
言語: 日本語 |
表示中のページを対象にした
文字列検索(一致箇所のハイライトと巡回)と、
ズーム(表示倍率の変更・取得)の 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_selection を TRUE
にするとハイライトを消します。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 系から提供) |