mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
GP-1981 - Graph Theme Updates
This commit is contained in:
@@ -14,7 +14,7 @@ color.bg.functiongraph.vertex.picked = color.palette.yellow
|
||||
color.bg.functiongraph.edge.fall-through = color.flowtype.fall-through
|
||||
color.bg.functiongraph.edge.fall-through.highlight = rgb(255, 127, 127)
|
||||
color.bg.functiongraph.edge.jump.conditional = color.flowtype.jump.conditional
|
||||
color.bg.functiongraph.edge.jump.conditional.highlight = green
|
||||
color.bg.functiongraph.edge.jump.conditional.highlight = lime
|
||||
color.bg.functiongraph.edge.jump.unconditional = color.flowtype.jump.unconditional
|
||||
color.bg.functiongraph.edge.jump.unconditional.highlight = rgb(127, 127, 255)
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user