adjust editor-cavas% refresh to clear border before calling on-paint
svn: r12198
This commit is contained in:
parent
cc12402a34
commit
51f5d193dd
|
@ -728,6 +728,7 @@
|
|||
set-x-margin
|
||||
get-y-margin
|
||||
get-x-margin
|
||||
clear-margins
|
||||
scroll-to
|
||||
set-lazy-refresh
|
||||
get-lazy-refresh
|
||||
|
|
|
@ -14,12 +14,17 @@
|
|||
|
||||
(define (make-canvas-glue% %) ; implies make-window-glue%
|
||||
(class100 (make-window-glue% %) (mred proxy . args)
|
||||
(inherit get-mred get-top-level)
|
||||
(inherit get-mred get-top-level clear-margins)
|
||||
(public
|
||||
[do-on-char (lambda (e) (super on-char e))]
|
||||
[do-on-event (lambda (e) (super on-event e))]
|
||||
[do-on-scroll (lambda (e) (super on-scroll e))]
|
||||
[do-on-paint (lambda () (super on-paint))])
|
||||
(private
|
||||
[clear-and-on-paint
|
||||
(lambda (mred)
|
||||
(clear-margins)
|
||||
(send mred on-paint))])
|
||||
(override
|
||||
[on-char (entry-point
|
||||
(lambda (e)
|
||||
|
@ -54,9 +59,9 @@
|
|||
;; Windows circumvented the event queue; delay
|
||||
(queue-window-callback
|
||||
this
|
||||
(lambda () (send mred on-paint)))
|
||||
(as-exit (lambda () (send mred on-paint))))
|
||||
(as-exit (lambda () (super on-paint)))))))])
|
||||
(lambda () (clear-and-on-paint mred)))
|
||||
(as-exit (lambda () (clear-and-on-paint mred))))
|
||||
(as-exit (lambda () (clear-margins) (super on-paint)))))))])
|
||||
(sequence (apply super-init mred proxy args))))
|
||||
|
||||
(define wx-canvas%
|
||||
|
@ -66,6 +71,7 @@
|
|||
(private-field
|
||||
[tabable? #f])
|
||||
(public
|
||||
[clear-margins (lambda () (void))]
|
||||
[on-tab-in (lambda () (send (wx->mred this) on-tab-in))]
|
||||
[get-tab-focus (lambda () tabable?)]
|
||||
[set-tab-focus (lambda (v) (set! tabable? v))])
|
||||
|
|
|
@ -235,7 +235,15 @@ Enables or disables the caret in the @techlink{display}'s editor, if
|
|||
(on-paint)
|
||||
void?]{
|
||||
|
||||
Repaints the editor.
|
||||
Repaints the editor, or clears the canvas if no editor is being
|
||||
displayed.
|
||||
|
||||
This method is called after clearing the margin around the editor,
|
||||
unless the canvas is created with the @scheme['transparent] style, but
|
||||
the editor area is not automatically cleared. In other words,
|
||||
@scheme[editor-canvas%] update by default is like @scheme[canvas%]
|
||||
update with the @scheme['no-autoclear] style, except that the margin
|
||||
around the editor area is always cleared.
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -671,12 +671,13 @@ void wxMediaCanvas::OnChar(wxKeyEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
void wxMediaCanvas::OnPaint(void)
|
||||
void wxMediaCanvas::ClearMargins(void)
|
||||
{
|
||||
need_refresh = FALSE;
|
||||
/* This method is called by `on-paint' in `wx:canvas%'
|
||||
before it calls the `on-paint' in `canvas%'. It's
|
||||
essentially a compromise between autoclear mode and
|
||||
no-autoclear mode. */
|
||||
|
||||
if (media) {
|
||||
/* Clear the margins */
|
||||
if (xmargin || ymargin) {
|
||||
wxDC *adc;
|
||||
wxColor *bg;
|
||||
|
@ -706,7 +707,13 @@ void wxMediaCanvas::OnPaint(void)
|
|||
adc->SetPen(op);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void wxMediaCanvas::OnPaint(void)
|
||||
{
|
||||
need_refresh = FALSE;
|
||||
|
||||
if (media) {
|
||||
if (!media->printing) {
|
||||
double w, h, x, y;
|
||||
GetView(&x, &y, &w, &h);
|
||||
|
|
|
@ -455,6 +455,8 @@ class wxMediaCanvas : public wxCanvas
|
|||
|
||||
virtual void Scroll(int x, int y, Bool refresh);
|
||||
|
||||
void ClearMargins();
|
||||
|
||||
/* To block bad uses: */
|
||||
virtual void Scroll(int x, int y);
|
||||
virtual void SetScrollbars(int h_pixels, int v_pixels, int x_len, int y_len,
|
||||
|
|
|
@ -241,6 +241,7 @@ typedef void *(*CAPOFunc)(void*);
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
class os_wxMediaCanvas : public wxMediaCanvas {
|
||||
public:
|
||||
|
@ -1114,6 +1115,26 @@ static Scheme_Object *os_wxMediaCanvasGetXMargin(int n, Scheme_Object *p[])
|
|||
return scheme_make_integer(r);
|
||||
}
|
||||
|
||||
static Scheme_Object *os_wxMediaCanvasClearMargins(int n, Scheme_Object *p[])
|
||||
{
|
||||
WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p)
|
||||
REMEMBER_VAR_STACK();
|
||||
objscheme_check_valid(os_wxMediaCanvas_class, "clear-margins in editor-canvas%", n, p);
|
||||
|
||||
SETUP_VAR_STACK_REMEMBERED(1);
|
||||
VAR_STACK_PUSH(0, p);
|
||||
|
||||
|
||||
|
||||
|
||||
WITH_VAR_STACK(((wxMediaCanvas *)((Scheme_Class_Object *)p[0])->primdata)->ClearMargins());
|
||||
|
||||
|
||||
|
||||
READY_TO_RETURN;
|
||||
return scheme_void;
|
||||
}
|
||||
|
||||
static Scheme_Object *os_wxMediaCanvasScrollTo(int n, Scheme_Object *p[])
|
||||
{
|
||||
WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p)
|
||||
|
@ -1474,7 +1495,7 @@ void objscheme_setup_wxMediaCanvas(Scheme_Env *env)
|
|||
|
||||
wxREGGLOB(os_wxMediaCanvas_class);
|
||||
|
||||
os_wxMediaCanvas_class = WITH_VAR_STACK(objscheme_def_prim_class(env, "editor-canvas%", "canvas%", (Scheme_Method_Prim *)os_wxMediaCanvas_ConstructScheme, 29));
|
||||
os_wxMediaCanvas_class = WITH_VAR_STACK(objscheme_def_prim_class(env, "editor-canvas%", "canvas%", (Scheme_Method_Prim *)os_wxMediaCanvas_ConstructScheme, 30));
|
||||
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "on-char" " method", (Scheme_Method_Prim *)os_wxMediaCanvasOnChar, 1, 1));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "on-event" " method", (Scheme_Method_Prim *)os_wxMediaCanvasOnEvent, 1, 1));
|
||||
|
@ -1493,6 +1514,7 @@ void objscheme_setup_wxMediaCanvas(Scheme_Env *env)
|
|||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "set-x-margin" " method", (Scheme_Method_Prim *)os_wxMediaCanvasSetXMargin, 1, 1));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "get-y-margin" " method", (Scheme_Method_Prim *)os_wxMediaCanvasGetYMargin, 0, 0));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "get-x-margin" " method", (Scheme_Method_Prim *)os_wxMediaCanvasGetXMargin, 0, 0));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "clear-margins" " method", (Scheme_Method_Prim *)os_wxMediaCanvasClearMargins, 0, 0));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "scroll-to" " method", (Scheme_Method_Prim *)os_wxMediaCanvasScrollTo, 5, 6));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "set-lazy-refresh" " method", (Scheme_Method_Prim *)os_wxMediaCanvasSetLazyRefresh, 1, 1));
|
||||
WITH_VAR_STACK(scheme_add_method_w_arity(os_wxMediaCanvas_class, "get-lazy-refresh" " method", (Scheme_Method_Prim *)os_wxMediaCanvasGetLazyRefresh, 0, 0));
|
||||
|
|
|
@ -88,6 +88,8 @@ typedef void *(*CAPOFunc)(void*);
|
|||
|
||||
@ "scroll-to" : bool ScrollTo(double,double,nndouble,nndouble, bool,SYM[bias]=0); : : : rFALSE
|
||||
|
||||
@ "clear-margins" : void ClearMargins();
|
||||
|
||||
@ "get-x-margin" : nnint GetXMargin();
|
||||
@ "get-y-margin" : nnint GetYMargin();
|
||||
@ "set-x-margin" : void SetXMargin(nnint);
|
||||
|
|
Loading…
Reference in New Issue
Block a user