I should point out that what I'm doing does appear to work in JavaFX 8. But I need something that works in Java 7u40.
Scott On Tue, Sep 24, 2013 at 8:40 PM, Scott Palmer <swpal...@gmail.com> wrote: > [replying back to the list] > > Ah.. well the trick here is that I need to apply a scale transform when > taking the snapshot. I want to get an image that is a particular size and > so I first need to know the bounds of the node so I can calculate the scale > value. If I don't apply the transform while taking the snapshot the image > may be far too large and trigger an out-of-memory error. > > So I need the CSS and layout to happen BEFORE I take the snapshot so that > I have the correct information to calculate the needed scale. > > Here is the full code: > Parent p = n.getParent(); > Scene s = new Scene(p); > s.getStyleSheets().add(knownGoodStyleSheetURL); > n.impl_processCSS(true); > n.layout(); > Bounds newBounds = n.getLayoutBounds(); > double maxDim = Math.max(newBounds.getWidth(), newBounds.getHeight()); > double scale = desiredSize / maxDim; > SnapshotParameters snapParams = new SnapshotParameters(); > snapParams.setFill(Color.TRANSPARENT); > snapParams.setTransform(new Scale(scale, scale)); > WritableImage theImage = n.snapshot(snapParams,null); > > I get the correct scale for the snapshot to make an image of the desired > size, but the CSS is not applied properly. > > I don't think this should be so hard to do :-) > > Scott > > > > On Tue, Sep 24, 2013 at 7:56 PM, John Smith <john_sm...@symantec.com>wrote: > >> **Ø **I have a need to apply the CSS so when I 'snapshot' a node that >> isn't in my scene, it looks correct.**** >> >> ** ** >> >> A snapshot applies css and performs a layout pass automatically before it >> takes a snapshot.**** >> >> You can create a new dummy Scene (just for the snapshot) containing your >> node (like Kevin does), then set the required stylesheets on the new Scene. >> **** >> >> I don’t understand what the rest of your code does or why you manually >> call impl_processCSS(true) or layout();**** >> >> ** ** >> >> // create a dummy scene so layout and CSS will work >> Scene dummyScene = new Scene(new Group(node));**** >> >> dummyScene.getStyleSheets().addAll(…); >> node.shapshot(...); >> >> **** >> >> ** ** >> >> *From:* Scott Palmer [mailto:swpal...@gmail.com] >> *Sent:* Tuesday, September 24, 2013 4:35 PM >> *To:* John Smith >> *Cc:* Richard Bair (richard.b...@oracle.com); >> openjfx-dev@openjdk.java.net List >> >> *Subject:* Re: PrefWidth/Height calculations only works if stage is shown >> **** >> >> ** ** >> >> On Wed, Aug 28, 2013 at 3:18 PM, John Smith <john_sm...@symantec.com> >> wrote:**** >> >> I hadn't seen the applyCSS conversation, but looks like it was contained >> deep in a node validation thread: >> http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-July/008549.html >> >> Looks like the request is already covered in RT-21206 as pointed out by >> David. >> Looks like the feature will show up some time post-Java8, which is why >> there is nothing on Node now. >> >> For now, I stick with Kevin's node snapshot workaround: >> // create a dummy scene so layout and CSS will work >> new Scene(new Group(node)); >> node.shapshot(...) >> >> Thanks for the info!**** >> >> ** ** >> >> I have a need to apply the CSS so when I 'snapshot' a node that isn't in >> my scene, it looks correct.**** >> >> I'm doing this:**** >> >> Parent p = n.getParent(); // The node I want tosnapshot >> isn't the root of the graph**** >> >> Scene s = KayakFXUtils.createDarkScene(p,1000,1000);**** >> >> n.impl_processCSS(true);**** >> >> n.layout();**** >> >> **** >> >> I get a reasonable size for the node, but the CSS isn't applied.**** >> >> ** ** >> >> I get a ton of warnings like this:**** >> >> ** ** >> >> WARNING: com.sun.javafx.css.StyleHelper calculateValue Could not resolve >> '-fx-text-background-color' while resolving lookups for '-fx-text-fill' >> from rule '*.label' in stylesheet >> jar:file:/C:/Program%20Files%20(x86)/Java/jdk1.7.0_40/jre/lib/jfxrt.jar!/com/sun/javafx/scene/control/skin/caspian/caspian.bss >> **** >> >> ** ** >> >> Ideas?**** >> >> ** ** >> > >