### ----------------------------------------------------
### -- Gnome::Gtk3
### -- Licenses: Artistic-2.0
### -- Authors: Marcel Timmerman
### -- File: Design-docs/notes.md
### ----------------------------------------------------

[toc]


# Snippits
1) Signature test
```
sub xx ( Callable $h where .signature ~~ :(|c), *@x ) {
    say $h(|@x);
};

my Callable $hh = -> Int $x {
    $x + 1
};

xx( $hh, 41);
```
2) Signature test
```
my Signature $sh1 = :( Int --> Int );
my Signature $sh2 = :( Str --> Int );

my Sub $hh1 = sub ( Int $x --> Int ) { $x + 1 };
my Sub $hh2 = sub ( Str $x --> Int ) { $x.Int - 1 };

sub xx ( Callable $h where .signature ~~ any($sh1,$sh2), *@x ) {
    say $h(|@x);
};

xx( $hh1, 41);
xx( $hh2, '41');
```
3) Signature test
```
my Signature $x = :( Int $i );
my Sub $s = sub (@ ($x)) { say $i; };
```
4) Test for use in GSignal
```
# signal-type: widget, data
my Signature $signal-type = :( N-GObject, OpaquePointer );
# event-type: widget, event, data
my Signature $event-type = :( N-GObject, GdkEvent, OpaquePointer );
my @handler-types = $signal-type, $event-type,;

sub g_signal_connect (
  N-GObject $widget, Str $signal,
  Callable $handler where .signature ~~ any(@handler-types),
  OpaquePointer
) {
  g_signal_connect_data_wd(
    $widget, $signal, $handler, OpaquePointer, Any, 0
  );
}

# can be called the same as g_signal_connect because of its defaults
sub g_signal_connect_data(
  N-GObject $widget, Str $signal,
  Callable $handler where .signature ~~ any(@handler-types),
  OpaquePointer $data,
  Callable $destroy_data
           where .signature ~~ :( OpaquePointer, OpaquePointer ) = Any,
  Int $connect_flags = 0
) returns Int
  is native(&gobject-lib)
  { * }
```


# Links

https://linuxhint.com/opencv-face-recognition/
http://www.linux-magazine.com/Issues/2018/214/Programming-Snapshot-Facial-Recognition
https://www.omgubuntu.co.uk/2018/06/new-shotwell-update-face-detection
https://userbase.kde.org/Digikam/Face_Recognition
https://github.com/ageitgey/face_recognition
https://cmusatyalab.github.io/openface/
http://torch.ch/
http://openbiometrics.org/docs/index.html

https://developer.gnome.org/gnome-devel-demos/stable/c.html.en
https://developer.gnome.org/gdk3/stable/gdk3-Event-Structures.html

https://developer.gnome.org/gtk-tutorial/stable/x2431.html

[//]: # (References)


