-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
efb15e2
commit e1b1a6d
Showing
12 changed files
with
349 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
plugins { | ||
id("com.android.application") | ||
id("kotlin-android") | ||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. | ||
id("dev.flutter.flutter-gradle-plugin") | ||
} | ||
|
||
android { | ||
namespace = "com.redbrogdon.flutterflip" | ||
compileSdk = flutter.compileSdkVersion | ||
ndkVersion = flutter.ndkVersion | ||
|
||
compileOptions { | ||
sourceCompatibility = JavaVersion.VERSION_11 | ||
targetCompatibility = JavaVersion.VERSION_11 | ||
} | ||
|
||
kotlinOptions { | ||
jvmTarget = JavaVersion.VERSION_11.toString() | ||
} | ||
|
||
defaultConfig { | ||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | ||
applicationId = "com.redbrogdon.flutterflip" | ||
// You can update the following values to match your application needs. | ||
// For more information, see: https://flutter.dev/to/review-gradle-config. | ||
minSdk = flutter.minSdkVersion | ||
targetSdk = flutter.targetSdkVersion | ||
versionCode = flutter.versionCode | ||
versionName = flutter.versionName | ||
} | ||
|
||
buildTypes { | ||
release { | ||
// TODO: Add your own signing config for the release build. | ||
// Signing with the debug keys for now, so `flutter run --release` works. | ||
signingConfig = signingConfigs.getByName("debug") | ||
} | ||
} | ||
} | ||
|
||
flutter { | ||
source = "../.." | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
allprojects { | ||
repositories { | ||
google() | ||
mavenCentral() | ||
} | ||
} | ||
|
||
val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() | ||
rootProject.layout.buildDirectory.value(newBuildDir) | ||
|
||
subprojects { | ||
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) | ||
project.layout.buildDirectory.value(newSubprojectBuildDir) | ||
} | ||
subprojects { | ||
project.evaluationDependsOn(":app") | ||
} | ||
|
||
tasks.register<Delete>("clean") { | ||
delete(rootProject.layout.buildDirectory) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
pluginManagement { | ||
val flutterSdkPath = run { | ||
val properties = java.util.Properties() | ||
file("local.properties").inputStream().use { properties.load(it) } | ||
val flutterSdkPath = properties.getProperty("flutter.sdk") | ||
require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } | ||
flutterSdkPath | ||
} | ||
|
||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") | ||
|
||
repositories { | ||
google() | ||
mavenCentral() | ||
gradlePluginPortal() | ||
} | ||
} | ||
|
||
plugins { | ||
id("dev.flutter.flutter-plugin-loader") version "1.0.0" | ||
id("com.android.application") version "8.7.0" apply false | ||
id("org.jetbrains.kotlin.android") version "1.8.22" apply false | ||
} | ||
|
||
include(":app") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
cmake_minimum_required(VERSION 3.13) | ||
project(runner LANGUAGES CXX) | ||
|
||
# Define the application target. To change its name, change BINARY_NAME in the | ||
# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer | ||
# work. | ||
# | ||
# Any new source files that you add to the application should be added here. | ||
add_executable(${BINARY_NAME} | ||
"main.cc" | ||
"my_application.cc" | ||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" | ||
) | ||
|
||
# Apply the standard set of build settings. This can be removed for applications | ||
# that need different build settings. | ||
apply_standard_settings(${BINARY_NAME}) | ||
|
||
# Add preprocessor definitions for the application ID. | ||
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") | ||
|
||
# Add dependency libraries. Add any application-specific dependencies here. | ||
target_link_libraries(${BINARY_NAME} PRIVATE flutter) | ||
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) | ||
|
||
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#include "my_application.h" | ||
|
||
int main(int argc, char** argv) { | ||
g_autoptr(MyApplication) app = my_application_new(); | ||
return g_application_run(G_APPLICATION(app), argc, argv); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
#include "my_application.h" | ||
|
||
#include <flutter_linux/flutter_linux.h> | ||
#ifdef GDK_WINDOWING_X11 | ||
#include <gdk/gdkx.h> | ||
#endif | ||
|
||
#include "flutter/generated_plugin_registrant.h" | ||
|
||
struct _MyApplication { | ||
GtkApplication parent_instance; | ||
char** dart_entrypoint_arguments; | ||
}; | ||
|
||
G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) | ||
|
||
// Implements GApplication::activate. | ||
static void my_application_activate(GApplication* application) { | ||
MyApplication* self = MY_APPLICATION(application); | ||
GtkWindow* window = | ||
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); | ||
|
||
// Use a header bar when running in GNOME as this is the common style used | ||
// by applications and is the setup most users will be using (e.g. Ubuntu | ||
// desktop). | ||
// If running on X and not using GNOME then just use a traditional title bar | ||
// in case the window manager does more exotic layout, e.g. tiling. | ||
// If running on Wayland assume the header bar will work (may need changing | ||
// if future cases occur). | ||
gboolean use_header_bar = TRUE; | ||
#ifdef GDK_WINDOWING_X11 | ||
GdkScreen* screen = gtk_window_get_screen(window); | ||
if (GDK_IS_X11_SCREEN(screen)) { | ||
const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); | ||
if (g_strcmp0(wm_name, "GNOME Shell") != 0) { | ||
use_header_bar = FALSE; | ||
} | ||
} | ||
#endif | ||
if (use_header_bar) { | ||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); | ||
gtk_widget_show(GTK_WIDGET(header_bar)); | ||
gtk_header_bar_set_title(header_bar, "flutterflip"); | ||
gtk_header_bar_set_show_close_button(header_bar, TRUE); | ||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); | ||
} else { | ||
gtk_window_set_title(window, "flutterflip"); | ||
} | ||
|
||
gtk_window_set_default_size(window, 1280, 720); | ||
gtk_widget_show(GTK_WIDGET(window)); | ||
|
||
g_autoptr(FlDartProject) project = fl_dart_project_new(); | ||
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); | ||
|
||
FlView* view = fl_view_new(project); | ||
gtk_widget_show(GTK_WIDGET(view)); | ||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); | ||
|
||
fl_register_plugins(FL_PLUGIN_REGISTRY(view)); | ||
|
||
gtk_widget_grab_focus(GTK_WIDGET(view)); | ||
} | ||
|
||
// Implements GApplication::local_command_line. | ||
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { | ||
MyApplication* self = MY_APPLICATION(application); | ||
// Strip out the first argument as it is the binary name. | ||
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); | ||
|
||
g_autoptr(GError) error = nullptr; | ||
if (!g_application_register(application, nullptr, &error)) { | ||
g_warning("Failed to register: %s", error->message); | ||
*exit_status = 1; | ||
return TRUE; | ||
} | ||
|
||
g_application_activate(application); | ||
*exit_status = 0; | ||
|
||
return TRUE; | ||
} | ||
|
||
// Implements GApplication::startup. | ||
static void my_application_startup(GApplication* application) { | ||
//MyApplication* self = MY_APPLICATION(object); | ||
|
||
// Perform any actions required at application startup. | ||
|
||
G_APPLICATION_CLASS(my_application_parent_class)->startup(application); | ||
} | ||
|
||
// Implements GApplication::shutdown. | ||
static void my_application_shutdown(GApplication* application) { | ||
//MyApplication* self = MY_APPLICATION(object); | ||
|
||
// Perform any actions required at application shutdown. | ||
|
||
G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); | ||
} | ||
|
||
// Implements GObject::dispose. | ||
static void my_application_dispose(GObject* object) { | ||
MyApplication* self = MY_APPLICATION(object); | ||
g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); | ||
G_OBJECT_CLASS(my_application_parent_class)->dispose(object); | ||
} | ||
|
||
static void my_application_class_init(MyApplicationClass* klass) { | ||
G_APPLICATION_CLASS(klass)->activate = my_application_activate; | ||
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; | ||
G_APPLICATION_CLASS(klass)->startup = my_application_startup; | ||
G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; | ||
G_OBJECT_CLASS(klass)->dispose = my_application_dispose; | ||
} | ||
|
||
static void my_application_init(MyApplication* self) {} | ||
|
||
MyApplication* my_application_new() { | ||
// Set the program name to the application ID, which helps various systems | ||
// like GTK and desktop environments map this running application to its | ||
// corresponding .desktop file. This ensures better integration by allowing | ||
// the application to be recognized beyond its binary name. | ||
g_set_prgname(APPLICATION_ID); | ||
|
||
return MY_APPLICATION(g_object_new(my_application_get_type(), | ||
"application-id", APPLICATION_ID, | ||
"flags", G_APPLICATION_NON_UNIQUE, | ||
nullptr)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
#ifndef FLUTTER_MY_APPLICATION_H_ | ||
#define FLUTTER_MY_APPLICATION_H_ | ||
|
||
#include <gtk/gtk.h> | ||
|
||
G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, | ||
GtkApplication) | ||
|
||
/** | ||
* my_application_new: | ||
* | ||
* Creates a new Flutter-based application. | ||
* | ||
* Returns: a new #MyApplication. | ||
*/ | ||
MyApplication* my_application_new(); | ||
|
||
#endif // FLUTTER_MY_APPLICATION_H_ |
Oops, something went wrong.