From 11e87632dc15601cc08c25e5cad5e3457e09d446 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 13 Oct 2009 23:06:24 +0000 Subject: [PATCH] rearranged things so that 2htdp/image has its core snip stuff loaded into drscheme so that saving files with 2htdp/image images in them works svn: r16317 --- collects/2htdp/image.ss | 51 ++++++++++++++++++- collects/2htdp/private/image-more.ss | 2 +- collects/drscheme/private/eval.ss | 4 +- collects/drscheme/private/unit.ss | 2 + .../{2htdp/private => mrlib}/image-core.ss | 51 ++++--------------- .../teachpack/2htdp/scribblings/image.scrbl | 2 +- collects/tests/2htdp/test-image.ss | 2 +- 7 files changed, 66 insertions(+), 48 deletions(-) rename collects/{2htdp/private => mrlib}/image-core.ss (93%) diff --git a/collects/2htdp/image.ss b/collects/2htdp/image.ss index 7ac5722ce9..774bf882e5 100644 --- a/collects/2htdp/image.ss +++ b/collects/2htdp/image.ss @@ -1,5 +1,51 @@ #lang scheme/base -(require "private/image-core.ss" + +#| + +Need to test copy & paste. Also test that if the "if" +expression in image-snipclass%'s read +method returns #f, then you get a black circle out. + +--- + +improvments/changes wrt to htdp/image: + + - copying and pasting does not introduce jaggies + - equal comparisions are more efficient + - added rotation & scaling + - got rid of pinholes (see the new overlay, beside, and above functions) + +Equality change: equality is now based on the structure of the construction of the picture. +This means that some equalities that were there before are no longer true. For example, +in the old library, these two images are the same: + + (overlay/xy (rectangle 100 10 'solid 'red) + 0 + 10 + (rectangle 100 10 'solid 'red)) + + (rectangle 100 20 'solid 'red) + +... and why aren't they the same again....?! + +todo: sort out wxme library support (loading in text mode). + +------------ + +From Matthias: (to use to compare with this library) + + +You asked about exercises and code snippets for HtDP/2e yesterday. I actually do have a bunch of stuff in + + svn: 2HtDP/SampleCode/ + +and they all have good sample contracts. (It is amazing what we can do with kids who have just a few weeks of cs down; I would have never dared to write an editor after six weeks in Algol.) + + +|# + + +(require mrlib/image-core "private/image-more.ss") (provide overlay @@ -14,6 +60,9 @@ rotate frame + + scale + scale/xy ellipse rectangle diff --git a/collects/2htdp/private/image-more.ss b/collects/2htdp/private/image-more.ss index 58e35da772..7bf2e33ab9 100644 --- a/collects/2htdp/private/image-more.ss +++ b/collects/2htdp/private/image-more.ss @@ -1,6 +1,6 @@ #lang scheme/base -(require "image-core.ss" +(require mrlib/image-core scheme/class scheme/gui/base htdp/error diff --git a/collects/drscheme/private/eval.ss b/collects/drscheme/private/eval.ss index bb02209e52..8c55abdbb3 100644 --- a/collects/drscheme/private/eval.ss +++ b/collects/drscheme/private/eval.ss @@ -11,8 +11,7 @@ ;; to ensure this guy is loaded (and the snipclass installed) in the drscheme namespace & eventspace ;; these things are for effect only! (require mrlib/cache-image-snip - #; - (prefix foo htdp/matrix)) + (prefix image-core: mrlib/image-core)) (define op (current-output-port)) (define (oprintf . args) (apply fprintf op args)) @@ -184,6 +183,7 @@ '(lib "mzlib/foreign.ss") '(lib "mred/mred.ss") '(lib "mrlib/cache-image-snip.ss") + '(lib "mrlib/image-core.ss") '(lib "mrlib/matrix-snip.ss") '(lib "mzlib/pconvert-prop.ss") '(lib "planet/terse-info.ss"))) diff --git a/collects/drscheme/private/unit.ss b/collects/drscheme/private/unit.ss index b2b67e6c6e..56efd4e2e3 100644 --- a/collects/drscheme/private/unit.ss +++ b/collects/drscheme/private/unit.ss @@ -24,6 +24,7 @@ module browser threading seems wrong. mrlib/include-bitmap mrlib/switchable-button mrlib/cache-image-snip + (prefix-in image-core: mrlib/image-core) mrlib/include-bitmap mrlib/close-icon net/sendurl @@ -166,6 +167,7 @@ module browser threading seems wrong. (send text split-snip (+ pos 1)) (let ([snip (send text find-snip pos 'after-or-none)]) (when (or (is-a? snip image-snip%) + (is-a? snip image-core:image%) (is-a? snip cache-image-snip%)) (add-sep) (new menu-item% diff --git a/collects/2htdp/private/image-core.ss b/collects/mrlib/image-core.ss similarity index 93% rename from collects/2htdp/private/image-core.ss rename to collects/mrlib/image-core.ss index 1c7a9ba2e0..45bfe0277d 100644 --- a/collects/2htdp/private/image-core.ss +++ b/collects/mrlib/image-core.ss @@ -2,57 +2,24 @@ #| -Need to test copy & paste. Also test that if the "if" -expression in image-snipclass%'s read -method returns #f, then you get a black circle out. - ---- - -improvments/changes wrt to htdp/image: - - - copying and pasting does not introduce jaggies - - equal comparisions are more efficient - - added rotation & scaling - - got rid of pinholes (see the new overlay, beside, and above functions) - -Equality change: equality is now based on the structure of the construction of the picture. -This means that some equalities that were there before are no longer true. For example, -in the old library, these two images are the same: - - (overlay/xy (rectangle 100 10 'solid 'red) - 0 - 10 - (rectangle 100 10 'solid 'red)) - - (rectangle 100 20 'solid 'red) - -... and why aren't they the same again....?! - -todo: sort out wxme library support (loading in text mode). - ------------- - -From Matthias: (to use to compare with this library) - - -You asked about exercises and code snippets for HtDP/2e yesterday. I actually do have a bunch of stuff in - - svn: 2HtDP/SampleCode/ - -and they all have good sample contracts. (It is amazing what we can do with kids who have just a few weeks of cs down; I would have never dared to write an editor after six weeks in Algol.) +This library is the part of the 2htdp/image +teachpack that has to be shared between drscheme +and the user's program to make copy and paste +work right. +Most of the exports are jsut for use in 2htdp/image +(technically, 2htdp/private/image-more). The main +use of this library is the snip class addition it +does (and any code that that does not depend on +has been moved out). |# - (require scheme/class scheme/gui/base scheme/math (for-syntax scheme/base)) - - - (define-for-syntax id-constructor-pairs '()) (define-for-syntax (add-id-constructor-pair a b) (set! id-constructor-pairs (cons (list a b) id-constructor-pairs))) diff --git a/collects/teachpack/2htdp/scribblings/image.scrbl b/collects/teachpack/2htdp/scribblings/image.scrbl index 8518b92165..1882a46502 100644 --- a/collects/teachpack/2htdp/scribblings/image.scrbl +++ b/collects/teachpack/2htdp/scribblings/image.scrbl @@ -71,7 +71,7 @@ Existing images can be rotated, scaled, and overlaid on top of each other. @defproc[(scale [factor real?] [image image?]) image?]{ Scales @scheme[image] by @scheme[factor]. For example, - scaling @scheme[(ellipse 40 60 "solid" "blue")] produces + scaling @scheme[(ellipse 40 60 "solid" "blue")] by @scheme[2] produces @scheme[(ellipse 80 120 "solid" "blue")]. } diff --git a/collects/tests/2htdp/test-image.ss b/collects/tests/2htdp/test-image.ss index b113bfe4b2..cfe6b7667c 100644 --- a/collects/tests/2htdp/test-image.ss +++ b/collects/tests/2htdp/test-image.ss @@ -1,5 +1,5 @@ #lang scheme/base -(require "../../2htdp/private/image-core.ss" +(require "../../mrlib/image-core.ss" "../../2htdp/private/image-more.ss" scheme/math scheme/class