From dba4b65aace0830023a23b397b39bd1b7250a29b Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 26 Aug 2011 22:21:47 -0700 Subject: [PATCH 1/3] core-text: lazy text render (inspired by klazuka). --- basis/core-text/core-text.factor | 35 +++++++++++++++++------- basis/ui/text/core-text/core-text.factor | 4 +-- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/basis/core-text/core-text.factor b/basis/core-text/core-text.factor index 014956aba2..d409bd9b0f 100644 --- a/basis/core-text/core-text.factor +++ b/basis/core-text/core-text.factor @@ -47,7 +47,10 @@ ERROR: not-a-string object ; CTLineCreateWithAttributedString ] with-destructors ; -TUPLE: line < disposable line metrics image loc dim ; +TUPLE: line < disposable line metrics image loc dim render-info ; + +TUPLE: render-info font string loc dim ; +C: render-info : typographic-bounds ( line -- width ascent descent leading ) { CGFloat CGFloat CGFloat } @@ -126,22 +129,34 @@ TUPLE: line < disposable line metrics image loc dim ; line >>line - metrics >>metrics + font string loc dim >>render-info - dim [ - { - [ font dim fill-background ] - [ loc dim line string fill-selection-background ] - [ loc set-text-position ] - [ [ line ] dip CTLineDraw ] - } cleave - ] make-bitmap-image >>image + metrics >>metrics metrics loc dim line-loc >>loc metrics metrics>dim >>dim ] with-destructors ; +:: render ( line -- line image ) + line line>> :> ctline + line render-info>> string>> :> string + line render-info>> font>> :> font + line render-info>> loc>> :> loc + line render-info>> dim>> :> dim + + line dim [ + { + [ font dim fill-background ] + [ loc dim ctline string fill-selection-background ] + [ loc set-text-position ] + [ [ ctline ] dip CTLineDraw ] + } cleave + ] make-bitmap-image ; + +: line>image ( line -- image ) + dup image>> [ render >>image ] unless image>> ; + M: line dispose* line>> CFRelease ; SYMBOL: cached-lines diff --git a/basis/ui/text/core-text/core-text.factor b/basis/ui/text/core-text/core-text.factor index db8e43cde5..e864c828e8 100644 --- a/basis/ui/text/core-text/core-text.factor +++ b/basis/ui/text/core-text/core-text.factor @@ -18,7 +18,7 @@ M: core-text-renderer flush-layout-cache cached-lines get purge-cache ; M: core-text-renderer string>image ( font string -- image loc ) - cached-line [ image>> ] [ loc>> ] bi ; + cached-line [ line>image ] [ loc>> ] bi ; M: core-text-renderer x>offset ( x font string -- n ) [ 2drop 0 ] [ @@ -38,4 +38,4 @@ M: core-text-renderer line-metrics ( font string -- metrics ) [ cached-line metrics>> ] if-empty ; -core-text-renderer font-renderer set-global \ No newline at end of file +core-text-renderer font-renderer set-global From 5a38ddc31c6344ee0fb381249a0321b7c1b82f6e Mon Sep 17 00:00:00 2001 From: sheeple Date: Sat, 27 Aug 2011 18:34:44 -0600 Subject: [PATCH 2/3] graphviz: fix load errors --- extra/graphviz/ffi/ffi.factor | 2 ++ extra/graphviz/render/render.factor | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/extra/graphviz/ffi/ffi.factor b/extra/graphviz/ffi/ffi.factor index 50fccf0a1f..794640ab4b 100644 --- a/extra/graphviz/ffi/ffi.factor +++ b/extra/graphviz/ffi/ffi.factor @@ -6,6 +6,7 @@ fry io kernel literals math prettyprint sequences splitting system memoize graphviz ; IN: graphviz.ffi +<< "libgraph" { { [ os macosx? ] [ "libgraph.dylib" ] } { [ os unix? ] [ "libgraph.so" ] } @@ -18,6 +19,7 @@ IN: graphviz.ffi { [ os unix? ] [ "libgvc.so" ] } { [ os winnt? ] [ "gvc.dll" ] } } cond cdecl add-library +>> LIBRARY: libgraph diff --git a/extra/graphviz/render/render.factor b/extra/graphviz/render/render.factor index 76857b1b85..f16278f9a2 100644 --- a/extra/graphviz/render/render.factor +++ b/extra/graphviz/render/render.factor @@ -110,7 +110,7 @@ PRIVATE> : define-graphviz-by-format ( -T -- ) [ dup supported-engines member? [ "-file" append ] when - create-in dup make-inline + "graphviz.render" create dup make-inline ] [ [ graphviz* ] curry ] bi (( graph -O -- )) From 2add84176eb9ee707814fcb10e0e899074688816 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sat, 27 Aug 2011 17:38:07 -0700 Subject: [PATCH 3/3] core-text: rename "render-info" to "rendered-line". Fixes #47. --- basis/core-text/core-text.factor | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/basis/core-text/core-text.factor b/basis/core-text/core-text.factor index d409bd9b0f..ba4753fbd2 100644 --- a/basis/core-text/core-text.factor +++ b/basis/core-text/core-text.factor @@ -47,10 +47,10 @@ ERROR: not-a-string object ; CTLineCreateWithAttributedString ] with-destructors ; -TUPLE: line < disposable line metrics image loc dim render-info ; +TUPLE: line < disposable line metrics image loc dim rendered-line ; -TUPLE: render-info font string loc dim ; -C: render-info +TUPLE: rendered-line font string loc dim ; +C: rendered-line : typographic-bounds ( line -- width ascent descent leading ) { CGFloat CGFloat CGFloat } @@ -129,7 +129,7 @@ C: render-info line >>line - font string loc dim >>render-info + font string loc dim >>rendered-line metrics >>metrics @@ -140,10 +140,10 @@ C: render-info :: render ( line -- line image ) line line>> :> ctline - line render-info>> string>> :> string - line render-info>> font>> :> font - line render-info>> loc>> :> loc - line render-info>> dim>> :> dim + line rendered-line>> string>> :> string + line rendered-line>> font>> :> font + line rendered-line>> loc>> :> loc + line rendered-line>> dim>> :> dim line dim [ {