ui.backend.gtk: use a global variable to store the icon data

It's easier than the previous code that replaced the get-icon-data word
during deployment. Also GTK support for icon.ico icons.
char-rename
Björn Lindqvist 2016-06-17 16:35:15 +02:00
parent 2c8b2d9bf5
commit ee80cb0752
5 changed files with 41 additions and 30 deletions

View File

@ -1,13 +1,6 @@
! Copyright (C) 2010 Philipp Brüschweiler ! Copyright (C) 2010 Philipp Brüschweiler
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel tools.deploy.shaker literals namespaces USING: namespaces tools.deploy.shaker ;
vocabs.loader io.pathnames io.files io.encodings.binary ;
IN: ui.backend.gtk IN: ui.backend.gtk
CONSTANT: get-icon-data deploy-vocab get vocab-icon-data icon-data set-global
$[
deploy-vocab get
dup vocab-dir "icon.png" append-path vocab-append-path
[ exists? ] keep "resource:misc/icons/Factor_128x128.png" ?
binary file-contents
]

View File

@ -1,4 +1,5 @@
USING: alien gdk.ffi gtk.ffi help.markup help.syntax kernel ; USING: alien byte-arrays gdk.ffi gtk.ffi help.markup help.syntax
kernel ;
IN: ui.backend.gtk IN: ui.backend.gtk
HELP: configure-im HELP: configure-im
@ -6,6 +7,9 @@ HELP: configure-im
{ $description "Configures the input methods of the window. Must only be run after the window has been realized." } { $description "Configures the input methods of the window. Must only be run after the window has been realized." }
{ $see-also gtk_widget_realize } ; { $see-also gtk_widget_realize } ;
HELP: icon-data
{ $var-description "Contains a " { $link byte-array } " or " { $link f } " which is the data for the icon to be used for gtk windows. The variable is updated to contain a vocab-specific icon when deploying. See " { $link "vocabs.icons" } " and 'tools.deploy.shaker.strip-gtk-icon'." } ;
HELP: on-configure HELP: on-configure
{ $values { $values
{ "win" alien } { "win" alien }

View File

@ -1,5 +1,5 @@
USING: alien.syntax classes.struct gdk.ffi kernel system tools.test USING: alien.syntax classes.struct gdk.ffi kernel sequences system
ui.backend.gtk ui.gestures ; tools.test ui.backend.gtk ui.gestures ;
IN: ui.backend.gtk.tests IN: ui.backend.gtk.tests
: gdk-key-release-event ( -- event ) : gdk-key-release-event ( -- event )
@ -59,3 +59,7 @@ os linux? [
gdk-space-key-press-event key-event>gesture gdk-space-key-press-event key-event>gesture
] unit-test ] unit-test
] when ] when
{ 9854 } [
"gpu.demos.bunny" vocab-icon-data length
] unit-test

View File

@ -1,16 +1,15 @@
! Copyright (C) 2010, 2011 Anton Gorenko, Philipp Bruschweiler. ! Copyright (C) 2010, 2011 Anton Gorenko, Philipp Bruschweiler.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.accessors alien.c-types alien.data USING: accessors alien.accessors alien.c-types alien.data
alien.strings arrays assocs classes.struct combinators alien.strings arrays assocs classes.struct combinators continuations
continuations destructors environment gdk.ffi gdk.gl.ffi destructors environment gdk.ffi gdk.gl.ffi gdk.pixbuf.ffi glib.ffi
gdk.pixbuf.ffi glib.ffi gobject-introspection.standard-types gobject-introspection.standard-types gobject.ffi gtk.ffi gtk.gl.ffi
gobject.ffi gtk.ffi gtk.gl.ffi io.encodings.binary io.encodings.binary io.encodings.utf8 io.files io.pathnames kernel
io.encodings.utf8 io.files kernel libc literals locals math libc literals locals math math.bitwise math.vectors namespaces
math.bitwise math.vectors namespaces sequences strings system sequences strings system threads ui ui.backend
threads ui ui.backend ui.backend.gtk.input-methods ui.backend.gtk.input-methods ui.backend.gtk.io ui.clipboards
ui.backend.gtk.io ui.clipboards ui.event-loop ui.gadgets ui.event-loop ui.gadgets ui.gadgets.private ui.gadgets.worlds
ui.gadgets.private ui.gadgets.worlds ui.gestures ui.gestures ui.pixel-formats ui.pixel-formats.private ui.private
ui.pixel-formats ui.pixel-formats.private ui.private
vocabs.loader ; vocabs.loader ;
IN: ui.backend.gtk IN: ui.backend.gtk
@ -215,15 +214,25 @@ CONSTANT: action-key-codes
: on-focus-out ( win event user-data -- ? ) : on-focus-out ( win event user-data -- ? )
2drop window unfocus-world t ; 2drop window unfocus-world t ;
! This word gets replaced when deploying. See 'Vocabulary icons' CONSTANT: default-icon-path "resource:misc/icons/Factor_128x128.png"
! in the docs and tools.deploy.shaker.gtk-icon
: get-icon-data ( -- byte-array/f ) : default-icon-data ( -- byte-array/f )
[ [
"resource:misc/icons/Factor_128x128.png" binary file-contents default-icon-path binary file-contents
] [ drop f ] recover ; ] [ drop f ] recover ;
SYMBOL: icon-data
icon-data [ default-icon-data ] initialize
: vocab-icon-data ( vocab-name -- byte-array )
dup vocab-dir { "icon.png" "icon.ico" } [
append-path vocab-append-path
] 2with map default-icon-path suffix
[ exists? ] find nip binary file-contents ;
: load-icon ( -- ) : load-icon ( -- )
get-icon-data [ icon-data get [
[ [
data>GInputStream &g_object_unref data>GInputStream &g_object_unref
GInputStream>GdkPixbuf gtk_window_set_default_icon GInputStream>GdkPixbuf gtk_window_set_default_icon

View File

@ -30,10 +30,11 @@ ARTICLE: "vocabs.roots" "Vocabulary roots"
ARTICLE: "vocabs.icons" "Vocabulary icons" ARTICLE: "vocabs.icons" "Vocabulary icons"
"An icon file representing the vocabulary can be provided for use by " { $link "tools.deploy" } ". If any of the following files exist inside the vocabulary directory, they will be used as icons when the application is deployed." "An icon file representing the vocabulary can be provided for use by " { $link "tools.deploy" } ". If any of the following files exist inside the vocabulary directory, they will be used as icons when the application is deployed."
{ $list { $list
{ { $snippet "icon.ico" } " on Windows" } { { $snippet "icon.ico" } " on Windows and Linux" }
{ { $snippet "icon.icns" } " on MacOS X" } { { $snippet "icon.icns" } " on MacOS X" }
{ { $snippet "icon.png" } " on Linux and *BSD" } { { $snippet "icon.png" } " on Linux" }
} ; }
"The icon file will be embedded in the vocab's image file." ;
ARTICLE: "vocabs.loader" "Vocabulary loader" ARTICLE: "vocabs.loader" "Vocabulary loader"
"The " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } " words load vocabularies using the vocabulary loader. The vocabulary loader is implemented in the " { $vocab-link "vocabs.loader" } " vocabulary." "The " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } " words load vocabularies using the vocabulary loader. The vocabulary loader is implemented in the " { $vocab-link "vocabs.loader" } " vocabulary."