Skip to content

Commit 5243a87

Browse files
Add register.rkt eyes and open terminal (#72)
* add register.rkt add from https://github.com/Metaxal/quickscript-extra/blob/master/register.rkt * Add files via upload * Rename open-terminal.rkt to scripts/open-terminal.rkt * Rename eyes.rkt to scripts/eyes.rkt
1 parent 1ada405 commit 5243a87

3 files changed

Lines changed: 130 additions & 0 deletions

File tree

register.rkt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#lang racket/base
2+
(require (for-syntax racket/base
3+
racket/runtime-path
4+
(only-in quickscript/library add-third-party-script-directory!)))
5+
6+
;; This is going to be called during setup and will automatically
7+
;; register quickscript-extra in quickscript's library.
8+
(begin-for-syntax
9+
(define-runtime-path script-dir "scripts")
10+
(add-third-party-script-directory! script-dir))

scripts/eyes.rkt

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#lang racket/gui
2+
(require quickscript)
3+
4+
;;; Author: Stephen De Gabrielle https://github.com/spdegabrielle
5+
;;; License: [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) or
6+
;;; [MIT license](http://opensource.org/licenses/MIT) at your option.
7+
;;; From: https://github.com/Quickscript-Competiton/July2020entries/issues/7
8+
9+
(script-help-string "Eyeballs are following you.")
10+
11+
(define (eye-canvas-mixin %)
12+
(class %
13+
(init-field (eye-diameter 100))
14+
(inherit refresh get-dc client->screen screen->client get-top-level-window)
15+
(define pupil-diameter (/ eye-diameter 3))
16+
(define pupil-r (* 1/2 pupil-diameter))
17+
(define r (/ eye-diameter 2))
18+
19+
(define/override (on-paint)
20+
;save the state
21+
(define dc (get-dc))
22+
(define pen (send dc get-pen))
23+
(define brush (send dc get-brush))
24+
(define f (get-top-level-window))
25+
;; now draw the eye
26+
(send dc set-pen "black" 1 'solid)
27+
(send dc set-brush "white" 'solid)
28+
(send dc draw-ellipse 0 0 eye-diameter eye-diameter)
29+
30+
;As for the magic number, the difference between
31+
;get-current-mouse-state and client->screen may be
32+
;get-display-left-top-inset.
33+
34+
(define-values (not-used-x fsy) (get-display-left-top-inset))
35+
36+
37+
(define-values (ms l) (get-current-mouse-state))
38+
(define mouse-sx (round (send ms get-x))) ; screen coords
39+
(define mouse-sy (+ fsy (round (send ms get-y))))
40+
(define-values (mcx mcy) (send this screen->client mouse-sx mouse-sy))
41+
(define-values (screen-eye-x screen-eye-y) (client->screen r r))
42+
(define Δx (- screen-eye-x mouse-sx))
43+
(define Δy (- screen-eye-y mouse-sy))
44+
(define mag (magnitude (make-rectangular Δx Δy)))
45+
46+
(if (< mag (- r pupil-r))
47+
(begin
48+
(send dc set-brush "black" 'solid)
49+
(send dc draw-ellipse (- mcx pupil-r) (- mcy pupil-r) pupil-diameter pupil-diameter))
50+
(let ((direction (atan Δy Δx)))
51+
(define pupilΔx (- (round (* (cos direction) (* r 2/3)))))
52+
(define pupilΔy (- (round (* (sin direction) (* r 2/3)))))
53+
(define (tocentre n) (- (+ r n) pupil-r))
54+
(define px (tocentre pupilΔx))
55+
(define py (tocentre pupilΔy))
56+
(send dc set-brush "black" 'solid)
57+
(send dc draw-ellipse px py pupil-diameter pupil-diameter)))
58+
(send dc set-pen pen)
59+
(send dc set-brush brush)
60+
(super on-paint))
61+
(super-new [style '(transparent)])))
62+
63+
64+
(define-script eyes
65+
#:label "Eyes"
66+
#:menu-path ("&Games and fun")
67+
#:help-string "Eyeballs are following you."
68+
#:persistent
69+
(λ (selection)
70+
71+
(define frame (new frame% [label "Eyes"] [width 80] [height 90]))
72+
(define h (new horizontal-panel% [parent frame]))
73+
(define c (new (eye-canvas-mixin canvas%) [parent h](eye-diameter 40)))
74+
(define c2 (new (eye-canvas-mixin canvas%) [parent h](eye-diameter 40)))
75+
(send frame show #t)
76+
77+
(define t (new timer%
78+
[notify-callback (λ () (send c refresh)(send c2 refresh))]
79+
[interval 100]
80+
[just-once? #f]))
81+
#f))
82+
83+
(module+ main
84+
(define frame (new frame% [label "Eyes"] [width 80] [height 90]))
85+
(define h (new horizontal-panel% [parent frame]))
86+
(define c (new (eye-canvas-mixin canvas%) [parent h](eye-diameter 40)))
87+
(define c2 (new (eye-canvas-mixin canvas%) [parent h](eye-diameter 40)))
88+
(send frame show #t)
89+
90+
(define t (new timer%
91+
[notify-callback (λ () (send c refresh)(send c2 refresh))]
92+
[interval 100]
93+
[just-once? #f])))

scripts/open-terminal.rkt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#lang racket/base
2+
(require racket/system
3+
racket/path
4+
quickscript)
5+
6+
(script-help-string "Open a terminal in the directory of the current file.")
7+
8+
(define-script open-terminal
9+
#:label "Open terminal here"
10+
#:menu-path ("&Utils")
11+
#:os-types (unix macosx windows)
12+
(λ (str #:file f)
13+
(unless f
14+
(set! f (current-directory)))
15+
(define dir (path->string (path-only f)))
16+
(case (system-type 'os)
17+
[(unix)
18+
(system (string-append "gnome-terminal"
19+
" --working-directory=\"" dir "\""
20+
" -t \"" dir "\""
21+
"&"))]
22+
[(macosx)
23+
(system
24+
(string-append "osascript -e 'tell app \"Terminal\" to do script \"cd \\\"" dir "\\\"\"'" ))]
25+
[(windows)
26+
(shell-execute #f "cmd.exe" "" dir 'sw_shownormal)])
27+
#false))

0 commit comments

Comments
 (0)