diff --git a/collects/mred/private/wx/cocoa/procs.rkt b/collects/mred/private/wx/cocoa/procs.rkt index e4ac41089c..374c7b5975 100644 --- a/collects/mred/private/wx/cocoa/procs.rkt +++ b/collects/mred/private/wx/cocoa/procs.rkt @@ -89,7 +89,7 @@ (define (check-for-break) #f) -(define (display-origin xb yb all? num) +(define (display-origin xb yb all? num fail) (if (or all? (positive? num)) (unless (atomically (with-autorelease @@ -108,13 +108,13 @@ (NSSize-height (NSRect-size f0))))))) #t) #f)))) - (error 'get-display-left-top-inset "no such monitor: ~v" num)) + (fail)) (set-box! xb 0)) (when (zero? num) (set-box! yb 0)) (set-box! yb (+ (unbox yb) (get-menu-bar-height)))) -(define (display-size xb yb all? num) +(define (display-size xb yb all? num fail) (unless (atomically (with-autorelease (let ([screens (tell NSScreen screens)]) @@ -134,7 +134,7 @@ (get-menu-bar-height)])))) #t) #f)))) - (error 'get-display-size "no such monitor: ~v" num))) + (fail))) (define (display-count) diff --git a/collects/mred/private/wx/gtk/frame.rkt b/collects/mred/private/wx/gtk/frame.rkt index 22473af06e..3b750da670 100644 --- a/collects/mred/private/wx/gtk/frame.rkt +++ b/collects/mred/private/wx/gtk/frame.rkt @@ -265,7 +265,7 @@ (send p get-size sw-box sh-box) (set-box! sx-box (send p get-x)) (set-box! sy-box (send p get-y))) - (display-size sw-box sh-box #t 0))) + (display-size sw-box sh-box #t 0 void))) (let* ([sw (unbox sw-box)] [sh (unbox sh-box)] [fw (unbox w-box)] @@ -497,21 +497,21 @@ (define-gdk gdk_screen_get_monitor_geometry (_fun _GdkScreen _int _GdkRectangle-pointer -> _void)) (define-gdk gdk_screen_get_n_monitors (_fun _GdkScreen -> _int)) -(define (monitor-rect who num) +(define (monitor-rect num fail) (let ([s (gdk_screen_get_default)] [r (make-GdkRectangle 0 0 0 0)]) (unless (num . < . (gdk_screen_get_n_monitors s)) - (error who "no such monitor: ~v" num)) + (fail)) (gdk_screen_get_monitor_geometry s num r) r)) -(define (display-origin x y all? num) - (let ([r (monitor-rect 'get-display-left-top-inset num)]) +(define (display-origin x y all? num fail) + (let ([r (monitor-rect num fail)]) (set-box! x (- (GdkRectangle-x r))) (set-box! y (- (GdkRectangle-y r))))) -(define (display-size w h all? num) - (let ([r (monitor-rect 'get-display-size num)]) +(define (display-size w h all? num fail) + (let ([r (monitor-rect num fail)]) (set-box! w (GdkRectangle-width r)) (set-box! h (GdkRectangle-height r)))) diff --git a/collects/mred/private/wx/win32/frame.rkt b/collects/mred/private/wx/win32/frame.rkt index bd9605051d..f0477cb293 100644 --- a/collects/mred/private/wx/win32/frame.rkt +++ b/collects/mred/private/wx/win32/frame.rkt @@ -78,12 +78,12 @@ #f) (reverse rects))) -(define (display-size xb yb all? num) +(define (display-size xb yb all? num fail) (cond [(positive? num) (let ([rs (get-all-screen-rects)]) (unless (num . < . (length rs)) - (error 'get-display-size "no such monitor: ~v" num)) + (fail)) (let ([r (list-ref rs num)]) (set-box! xb (- (caddr r) (car r))) (set-box! yb (- (cadddr r) (cadr r)))))] @@ -99,12 +99,12 @@ (set-box! xb (- (RECT-right r) (RECT-left r))) (set-box! yb (- (RECT-bottom r) (RECT-top r))))])) -(define (display-origin xb yb avoid-bars? num) +(define (display-origin xb yb avoid-bars? num fail) (cond [(positive? num) (let ([rs (get-all-screen-rects)]) (unless (num . < . (length rs)) - (error 'get-display-left-top-inset "no such monitor: ~v" num)) + (fail)) (let ([r (list-ref rs num)]) (set-box! xb (- (car r))) (set-box! yb (- (cadr r)))))] @@ -435,7 +435,7 @@ [wh (box 0)] [wx (box 0)] [wy (box 0)]) - (display-size sw sh #f 0) + (display-size sw sh #f 0 void) (if wrt (begin (send wrt get-size ww wh) diff --git a/collects/mred/private/wxtop.rkt b/collects/mred/private/wxtop.rkt index eb03fb9567..e10dc776f3 100644 --- a/collects/mred/private/wxtop.rkt +++ b/collects/mred/private/wxtop.rkt @@ -35,19 +35,22 @@ (lambda ([full-screen? #f] #:monitor [monitor 0]) (unless (exact-nonnegative-integer? monitor) (raise-type-error 'get-display-size "exact non-negative integer" monitor)) - (let ([xb (box 0)] - [yb (box 0)]) - (wx:display-size xb yb full-screen? monitor) - (values (unbox xb) (unbox yb))))) + (let/ec esc + (let ([xb (box 0)] + [yb (box 0)]) + (wx:display-size xb yb full-screen? monitor + (lambda () (esc #f #f))) + (values (unbox xb) (unbox yb)))))) (define get-display-left-top-inset (lambda ([advisory? #f] #:monitor [monitor 0]) (unless (exact-nonnegative-integer? monitor) (raise-type-error 'get-display-left-top-inset "exact non-negative integer" monitor)) - (let ([xb (box 0)] - [yb (box 0)]) - (wx:display-origin xb yb advisory? monitor) - (values (unbox xb) (unbox yb))))) + (let/ec esc + (let ([xb (box 0)] + [yb (box 0)]) + (wx:display-origin xb yb advisory? monitor (lambda () (esc #f #f))) + (values (unbox xb) (unbox yb)))))) (define get-display-count (lambda () diff --git a/collects/scribblings/gui/global-draw-funcs.scrbl b/collects/scribblings/gui/global-draw-funcs.scrbl index ddc22504c0..d79da7cecd 100644 --- a/collects/scribblings/gui/global-draw-funcs.scrbl +++ b/collects/scribblings/gui/global-draw-funcs.scrbl @@ -29,7 +29,8 @@ Returns the depth of the main display (a value of 1 denotes a monochrome display @defproc[(get-display-left-top-inset [avoid-bars? any/c #f] [#:monitor monitor exact-nonnegative-integer? 0]) - (values exact-nonnegative-integer? exact-nonnegative-integer?)]{ + (values (or/c exact-nonnegative-integer? #f) + (or/c exact-nonnegative-integer? #f))]{ When the optional argument is @racket[#f] (the default), this function returns the offset of @racket[monitor]'s origin from the @@ -46,13 +47,15 @@ When the optional @racket[avoid-bars?] argument is true, for @racket[monitor] monitor @racket[0], the result is always @racket[0] and @racket[0]. For monitors other than @racket[0], @racket[avoid-bars?] has no effect. -If @racket[monitor] is not less than the current number of available monitors, the - @racket[exn:fail] exception is raised.} +If @racket[monitor] is not less than the current number of available + monitors (which can change at any time), the results are @racket[#f] + and @racket[#f].} @defproc[(get-display-size [full-screen? any/c #f] [#:monitor monitor exact-nonnegative-integer? 0]) - (values exact-nonnegative-integer? exact-nonnegative-integer?)]{ + (values (or/c exact-nonnegative-integer? #f) + (or/c exact-nonnegative-integer? #f))]{ @index["screen resolution"]{Gets} the physical size of the specified @racket[monitor] in pixels. On Windows, this size does not include the task bar by @@ -62,8 +65,9 @@ If @racket[monitor] is not less than the current number of available monitors, t On Windows and Mac OS X, if the optional argument is true and @racket[monitor] is @racket[0], then the task bar, menu bar, and dock area are included in the result. -If @racket[monitor] is not less than the current number of available monitors, the - @racket[exn:fail] exception is raised.} +If @racket[monitor] is not less than the current number of available + monitors (which can change at any time), the results are @racket[#f] + and @racket[#f].} @defproc[(is-color-display?)