public ArrayList<Integer> createRasterLines() {
    float scale = editorView.getmScaleFactor();
    ArrayList<Integer> gridLines = new ArrayList<Integer>();

    for (int i = 0; i < horizontalRasterCT / scale; i++) {
      gridLines.add(
          (Integer)
              (i * RASTER_HORIZONTAL_WIDTH
                  - RASTER_HORIZONTAL_WIDTH / 2
                  + mOffsetX % RASTER_HORIZONTAL_WIDTH
                  - mOffsetX));
    }

    return gridLines;
  }
  public void draw(Canvas canvas) {
    if (rasterOn) {
      horizontalRasterCT = (canvas.getWidth() / RASTER_HORIZONTAL_WIDTH) + 3;

      Paint paint = new Paint();
      paint.setPathEffect(new DashPathEffect(new float[] {10, 3, 6, 3}, 1));
      float scale = editorView.getmScaleFactor();

      if ((snapMode == SNAP_OFF) || (snapMode == SNAP_RASTER)) {
        paint.setColor(Color.BLUE);

        ArrayList<Integer> gridLines = createRasterLines();

        for (int i = 0; i < gridLines.size(); i++) {
          canvas.drawLine(
              gridLines.get(i),
              (int) ((0 - mOffsetY) / scale),
              gridLines.get(i),
              (int) ((canvas.getHeight() - mOffsetY) / scale),
              paint);
        }
      }

      if (snapMode == SNAP_GRID) {
        paint.setColor(Color.RED);

        for (AbstractElement e : tweetFlow.getmElements().values()) {
          if (e instanceof ServiceRequest) {
            canvas.drawLine(
                e.getMiddleX(),
                (int) ((0 - mOffsetY) / scale),
                e.getMiddleX(),
                (int) ((canvas.getHeight() - mOffsetY) / scale),
                paint);
          }
        }
      }
    }
  }