mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
GP-1981 - Graph Theme Updates
This commit is contained in:
parent
50de9eb7b3
commit
ae02a34d8b
47 changed files with 462 additions and 341 deletions
|
@ -27,7 +27,6 @@ import edu.uci.ics.jung.visualization.RenderContext;
|
|||
import edu.uci.ics.jung.visualization.picking.PickedState;
|
||||
import edu.uci.ics.jung.visualization.renderers.Renderer;
|
||||
import edu.uci.ics.jung.visualization.util.Caching;
|
||||
import ghidra.app.plugin.core.functiongraph.graph.jung.renderer.FGEdgePaintTransformer;
|
||||
import ghidra.app.plugin.core.functiongraph.graph.jung.renderer.FGVertexRenderer;
|
||||
import ghidra.app.plugin.core.functiongraph.graph.jung.transformer.FGVertexPickableBackgroundPaintTransformer;
|
||||
import ghidra.app.plugin.core.functiongraph.graph.layout.FGLayout;
|
||||
|
@ -38,6 +37,7 @@ import ghidra.graph.viewer.layout.LayoutListener.ChangeType;
|
|||
import ghidra.graph.viewer.layout.LayoutProvider;
|
||||
import ghidra.graph.viewer.layout.VisualGraphLayout;
|
||||
import ghidra.graph.viewer.renderer.VisualGraphEdgeLabelRenderer;
|
||||
import ghidra.graph.viewer.vertex.AbstractVisualVertexRenderer;
|
||||
import ghidra.program.model.listing.Function;
|
||||
import ghidra.program.util.ProgramLocation;
|
||||
import ghidra.util.SystemUtilities;
|
||||
|
@ -193,23 +193,25 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
|
|||
@Override
|
||||
protected FGPrimaryViewer createPrimaryGraphViewer(VisualGraphLayout<FGVertex, FGEdge> layout,
|
||||
Dimension viewerSize) {
|
||||
return new FGPrimaryViewer(this, layout, viewerSize);
|
||||
}
|
||||
|
||||
FGPrimaryViewer viewer = new FGPrimaryViewer(this, layout, viewerSize);
|
||||
@Override
|
||||
protected void decoratePrimaryViewer(GraphViewer<FGVertex, FGEdge> viewer,
|
||||
VisualGraphLayout<FGVertex, FGEdge> layout) {
|
||||
|
||||
RenderContext<FGVertex, FGEdge> renderContext = viewer.getRenderContext();
|
||||
FGEdgePaintTransformer edgePaintTransformer =
|
||||
new FGEdgePaintTransformer(getFucntionGraphOptions());
|
||||
renderContext.setEdgeDrawPaintTransformer(edgePaintTransformer);
|
||||
renderContext.setArrowDrawPaintTransformer(edgePaintTransformer);
|
||||
renderContext.setArrowFillPaintTransformer(edgePaintTransformer);
|
||||
super.decoratePrimaryViewer(viewer, layout);
|
||||
|
||||
// the edge renderer was set by the parent call; get the renderer to add our painter
|
||||
Renderer<FGVertex, FGEdge> renderer = viewer.getRenderer();
|
||||
renderer.setVertexRenderer(new FGVertexRenderer());
|
||||
RenderContext<FGVertex, FGEdge> renderContext = viewer.getRenderContext();
|
||||
|
||||
// for background colors when we are zoomed to far to render the listing
|
||||
PickedState<FGVertex> pickedVertexState = viewer.getPickedVertexState();
|
||||
renderContext.setVertexFillPaintTransformer(new FGVertexPickableBackgroundPaintTransformer(
|
||||
FGVertexRenderer vertexRenderer = new FGVertexRenderer();
|
||||
vertexRenderer.setVertexFillPaintTransformer(new FGVertexPickableBackgroundPaintTransformer(
|
||||
pickedVertexState, PICKED_COLOR, START_COLOR, END_COLOR));
|
||||
renderer.setVertexRenderer(vertexRenderer);
|
||||
|
||||
// edge label rendering
|
||||
com.google.common.base.Function<FGEdge, String> edgeLabelTransformer = e -> e.getLabel();
|
||||
|
@ -240,31 +242,29 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
|
|||
}
|
||||
}
|
||||
|
||||
return viewer;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SatelliteGraphViewer<FGVertex, FGEdge> createSatelliteGraphViewer(
|
||||
GraphViewer<FGVertex, FGEdge> masterViewer, Dimension viewerSize) {
|
||||
protected void decorateSatelliteViewer(SatelliteGraphViewer<FGVertex, FGEdge> viewer,
|
||||
VisualGraphLayout<FGVertex, FGEdge> layout) {
|
||||
|
||||
SatelliteGraphViewer<FGVertex, FGEdge> viewer =
|
||||
super.createSatelliteGraphViewer(masterViewer, viewerSize);
|
||||
super.decorateSatelliteViewer(viewer, layout);
|
||||
|
||||
RenderContext<FGVertex, FGEdge> renderContext = viewer.getRenderContext();
|
||||
// the edge renderer was set by the parent call; get the renderer to add our painter
|
||||
Renderer<FGVertex, FGEdge> renderer = viewer.getRenderer();
|
||||
|
||||
FGEdgePaintTransformer edgePaintTransformer =
|
||||
new FGEdgePaintTransformer(getFucntionGraphOptions());
|
||||
renderContext.setEdgeDrawPaintTransformer(edgePaintTransformer);
|
||||
renderContext.setArrowDrawPaintTransformer(edgePaintTransformer);
|
||||
renderContext.setArrowFillPaintTransformer(edgePaintTransformer);
|
||||
AbstractVisualVertexRenderer<FGVertex, FGEdge> vertexRenderer =
|
||||
(AbstractVisualVertexRenderer<FGVertex, FGEdge>) renderer.getVertexRenderer();
|
||||
|
||||
PickedState<FGVertex> pickedVertexState = viewer.getPickedVertexState();
|
||||
|
||||
RenderContext<FGVertex, FGEdge> renderContext = viewer.getRenderContext();
|
||||
renderContext.setVertexFillPaintTransformer(new FGVertexPickableBackgroundPaintTransformer(
|
||||
pickedVertexState, PICKED_COLOR, START_COLOR, END_COLOR));
|
||||
vertexRenderer.setVertexFillPaintTransformer(new FGVertexPickableBackgroundPaintTransformer(
|
||||
pickedVertexState, PICKED_COLOR, START_COLOR, END_COLOR));
|
||||
|
||||
viewer.setGraphOptions(vgOptions);
|
||||
|
||||
return viewer;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -289,7 +289,7 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
|
|||
// FG-specific Client Methods
|
||||
//==================================================================================================
|
||||
|
||||
public FunctionGraphOptions getFucntionGraphOptions() {
|
||||
public FunctionGraphOptions getFunctionGraphOptions() {
|
||||
return (FunctionGraphOptions) vgOptions;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
/* ###
|
||||
* IP: GHIDRA
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package ghidra.app.plugin.core.functiongraph.graph.jung.renderer;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Paint;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
||||
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
|
||||
import ghidra.app.plugin.core.functiongraph.mvc.FunctionGraphOptions;
|
||||
import ghidra.program.model.symbol.FlowType;
|
||||
|
||||
public class FGEdgePaintTransformer implements Function<FGEdge, Paint> {
|
||||
|
||||
private FunctionGraphOptions options;
|
||||
|
||||
public FGEdgePaintTransformer(FunctionGraphOptions options) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Paint apply(FGEdge e) {
|
||||
FlowType flowType = e.getFlowType();
|
||||
Color color = options.getColor(flowType);
|
||||
return color;
|
||||
}
|
||||
}
|
|
@ -23,6 +23,7 @@ import ghidra.app.plugin.core.functiongraph.graph.FunctionGraph;
|
|||
import ghidra.app.plugin.core.functiongraph.graph.vertex.FGVertex;
|
||||
import ghidra.app.plugin.core.functiongraph.mvc.FunctionGraphOptions;
|
||||
import ghidra.graph.viewer.renderer.ArticulatedEdgeRenderer;
|
||||
import ghidra.program.model.symbol.FlowType;
|
||||
|
||||
/**
|
||||
* A renderer used by the Function Graph API to provide additional edge coloring, as
|
||||
|
@ -31,13 +32,21 @@ import ghidra.graph.viewer.renderer.ArticulatedEdgeRenderer;
|
|||
public class FGEdgeRenderer extends ArticulatedEdgeRenderer<FGVertex, FGEdge> {
|
||||
|
||||
@Override
|
||||
public Color getBaseColor(Graph<FGVertex, FGEdge> g, FGEdge e) {
|
||||
public Color getDrawColor(Graph<FGVertex, FGEdge> g, FGEdge e) {
|
||||
FunctionGraphOptions options = getOptions(g);
|
||||
FlowType flowType = e.getFlowType();
|
||||
Color color = options.getColor(flowType);
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getFocusedColor(Graph<FGVertex, FGEdge> g, FGEdge e) {
|
||||
FunctionGraphOptions options = getOptions(g);
|
||||
return options.getColor(e.getFlowType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getHighlightColor(Graph<FGVertex, FGEdge> g, FGEdge e) {
|
||||
public Color getSelectedColor(Graph<FGVertex, FGEdge> g, FGEdge e) {
|
||||
FunctionGraphOptions options = getOptions(g);
|
||||
return options.getHighlightColor(e.getFlowType());
|
||||
}
|
||||
|
|
|
@ -249,7 +249,7 @@ class GroupedVertexInfo extends VertexInfo {
|
|||
@Override
|
||||
public String toString() {
|
||||
String superString = super.toString();
|
||||
StringBuffer buffy = new StringBuffer(superString);
|
||||
StringBuilder buffy = new StringBuilder(superString);
|
||||
buffy.append('\n');
|
||||
for (VertexInfo info : vertexInfos) {
|
||||
buffy.append('\t').append(info.toString()).append('\n');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue