aboutsummaryrefslogtreecommitdiffstats
path: root/ddms/libs/ddmuilib/src/com/android/ddmuilib/log/event/OccurrenceRenderer.java
blob: 3af14470b1b0adaab8c22b0007e56415d43f2897 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * 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 com.android.ddmuilib.log.event;

import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CrosshairState;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.PlotRenderingInfo;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRendererState;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleEdge;

import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Stroke;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;

/**
 * Custom renderer to render event occurrence. This rendered ignores the y value, and simply
 * draws a line from min to max at the time of the item.
 */
public class OccurrenceRenderer extends XYLineAndShapeRenderer {

    private static final long serialVersionUID = 1L;

    @Override
    public void drawItem(Graphics2D g2, 
                         XYItemRendererState state,
                         Rectangle2D dataArea,
                         PlotRenderingInfo info,
                         XYPlot plot, 
                         ValueAxis domainAxis, 
                         ValueAxis rangeAxis,
                         XYDataset dataset, 
                         int series, 
                         int item,
                         CrosshairState crosshairState, 
                         int pass) {
        TimeSeriesCollection timeDataSet = (TimeSeriesCollection)dataset;
        
        // get the x value for the series/item.
        double x = timeDataSet.getX(series, item).doubleValue();

        // get the min/max of the range axis
        double yMin = rangeAxis.getLowerBound();
        double yMax = rangeAxis.getUpperBound();

        RectangleEdge domainEdge = plot.getDomainAxisEdge();
        RectangleEdge rangeEdge = plot.getRangeAxisEdge();

        // convert the coordinates to java2d.
        double x2D = domainAxis.valueToJava2D(x, dataArea, domainEdge);
        double yMin2D = rangeAxis.valueToJava2D(yMin, dataArea, rangeEdge);
        double yMax2D = rangeAxis.valueToJava2D(yMax, dataArea, rangeEdge);

        // get the paint information for the series/item
        Paint p = getItemPaint(series, item);
        Stroke s = getItemStroke(series, item);
        
        Line2D line = null;
        PlotOrientation orientation = plot.getOrientation();
        if (orientation == PlotOrientation.HORIZONTAL) {
            line = new Line2D.Double(yMin2D, x2D, yMax2D, x2D);
        }
        else if (orientation == PlotOrientation.VERTICAL) {
            line = new Line2D.Double(x2D, yMin2D, x2D, yMax2D);
        }
        g2.setPaint(p);
        g2.setStroke(s);
        g2.draw(line);
    }
}