refactor: use stubs for gdk-pixbuf dependency (#34077)
* refactor: use stubs for gdk-pixbuf dependency * Adjust build file * Add includes * Merge gdk_pixbuf stubs into gtk stubs * Split pixbuf sigs into own file again * Add initialization check * Apply PR feedback
This commit is contained in:
parent
b3ec0a801a
commit
999a225edb
8 changed files with 44 additions and 11 deletions
5
BUILD.gn
5
BUILD.gn
|
@ -87,7 +87,10 @@ if (is_linux) {
|
||||||
# implementation. In future, this file can be extended to contain
|
# implementation. In future, this file can be extended to contain
|
||||||
# gtk4 stubs to switch gtk version in runtime.
|
# gtk4 stubs to switch gtk version in runtime.
|
||||||
generate_stubs("electron_gtk_stubs") {
|
generate_stubs("electron_gtk_stubs") {
|
||||||
sigs = [ "shell/browser/ui/electron_gtk.sigs" ]
|
sigs = [
|
||||||
|
"shell/browser/ui/electron_gdk_pixbuf.sigs",
|
||||||
|
"shell/browser/ui/electron_gtk.sigs",
|
||||||
|
]
|
||||||
extra_header = "shell/browser/ui/electron_gtk.fragment"
|
extra_header = "shell/browser/ui/electron_gtk.fragment"
|
||||||
output_name = "electron_gtk_stubs"
|
output_name = "electron_gtk_stubs"
|
||||||
public_deps = [ "//ui/gtk:gtk_config" ]
|
public_deps = [ "//ui/gtk:gtk_config" ]
|
||||||
|
|
|
@ -1,16 +1,28 @@
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: deepak1556 <hop2deep@gmail.com>
|
From: deepak1556 <hop2deep@gmail.com>
|
||||||
Date: Thu, 7 Apr 2022 20:30:16 +0900
|
Date: Thu, 7 Apr 2022 20:30:16 +0900
|
||||||
Subject: Make gtk::GetLibGtk public
|
Subject: Make gtk::GetLibGtk and gtk::GetLibGdkPixbuf public
|
||||||
|
|
||||||
Allows embedders to get a handle to the gtk library
|
Allows embedders to get a handle to the gtk and
|
||||||
already loaded in the process.
|
gdk_pixbuf libraries already loaded in the process.
|
||||||
|
|
||||||
diff --git a/ui/gtk/gtk_compat.cc b/ui/gtk/gtk_compat.cc
|
diff --git a/ui/gtk/gtk_compat.cc b/ui/gtk/gtk_compat.cc
|
||||||
index b5c7af5bdb93b320f95252d35d2d76bae7f8c445..40b706ed7cde206e98274025148604760b7477f9 100644
|
index b5c7af5bdb93b320f95252d35d2d76bae7f8c445..65b097cfab72b92f301968715eb218ef0e468567 100644
|
||||||
--- a/ui/gtk/gtk_compat.cc
|
--- a/ui/gtk/gtk_compat.cc
|
||||||
+++ b/ui/gtk/gtk_compat.cc
|
+++ b/ui/gtk/gtk_compat.cc
|
||||||
@@ -86,12 +86,6 @@ void* GetLibGtk4(bool check = true) {
|
@@ -66,11 +66,6 @@ void* GetLibGio() {
|
||||||
|
return libgio;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void* GetLibGdkPixbuf() {
|
||||||
|
- static void* libgdk_pixbuf = DlOpen("libgdk_pixbuf-2.0.so.0");
|
||||||
|
- return libgdk_pixbuf;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
void* GetLibGdk3() {
|
||||||
|
static void* libgdk3 = DlOpen("libgdk-3.so.0");
|
||||||
|
return libgdk3;
|
||||||
|
@@ -86,12 +81,6 @@ void* GetLibGtk4(bool check = true) {
|
||||||
return libgtk4;
|
return libgtk4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,10 +35,15 @@ index b5c7af5bdb93b320f95252d35d2d76bae7f8c445..40b706ed7cde206e9827402514860476
|
||||||
bool LoadGtk3() {
|
bool LoadGtk3() {
|
||||||
if (!GetLibGtk3(false))
|
if (!GetLibGtk3(false))
|
||||||
return false;
|
return false;
|
||||||
@@ -134,6 +128,12 @@ gfx::Insets InsetsFromGtkBorder(const GtkBorder& border) {
|
@@ -134,6 +123,17 @@ gfx::Insets InsetsFromGtkBorder(const GtkBorder& border) {
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
+void* GetLibGdkPixbuf() {
|
||||||
|
+ static void* libgdk_pixbuf = DlOpen("libgdk_pixbuf-2.0.so.0");
|
||||||
|
+ return libgdk_pixbuf;
|
||||||
|
+}
|
||||||
|
+
|
||||||
+void* GetLibGtk() {
|
+void* GetLibGtk() {
|
||||||
+ if (GtkCheckVersion(4))
|
+ if (GtkCheckVersion(4))
|
||||||
+ return GetLibGtk4();
|
+ return GetLibGtk4();
|
||||||
|
@ -37,13 +54,16 @@ index b5c7af5bdb93b320f95252d35d2d76bae7f8c445..40b706ed7cde206e9827402514860476
|
||||||
static bool loaded = LoadGtkImpl();
|
static bool loaded = LoadGtkImpl();
|
||||||
return loaded;
|
return loaded;
|
||||||
diff --git a/ui/gtk/gtk_compat.h b/ui/gtk/gtk_compat.h
|
diff --git a/ui/gtk/gtk_compat.h b/ui/gtk/gtk_compat.h
|
||||||
index 57e55b9e749b43d327deff449a530e1f435a8e8b..2245974f91be4a691d82f54b55e12e44ae2000c5 100644
|
index 57e55b9e749b43d327deff449a530e1f435a8e8b..37720be9e393d192b3b7db13a007431a9ce77ddc 100644
|
||||||
--- a/ui/gtk/gtk_compat.h
|
--- a/ui/gtk/gtk_compat.h
|
||||||
+++ b/ui/gtk/gtk_compat.h
|
+++ b/ui/gtk/gtk_compat.h
|
||||||
@@ -34,6 +34,9 @@ using SkColor = uint32_t;
|
@@ -34,6 +34,12 @@ using SkColor = uint32_t;
|
||||||
|
|
||||||
namespace gtk {
|
namespace gtk {
|
||||||
|
|
||||||
|
+// Get handle to the currently loaded gdk_pixbuf library in the process.
|
||||||
|
+void* GetLibGdkPixbuf();
|
||||||
|
+
|
||||||
+// Get handle to the currently loaded gtk library in the process.
|
+// Get handle to the currently loaded gtk library in the process.
|
||||||
+void* GetLibGtk();
|
+void* GetLibGtk();
|
||||||
+
|
+
|
||||||
|
|
|
@ -371,6 +371,10 @@ void ElectronBrowserMainParts::ToolkitInitialized() {
|
||||||
electron::UninitializeElectron_gtk();
|
electron::UninitializeElectron_gtk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
electron::InitializeElectron_gdk_pixbuf(gtk::GetLibGdkPixbuf());
|
||||||
|
CHECK(electron::IsElectron_gdk_pixbufInitialized())
|
||||||
|
<< "Failed to initialize libgdk_pixbuf-2.0.so.0";
|
||||||
|
|
||||||
// Chromium does not respect GTK dark theme setting, but they may change
|
// Chromium does not respect GTK dark theme setting, but they may change
|
||||||
// in future and this code might be no longer needed. Check the Chromium
|
// in future and this code might be no longer needed. Check the Chromium
|
||||||
// issue to keep updated:
|
// issue to keep updated:
|
||||||
|
|
3
shell/browser/ui/electron_gdk_pixbuf.sigs
Normal file
3
shell/browser/ui/electron_gdk_pixbuf.sigs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
GdkPixbuf* gdk_pixbuf_new(GdkColorspace colorspace, gboolean has_alpha, int bits_per_sample, int width, int height)
|
||||||
|
GdkPixbuf* gdk_pixbuf_scale_simple(const GdkPixbuf* src, int dest_width, int dest_height, GdkInterpType interp_type)
|
||||||
|
guchar* gdk_pixbuf_get_pixels(const GdkPixbuf* pixbuf)
|
|
@ -1 +1,2 @@
|
||||||
#include <gtk/gtk.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
|
@ -4,4 +4,4 @@ void gtk_native_dialog_show(GtkNativeDialog* self);
|
||||||
void gtk_native_dialog_hide(GtkNativeDialog* self);
|
void gtk_native_dialog_hide(GtkNativeDialog* self);
|
||||||
gint gtk_native_dialog_run(GtkNativeDialog* self);
|
gint gtk_native_dialog_run(GtkNativeDialog* self);
|
||||||
void gtk_native_dialog_destroy(GtkNativeDialog* self);
|
void gtk_native_dialog_destroy(GtkNativeDialog* self);
|
||||||
GType gtk_native_dialog_get_type(void);
|
GType gtk_native_dialog_get_type(void);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "base/no_destructor.h"
|
#include "base/no_destructor.h"
|
||||||
#include "base/strings/string_number_conversions.h"
|
#include "base/strings/string_number_conversions.h"
|
||||||
|
#include "electron/electron_gtk_stubs.h"
|
||||||
#include "third_party/skia/include/core/SkBitmap.h"
|
#include "third_party/skia/include/core/SkBitmap.h"
|
||||||
#include "third_party/skia/include/core/SkColor.h"
|
#include "third_party/skia/include/core/SkColor.h"
|
||||||
#include "third_party/skia/include/core/SkUnPreMultiply.h"
|
#include "third_party/skia/include/core/SkUnPreMultiply.h"
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "base/no_destructor.h"
|
#include "base/no_destructor.h"
|
||||||
#include "base/strings/string_util.h"
|
#include "base/strings/string_util.h"
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
|
#include "electron/electron_gtk_stubs.h"
|
||||||
#include "shell/browser/browser.h"
|
#include "shell/browser/browser.h"
|
||||||
#include "shell/browser/native_window_observer.h"
|
#include "shell/browser/native_window_observer.h"
|
||||||
#include "shell/browser/native_window_views.h"
|
#include "shell/browser/native_window_views.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue