From baa0e1268dbcdf45cbbdd70b363b289a9d1478fc Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Sat, 12 Jan 2013 02:11:29 -0500 Subject: [PATCH] Do the conventional DMG layout. Note that this requires a running Finder. Note also that the process involves attaching the created DMG which means that it might be problematic with a machine that might have a volume by the same name already attached (since the applescript uses the volume name, which is not required to be unique). (cherry picked from commit b5618b7d139d1d30d2a82a681255bc185cb6dcc7) --- collects/meta/build/build | 64 +++++- collects/meta/build/dmg/128x128-arrow.png | Bin 0 -> 5007 bytes .../meta/build/dmg/disk-image-background.rkt | 194 ++++++++++++++++++ collects/meta/build/dmg/racket-rising.png | Bin 0 -> 16255 bytes 4 files changed, 248 insertions(+), 10 deletions(-) create mode 100644 collects/meta/build/dmg/128x128-arrow.png create mode 100644 collects/meta/build/dmg/disk-image-background.rkt create mode 100644 collects/meta/build/dmg/racket-rising.png diff --git a/collects/meta/build/build b/collects/meta/build/build index 01e658a5db..5117deabbe 100755 --- a/collects/meta/build/build +++ b/collects/meta/build/build @@ -166,6 +166,8 @@ sitemapdir="$scriptdir/sitemap" # platform-installer stuff, all relative to the racket tree nsisdir="$scriptdir/nsis" +dmgdir="$scriptdir/dmg" +dmgbackground="$dmgdir/racket-rising.png" unixinstallerdir="$scriptdir/unix-installer" unixpathcheckscript="$unixinstallerdir/check-install-paths" unixinstallerscript="$unixinstallerdir/installer-header" @@ -1713,12 +1715,13 @@ tgz_to_zip() { _rm "$tmpdir/tgz-to-zip-$$" } #---------------------------------------- -make_dmg() { # inputs: dir, dmg - local srcdir="$1" tgtdmg="$2"; shift 2 +make_dmg() { # inputs: dir, dmg, bg-image + local srcdir="$1" tgtdmg="$2" tmpbg="$3"; shift 3 local tmpdmg="${tgtdmg%.dmg}-tmp.dmg" local src="$(basename "$srcdir")" local myself="$(id -nu):$(id -ng)" show "Making \"$tgtdmg\" from \"$srcdir\"" + _cp "$tmpbg" "$srcdir" _cd "$(dirname "$srcdir")" _run sudo rm -f "$tgtdmg" "$tmpdmg" # It should be possible to create dmgs normally, but they'd be created with @@ -1732,21 +1735,59 @@ make_dmg() { # inputs: dir, dmg # -mode 555 -volname "$src" -srcfolder "$src" "$tgtdmg" # so: [1] create an uncompressed image _run sudo hdiutil create -format UDRW -ov \ - -mode 555 -volname "$src" -srcfolder "$src" "$tmpdmg" + -mode 755 -volname "$src" -srcfolder "$src" "$tmpdmg" # [2] remove the source tree _run sudo rm -rf "$src" - # [3] create the compressed image from the uncompressed image + # [3] do the expected dmg layout (see below) + easy_dmg_layout "$tmpdmg" "$src" "$(basename "$tmpbg")" + # [4] create the compressed image from the uncompressed image _run sudo hdiutil convert -format UDZO -imagekey zlib-level=9 -ov \ "$tmpdmg" -o "$tgtdmg" - # [4] remove the uncompressed image + # [5] remove the uncompressed image _run sudo chown "$myself" "$tgtdmg" "$tmpdmg" _rm "$tmpdmg" } +easy_dmg_layout() { + local tmpdmg="$1" volname="$2" bg="$3"; shift 3 + show "Mounting image for layout" + local vol_dev="$( + sudo hdiutil attach -readwrite -noverify -noautoopen "$tmpdmg" \ + | grep '/dev/' | head -1 | awk '{print $1}')" + show "Creating layout via Finder" + sudo /usr/bin/osascript <<-EOF + tell application "Finder" + tell disk "$volname" + open + set current view of container window to icon view + set toolbar visible of container window to false + set statusbar visible of container window to false + set bounds of container window to {320, 160, 1000, 540} + set theViewOptions to the icon view options of container window + set arrangement of theViewOptions to not arranged + set icon size of theViewOptions to 128 + set text size of theViewOptions to 16 + set background picture of theViewOptions to file "$bg" + make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} + set position of item "$volname" of container window to {170, 180} + set position of item "$bg" of container window to {900, 180} + set position of item "Applications" of container window to {500, 180} + set name of file "$bg" to ".$bg" + close + open + update without registering applications + delay 5 + close + end tell + end tell +EOF + sync; sync + _run sudo hdiutil detach "$vol_dev" +} #---------------------------------------- do_tgz_to_dmg() { - local tmptgz="$1" tmpdmg="$2" version="$3" - local pname="$4" ptype="$5" srcplatform="$6" - shift 6 + local tmptgz="$1" tmpdmg="$2" tmpbg="$3" + local version="$4" pname="$5" ptype="$6" srcplatform="$7" + shift 7 local distname="$(name_of_dist_package "$pname")" distname="$distname v$version" if [[ "$ptype" != "bin" ]]; then @@ -1760,7 +1801,7 @@ do_tgz_to_dmg() { _rm "$tmptgz" _mv "$installdir" "$distname" _cd "$tmpdir/tgz-to-dmg-$$" - make_dmg "$distname" "$tmpdmg" + make_dmg "$distname" "$tmpdmg" "$tmpbg" _cd "$savedpwd" _rm "$tmpdir/tgz-to-dmg-$$" } @@ -1768,9 +1809,12 @@ tgz_to_dmg() { local srctgz="$1" tgt="$2" pname="$3" ptype="$4" srcplatform="$5"; shift 5 local tmptgz="$tmpdir/tgz2dmg.tgz" local tmpdmg="$tmpdir/tgz2dmg.dmg" + local tmpbg="$tmpdir/bg.png" _scp "$srctgz" "${dmgmachine}:$tmptgz" + _scp "$PLTHOME/$dmgbackground" "${dmgmachine}:$tmpbg" run_part "$dmgmachine" "do_tgz_to_dmg" \ - "$tmptgz" "$tmpdmg" "$version" "$pname" "$ptype" "$srcplatform" + "$tmptgz" "$tmpdmg" "$tmpbg" \ + "$version" "$pname" "$ptype" "$srcplatform" _scp "${dmgmachine}:$tmpdmg" "$tgt.dmg" } #---------------------------------------- diff --git a/collects/meta/build/dmg/128x128-arrow.png b/collects/meta/build/dmg/128x128-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6c26d0744a7249e0960805d9d5937f958e723fc1 GIT binary patch literal 5007 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 Z{|6K|9}Tw8_zwU8002ovPDHLkV1jYAJ5vAv literal 0 HcmV?d00001 diff --git a/collects/meta/build/dmg/disk-image-background.rkt b/collects/meta/build/dmg/disk-image-background.rkt new file mode 100644 index 0000000000..438305440e --- /dev/null +++ b/collects/meta/build/dmg/disk-image-background.rkt @@ -0,0 +1,194 @@ +#lang racket/base + +(require slideshow racket/gui/base racket/runtime-path) + +(provide plt-title-background + make-plt-title-background + plt-red-color + plt-blue-color + plt-background-color + plt-lambda-color + plt-pen-color + plt-pen-style) + +(define plt-red-color (make-object color% 242 183 183)) +(define plt-blue-color (make-object color% 183 202 242)) +(define plt-background-color (make-object color% 209 220 248)) +(define plt-lambda-color (send the-color-database find-color "white")) +(define plt-pen-color "black") +(define plt-pen-style 'transparent) + +(define (with-dc-settings dc thunk) + (define alpha (send dc get-alpha)) + (define smoothing (send dc get-smoothing)) + (define pen (send dc get-pen)) + (define brush (send dc get-brush)) + (thunk) + (send* dc (set-alpha alpha) + (set-smoothing smoothing) + (set-pen pen) + (set-brush brush))) + +(define (make-plt-title-background + red-color blue-color background-color lambda-color pen-color pen-style + #:clip? [clip? #t] #:edge-cleanup-pen [edge-cleanup-pen #f]) + (define-syntax-rule (make-path cmd ...) + (let ([p (new dc-path%)]) (send* p cmd ...) p)) + (define left-lambda-path + (make-path (move-to 153 44) + (line-to 161.5 60) + (curve-to 202.5 49 230 42 245 61) + (curve-to 280.06 105.41 287.5 141 296.5 186) + (curve-to 301.12 209.08 299.11 223.38 293.96 244) + (curve-to 281.34 294.54 259.18 331.61 233.5 375) + (curve-to 198.21 434.63 164.68 505.6 125.5 564) + (line-to 135 572))) + (define left-logo-path + (make-path (append left-lambda-path) + (arc 0 0 630 630 (* 235/360 2 pi) (* 121/360 2 pi) #f))) + (define bottom-lambda-path + (make-path (move-to 135 572) + (line-to 188.5 564) + (curve-to 208.5 517 230.91 465.21 251 420) + (curve-to 267 384 278.5 348 296.5 312) + (curve-to 301.01 302.98 318 258 329 274) + (curve-to 338.89 288.39 351 314 358 332) + (curve-to 377.28 381.58 395.57 429.61 414 477) + (curve-to 428 513 436.5 540 449.5 573) + (line-to 465 580) + (line-to 529 545))) + (define bottom-logo-path + (make-path (append bottom-lambda-path) + (arc 0 0 630 630 (* 314/360 2 pi) (* 235/360 2 pi) #f))) + (define right-lambda-path + (make-path (move-to 153 44) + (curve-to 192.21 30.69 233.21 14.23 275 20) + (curve-to 328.6 27.4 350.23 103.08 364 151) + (curve-to 378.75 202.32 400.5 244 418 294) + (curve-to 446.56 375.6 494.5 456 530.5 537) + (line-to 529 545))) + (define right-logo-path + (make-path (append right-lambda-path) + (arc 0 0 630 630 (* 314/360 2 pi) (* 121/360 2 pi) #t))) + (define lambda-path ;; the lambda by itself (no circle) + (let ([p (new dc-path%)]) + (send p append left-lambda-path) + (send p append bottom-lambda-path) + (let ([t (make-object dc-path%)]) + (send t append right-lambda-path) + (send t reverse) + (send p append t)) + (send p close) + p)) + + ;; (define lambda-path + ;; (make-path (append left-lambda-path) + ;; (append bottom-lambda-path) + ;; (append right-lambda-path))) + + ;; This function draws the paths with suitable colors: + (define (paint-plt dc dx dy) + (send dc set-smoothing 'aligned) + (define old-pen (send dc get-pen)) + (define old-brush (send dc get-brush)) + (define old-clip (send dc get-clipping-region)) + (send dc set-pen pen-color 0 pen-style) + (cond [(procedure? lambda-color) + (with-dc-settings dc + (λ () (lambda-color dc) + (send dc draw-path lambda-path dx dy)))] + [lambda-color + (send* dc (set-brush lambda-color 'solid) + (draw-path lambda-path dx dy))] + [else (void)]) + ;; Draw red regions + (cond [(is-a? red-color bitmap%) + (define rgn1 (new region% [dc dc])) + (define rgn2 (new region% [dc dc])) + (send rgn1 set-path left-logo-path dx dy #;(- dx 150) #;(- dy 20)) + (send rgn2 set-path bottom-logo-path dx dy #;(- dx 150) #;(- dy 20)) + (send rgn2 union rgn1) + (send dc set-clipping-region rgn2) + ;; the left and top values of the bounding box seem to change over + ;; time, so I've just put reasonable numbers below. + (let-values ([(sw sh) (send dc get-scale)]) + (send* dc (set-scale 1 1) + (draw-bitmap red-color 220 100) + (set-scale sw sh))) + (send dc set-clipping-region old-clip) + (cleanup-edges left-logo-path dc dx dy) + (cleanup-edges bottom-logo-path dc dx dy)] + [(procedure? red-color) + (with-dc-settings dc + (λ () (red-color dc) + (send* dc (draw-path left-logo-path dx dy) + (draw-path bottom-logo-path dx dy))))] + [else (send* dc (set-brush red-color 'solid) + (draw-path left-logo-path dx dy) + (draw-path bottom-logo-path dx dy))]) + ;; Draw blue region + (cond [(is-a? blue-color bitmap%) + (define rgn (new region% [dc dc])) + (send rgn set-path right-logo-path dx dy #;(- dx 150) #;(- dy 20)) + (send dc set-clipping-region rgn) + ;; the left and top values of the bounding box seem to change over + ;; time, so I've just put reasonable numbers below. + (let-values ([(sw sh) (send dc get-scale)]) + (send* dc (set-scale 1 1) + (draw-bitmap blue-color 430 50) + (set-scale sw sh))) + (send dc set-clipping-region old-clip) + (cleanup-edges right-logo-path dc dx dy)] + [(procedure? blue-color) + (with-dc-settings dc + (λ () (blue-color dc) + (send dc draw-path right-logo-path dx dy)))] + [else (send* dc (set-brush blue-color 'solid) + (draw-path right-logo-path dx dy))]) + (send* dc (set-pen old-pen) + (set-brush old-brush) + (set-clipping-region old-clip))) + (define (cleanup-edges path dc dx dy) + (when edge-cleanup-pen + (define pen (send dc get-pen)) + (define brush (send dc get-brush)) + (define alpha (send dc get-alpha)) + (send* dc (set-pen edge-cleanup-pen) + (set-brush "black" 'transparent) + (set-alpha .8) + (draw-path path dx dy) + (set-pen pen) + (set-brush brush) + (set-alpha alpha)))) + (define image (pin-over + (if background-color + (colorize (filled-rectangle client-w client-h) + background-color) + (blank client-w client-h)) + 320 50 + (scale (dc paint-plt 630 630 0 0) 12/10))) + (if clip? (clip image) image)) + +(define plt-title-background + (make-plt-title-background plt-red-color + plt-blue-color + plt-background-color + plt-lambda-color + plt-pen-color + plt-pen-style)) + +(define-runtime-path arrow.png "128x128-arrow.png") +(define blue-arrow (read-bitmap arrow.png)) + +(define result.png "racket-rising.png") + +(define size 1) +(define bmp (make-bitmap (round (* 1024 size 2/3)) (* 768 size 1/2))) +(define bdc (make-object bitmap-dc% bmp)) +(draw-pict (scale plt-title-background size) bdc -100 0) +(void (send bdc draw-bitmap + blue-arrow + (/ (- (send bmp get-width) (send blue-arrow get-width)) 2) + (/ (- (send bmp get-height) (send blue-arrow get-height)) 2))) +(when (send bmp save-file result.png 'png) + (printf "wrote ~a\n" result.png)) diff --git a/collects/meta/build/dmg/racket-rising.png b/collects/meta/build/dmg/racket-rising.png new file mode 100644 index 0000000000000000000000000000000000000000..068a0bcccdcb07c65d95f9665c8765012177cfc9 GIT binary patch literal 16255 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 literal 0 HcmV?d00001