diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 00000000..2a0a6832 --- /dev/null +++ b/examples/meson.build @@ -0,0 +1,8 @@ +examples_c_args = ['-DG_LOG_DOMAIN="Cog-Example"'] + +executable('viewport', + 'viewport.c', + c_args: examples_c_args, + dependencies: cogcore_dep, + install: false, +) diff --git a/examples/viewport.c b/examples/viewport.c new file mode 100644 index 00000000..69053769 --- /dev/null +++ b/examples/viewport.c @@ -0,0 +1,66 @@ +/* + * viewport.c + * Copyright (C) 2023 Igalia S.L. + * + * SPDX-License-Identifier: MIT + */ + +#include "../core/cog.h" + +typedef struct { + CogViewport *views; + gsize current_index; +} TimeoutData; + +static gboolean +on_timeout_tick(TimeoutData *data) +{ + if (++data->current_index >= cog_viewport_get_n_views(data->views)) + data->current_index = 0; + + CogView *view = cog_viewport_get_nth_view(data->views, data->current_index); + g_message("Set visible view %zu <%p>", data->current_index, view); + cog_viewport_set_visible_view(data->views, view); + + return G_SOURCE_CONTINUE; +} + +int +main(int argc, char *argv[]) +{ + if (argc < 2) { + g_printerr("Usage: %s [URL...]\n", argv[0]); + return EXIT_FAILURE; + } + + g_set_prgname("view-stack"); + cog_modules_add_directory(g_getenv("COG_MODULEDIR") ?: COG_MODULEDIR); + + g_autoptr(GError) error = NULL; + g_autoptr(CogShell) shell = cog_shell_new(g_get_prgname(), FALSE); + g_autoptr(CogPlatform) platform = cog_platform_configure(NULL, NULL, "COG", shell, &error); + if (!platform) + g_error("Cannot configure platform: %s", error->message); + + g_autoptr(GMainLoop) loop = g_main_loop_new(NULL, FALSE); + + CogViewport *viewport = cog_shell_get_viewport(shell); + + for (int i = 1; i < argc; i++) { + g_autoptr(CogView) view = cog_view_new(NULL); + cog_platform_init_web_view(platform, WEBKIT_WEB_VIEW(view)); + cog_viewport_add(viewport, view); + webkit_web_view_load_uri(WEBKIT_WEB_VIEW(view), argv[i]); + g_message("Created view %p, URI %s", view, argv[i]); + } + + TimeoutData data = { + .views = viewport, + .current_index = SIZE_MAX, + }; + g_timeout_add_seconds(3, (GSourceFunc) on_timeout_tick, &data); + on_timeout_tick(&data); + + g_main_loop_run(loop); + return EXIT_SUCCESS; +} diff --git a/meson.build b/meson.build index 91c8a34e..fc8003bd 100644 --- a/meson.build +++ b/meson.build @@ -164,6 +164,10 @@ if get_option('documentation') subdir('docs') endif +if get_option('examples') + subdir('examples') +endif + if with_programs subdir('launcher') if get_option('manpages') diff --git a/meson_options.txt b/meson_options.txt index 07bbaa51..6a21d0cf 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,6 +16,12 @@ option( value: true, description: 'build and install programs (cog, cogctl)' ) +option( + 'examples', + type: 'boolean', + value: true, + description: 'build example programs' +) option( 'wpe_api', type: 'combo',