From 8c61b874b7c471ace734d0b2b87abdf2ae6b9ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Br=C3=BCschweiler?= Date: Mon, 26 Jul 2010 21:11:53 +0200 Subject: [PATCH] ui.backend.gtk: load icon data directly into factor.image when deploying, no io is needed --- basis/gdk/pixbuf/ffi/ffi.factor | 13 ++++++- basis/images/gtk/gtk.factor | 23 ++++------- basis/tools/deploy/shaker/shaker.factor | 8 ++++ .../tools/deploy/shaker/strip-gtk-icon.factor | 13 +++++++ basis/tools/deploy/unix/unix.factor | 18 ++------- basis/ui/backend/gtk/gtk.factor | 36 +++++++++--------- basis/ui/backend/gtk/icon.png | Bin 7299 -> 0 bytes 7 files changed, 62 insertions(+), 49 deletions(-) create mode 100644 basis/tools/deploy/shaker/strip-gtk-icon.factor delete mode 100644 basis/ui/backend/gtk/icon.png diff --git a/basis/gdk/pixbuf/ffi/ffi.factor b/basis/gdk/pixbuf/ffi/ffi.factor index a87ca77c3b..38959c9004 100644 --- a/basis/gdk/pixbuf/ffi/ffi.factor +++ b/basis/gdk/pixbuf/ffi/ffi.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2009 Anton Gorenko. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.libraries combinators kernel system -gobject-introspection gio.ffi glib.ffi gmodule.ffi gobject.ffi ; +USING: alien alien.data alien.libraries alien.syntax +combinators gio.ffi glib.ffi gmodule.ffi gobject-introspection +gobject.ffi kernel libc sequences system ; EXCLUDE: alien.c-types => pointer ; IN: gdk.pixbuf.ffi @@ -15,3 +16,11 @@ IN: gdk.pixbuf.ffi GIR: vocab:gdk/pixbuf/GdkPixbuf-2.0.gir +: data>GInputStream ( data -- GInputStream ) + [ malloc-byte-array &free ] [ length ] bi + f g_memory_input_stream_new_from_data ; + +: GInputStream>GdkPixbuf ( GInputStream -- GdkPixbuf ) + f { { pointer: GError initial: f } } + [ gdk_pixbuf_new_from_stream ] with-out-parameters + handle-GError ; diff --git a/basis/images/gtk/gtk.factor b/basis/images/gtk/gtk.factor index e08ac996ad..4957a4d216 100644 --- a/basis/images/gtk/gtk.factor +++ b/basis/images/gtk/gtk.factor @@ -1,10 +1,9 @@ ! Copyright (C) 2010 Philipp Brüschweiler. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien.c-types alien.data alien.strings -alien.syntax arrays classes.struct combinators destructors -gdk.pixbuf.ffi gio.ffi glib.ffi gobject.ffi grouping images -images.loader io io.encodings.utf8 -kernel libc locals math sequences specialized-arrays ; +USING: accessors alien.c-types alien.data arrays combinators +destructors gdk.pixbuf.ffi gobject.ffi grouping images +images.loader io kernel locals math sequences +specialized-arrays ; IN: images.gtk SPECIALIZED-ARRAY: uchar @@ -20,15 +19,6 @@ SINGLETON: gtk-image GInputStream ( data -- GInputStream ) - [ malloc-byte-array &free ] [ length ] bi - f g_memory_input_stream_new_from_data &g_object_unref ; - -: GInputStream>GdkPixbuf ( GInputStream -- GdkPixbuf ) - f { { pointer: GError initial: f } } - [ gdk_pixbuf_new_from_stream ] with-out-parameters - handle-GError &g_object_unref ; - : image-data ( GdkPixbuf -- data ) { [ gdk_pixbuf_get_pixels ] @@ -72,6 +62,7 @@ PRIVATE> M: gtk-image stream>image drop [ - stream-contents data>GInputStream - GInputStream>GdkPixbuf GdkPixbuf>image + stream-contents data>GInputStream &g_object_unref + GInputStream>GdkPixbuf &g_object_unref + GdkPixbuf>image ] with-destructors ; diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index 941b3e07f2..e74bfda3ce 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -93,6 +93,13 @@ IN: tools.deploy.shaker run-file ] when ; +: strip-gtk-icon ( -- ) + "ui.backend.gtk" vocab [ + "Stripping GTK icon loading code" show + "vocab:tools/deploy/shaker/strip-gtk-icon.factor" + run-file + ] when ; + : strip-specialized-arrays ( -- ) strip-dictionary? "specialized-arrays" vocab and [ "Stripping specialized arrays" show @@ -534,6 +541,7 @@ SYMBOL: deploy-vocab strip-destructors strip-call strip-cocoa + strip-gtk-icon strip-debugger strip-ui-error-hook strip-specialized-arrays diff --git a/basis/tools/deploy/shaker/strip-gtk-icon.factor b/basis/tools/deploy/shaker/strip-gtk-icon.factor new file mode 100644 index 0000000000..c472b3e020 --- /dev/null +++ b/basis/tools/deploy/shaker/strip-gtk-icon.factor @@ -0,0 +1,13 @@ +! Copyright (C) 2010 Philipp Brüschweiler +! See http://factorcode.org/license.txt for BSD license. +USING: kernel tools.deploy.shaker literals namespaces +vocabs.loader io.pathnames io.files io.encodings.binary ; +IN: ui.backend.gtk + +CONSTANT: get-icon-data + $[ + deploy-vocab get + dup vocab-dir "icon.png" append-path vocab-append-path + [ exists? ] keep "resource:misc/icons/Factor_48x48.png" ? + binary file-contents + ] diff --git a/basis/tools/deploy/unix/unix.factor b/basis/tools/deploy/unix/unix.factor index ba7dd4d95e..95abb0d875 100644 --- a/basis/tools/deploy/unix/unix.factor +++ b/basis/tools/deploy/unix/unix.factor @@ -1,22 +1,12 @@ ! Copyright (C) 2008 James Cash ! See http://factorcode.org/license.txt for BSD license. -USING: io io.backend io.directories io.files io.files.info.unix -io.pathnames kernel namespaces sequences system -tools.deploy.backend tools.deploy.config -tools.deploy.config.editor vocabs.loader vocabs.metadata ; +USING: io io.backend io.directories io.files.info.unix kernel +namespaces sequences system tools.deploy.backend +tools.deploy.config tools.deploy.config.editor ; IN: tools.deploy.unix -: used-icon ( vocab -- ico ) - dup vocab-dir "icon.png" append-path vocab-append-path - [ exists? ] keep "vocab:ui/backend/gtk/icon.png" ? ; - -: copy-icon ( vocab bundle-name -- ) - [ used-icon ] - [ "ui/backend/gtk/icon.png" append-path ] bi* - copy-file ; - : create-app-dir ( vocab bundle-name -- vm ) - [ copy-vm ] [ copy-icon ] 2bi + copy-vm dup OCT: 755 set-file-permissions ; : bundle-name ( -- str ) diff --git a/basis/ui/backend/gtk/gtk.factor b/basis/ui/backend/gtk/gtk.factor index da74a40a88..c5b1ff9eeb 100644 --- a/basis/ui/backend/gtk/gtk.factor +++ b/basis/ui/backend/gtk/gtk.factor @@ -1,16 +1,17 @@ ! Copyright (C) 2010 Anton Gorenko, Philipp Brüschweiler. ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien.accessors alien.c-types alien.data -alien.strings alien.syntax arrays assocs classes.struct -command-line destructors gdk.ffi gdk.gl.ffi glib.ffi +alien.strings arrays assocs classes.struct command-line +destructors gdk.ffi gdk.gl.ffi gdk.pixbuf.ffi glib.ffi gobject.ffi gtk.ffi gtk.gl.ffi io.backend -io.backend.unix.multiplexers io.encodings.utf8 io.thread kernel -libc literals locals math math.bitwise math.order math.vectors -namespaces sequences strings system threads ui ui.backend -ui.clipboards ui.commands ui.event-loop ui.gadgets -ui.gadgets.editors ui.gadgets.menus ui.gadgets.private -ui.gadgets.worlds ui.gestures ui.pixel-formats -ui.pixel-formats.private ui.private ; +io.backend.unix.multiplexers io.encodings.binary +io.encodings.utf8 io.files io.thread kernel libc literals +locals math math.bitwise math.order math.vectors namespaces +sequences strings system threads ui ui.backend ui.clipboards +ui.commands ui.event-loop ui.gadgets ui.gadgets.editors +ui.gadgets.menus ui.gadgets.private ui.gadgets.worlds +ui.gestures ui.pixel-formats ui.pixel-formats.private +ui.private ; IN: ui.backend.gtk SINGLETON: gtk-ui-backend @@ -268,15 +269,16 @@ SYMBOL: next-timeout f g_source_attach drop nano-count next-timeout set-global ; +! This word gets replaced when deploying. See 'Vocabulary icons' +! in the docs and tools.deploy.shaker.gtk-icon +: get-icon-data ( -- byte-array ) + "resource:misc/icons/Factor_48x48.png" binary file-contents ; + : load-icon ( -- ) - ! This file is not in a resource.txt because it can be - ! overwritten when deploying. See 'Vocabulary icons' - ! in the docs. - "vocab:ui/backend/gtk/icon.png" - normalize-path utf8 string>alien - { { pointer: GError initial: f } } - [ gtk_window_set_default_icon_from_file ] with-out-parameters - handle-GError drop ; + get-icon-data [ + data>GInputStream &g_object_unref + GInputStream>GdkPixbuf gtk_window_set_default_icon + ] with-destructors ; M: gtk-ui-backend (with-ui) [ diff --git a/basis/ui/backend/gtk/icon.png b/basis/ui/backend/gtk/icon.png deleted file mode 100644 index a1da637d2100932d651e0dfb10d5212c869f8116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7299 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