GP-1981 - Graph Theme Updates

This commit is contained in:
dragonmacher 2022-07-14 18:49:45 -04:00 committed by ghidragon
parent 50de9eb7b3
commit ae02a34d8b
47 changed files with 462 additions and 341 deletions

View file

@ -28,6 +28,7 @@ import javax.swing.border.LineBorder;
import docking.theme.GColor;
import docking.theme.GThemeDefaults.Colors.Palette;
import docking.theme.Gui;
import docking.widgets.EmptyBorderButton;
import docking.widgets.label.GDLabel;
import ghidra.graph.viewer.vertex.AbstractVisualVertex;
@ -45,7 +46,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
//@formatter:off
public static final Color DEFAULT_VERTEX_SHAPE_COLOR = new GColor("color.bg.fcg.vertex.default");
private static final Color TOO_BIG_VERTEX_SHAPE_COLOR = new GColor("color.bg.fcg.vertex.toobig ");
private static final Color TOO_BIG_VERTEX_SHAPE_COLOR = new GColor("color.bg.fcg.vertex.toobig");
//@formatter:on
public static final Icon NOT_ALLOWED_ICON = Icons.ERROR_ICON;
@ -55,9 +56,9 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
ResourceManager.getScaledIcon(Icons.COLLAPSE_ALL_ICON, 10, 10);
// higher numbered layers go on top
private static final Integer VERTEX_SHAPE_LAYER = new Integer(100);
private static final Integer TOGGLE_BUTTON_LAYER = new Integer(200);
private static final Integer LABEL_LAYER = new Integer(300);
private static final Integer VERTEX_SHAPE_LAYER = 100;
private static final Integer TOGGLE_BUTTON_LAYER = 200;
private static final Integer LABEL_LAYER = 300;
private static final int GAP = 2;
private static final int VERTEX_SHAPE_SIZE = 50;
@ -131,8 +132,8 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
Color vertexShapeColor = getVertexShapeColor();
Color lightColor = vertexShapeColor;
Color darkColor = vertexShapeColor.darker();
Color darkestColor = darkColor.darker();
Color darkColor = Gui.darker(vertexShapeColor);
Color darkestColor = Gui.darker(darkColor);
int offset = 5 * level.getDistance();
int half = VERTEX_SHAPE_SIZE / 2;
int start = 0;
@ -159,7 +160,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
// calculate the needed size
layeredPane = new JLayeredPane();
Border border = createDebugBorder(new LineBorder(Color.YELLOW.darker(), 1));
Border border = createDebugBorder(new LineBorder(Palette.GOLD, 1));
layeredPane.setBorder(border);
updateLayeredPaneSize();
@ -549,7 +550,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/**
* Sets whether this vertex has any outgoing references
*
* @param hasIncoming true if this vertex has any incoming references
* @param hasOutgoing true if this vertex has any outgoing references
*/
public void setHasOutgoingReferences(boolean hasOutgoing) {

View file

@ -16,7 +16,6 @@
package functioncalls.graph.renderer;
import java.awt.Color;
import java.awt.Paint;
import com.google.common.base.Function;
@ -26,7 +25,7 @@ import ghidra.util.ColorUtils;
/**
* Generates colors for a given {@link FcgEdge}
*/
public class FcgEdgePaintTransformer implements Function<FcgEdge, Paint> {
public class FcgEdgePaintTransformer implements Function<FcgEdge, Color> {
private Color directColor;
private Color indirectColor;
@ -52,7 +51,7 @@ public class FcgEdgePaintTransformer implements Function<FcgEdge, Paint> {
}
@Override
public Paint apply(FcgEdge e) {
public Color apply(FcgEdge e) {
if (e.isDirectEdge()) {
return getDirectEdgeColor(e);
}

View file

@ -16,13 +16,16 @@
package functioncalls.graph.view;
import docking.theme.GColor;
import edu.uci.ics.jung.visualization.RenderContext;
import edu.uci.ics.jung.visualization.renderers.Renderer;
import functioncalls.graph.*;
import functioncalls.graph.renderer.FcgEdgePaintTransformer;
import functioncalls.graph.renderer.FcgVertexPaintTransformer;
import functioncalls.plugin.FunctionCallGraphPlugin;
import ghidra.graph.viewer.*;
import ghidra.graph.viewer.edge.VisualEdgeRenderer;
import ghidra.graph.viewer.layout.VisualGraphLayout;
import ghidra.graph.viewer.renderer.VisualVertexSatelliteRenderer;
import ghidra.graph.viewer.vertex.VisualVertexRenderer;
/**
* A graph component for the {@link FunctionCallGraphPlugin}
@ -32,13 +35,15 @@ public class FcgComponent extends GraphComponent<FcgVertex, FcgEdge, FunctionCal
// our parent stores a reference to this graph, but we do it here to maintain its type
private FunctionCallGraph fcGraph;
// TODO use options for color
private FcgVertexPaintTransformer vertexPaintTransformer =
new FcgVertexPaintTransformer(FcgVertex.DEFAULT_VERTEX_SHAPE_COLOR);
private FcgEdgePaintTransformer edgePaintTransformer =
new FcgEdgePaintTransformer(new GColor("color.bg.fcg.edge.primary.direct"),
new GColor("color.bg.fcg.edge.primary.indirect"));
private FcgEdgePaintTransformer selectedEdgePaintTransformer =
new FcgEdgePaintTransformer(new GColor("color.bg.fcg.edge.primary.direct.selected"),
new GColor("color.bg.fcg.edge.primary.indirect.selected"));
private FcgEdgePaintTransformer satelliteEdgePaintTransformer =
new FcgEdgePaintTransformer(new GColor("color.bg.fcg.edge.satellite.direct"),
new GColor("color.bg.fcg.edge.satellite.indirect"));
@ -59,15 +64,15 @@ public class FcgComponent extends GraphComponent<FcgVertex, FcgEdge, FunctionCal
super.decoratePrimaryViewer(viewer, layout);
RenderContext<FcgVertex, FcgEdge> renderContext = viewer.getRenderContext();
renderContext.setVertexFillPaintTransformer(vertexPaintTransformer);
Renderer<FcgVertex, FcgEdge> renderer = viewer.getRenderer();
VisualVertexRenderer<FcgVertex, FcgEdge> vertexRenderer =
(VisualVertexRenderer<FcgVertex, FcgEdge>) renderer.getVertexRenderer();
vertexRenderer.setVertexFillPaintTransformer(vertexPaintTransformer);
// Note: setting the fill for the edges has the effect of drawing a filled-in circle
// instead of just the outer edge.
// renderContext.setEdgeFillPaintTransformer(edgePaintTransformer);
renderContext.setEdgeDrawPaintTransformer(edgePaintTransformer);
renderContext.setArrowFillPaintTransformer(edgePaintTransformer);
renderContext.setArrowDrawPaintTransformer(edgePaintTransformer);
VisualEdgeRenderer<FcgVertex, FcgEdge> edgeRenderer =
(VisualEdgeRenderer<FcgVertex, FcgEdge>) renderer.getEdgeRenderer();
edgeRenderer.setDrawColorTransformer(edgePaintTransformer);
edgeRenderer.setSelectedColorTransformer(selectedEdgePaintTransformer);
}
@Override
@ -76,12 +81,14 @@ public class FcgComponent extends GraphComponent<FcgVertex, FcgEdge, FunctionCal
super.decorateSatelliteViewer(viewer, layout);
RenderContext<FcgVertex, FcgEdge> renderContext = viewer.getRenderContext();
renderContext.setVertexFillPaintTransformer(vertexPaintTransformer);
//renderContext.setEdgeFillPaintTransformer(satelliteEdgePaintTransformer);
renderContext.setEdgeDrawPaintTransformer(satelliteEdgePaintTransformer);
renderContext.setArrowFillPaintTransformer(satelliteEdgePaintTransformer);
renderContext.setArrowDrawPaintTransformer(satelliteEdgePaintTransformer);
Renderer<FcgVertex, FcgEdge> renderer = viewer.getRenderer();
VisualVertexSatelliteRenderer<FcgVertex, FcgEdge> vertexRenderer =
(VisualVertexSatelliteRenderer<FcgVertex, FcgEdge>) renderer.getVertexRenderer();
vertexRenderer.setVertexFillPaintTransformer(vertexPaintTransformer);
VisualEdgeRenderer<FcgVertex, FcgEdge> edgeRenderer =
(VisualEdgeRenderer<FcgVertex, FcgEdge>) renderer.getEdgeRenderer();
edgeRenderer.setDrawColorTransformer(satelliteEdgePaintTransformer);
}
@Override