// Path: app/src/main/java/com/google/android/diskusage/Cursor.java
// public class Cursor {
//   FileSystemEntry root;
//   public FileSystemEntry position;
//   public long top;
//   public int depth;
// 
//   Cursor(FileSystemState state,
//       FileSystemEntry root) {
//     this.root = root;
// 
//     if (root.children == null || root.children.length == 0) {
//       throw new RuntimeException("no place for position");
//     }
//     position = root.children[0]; 
//     depth = 0;
//     top = 0;
//     updateTitle(state);
//   }
// 
//   public void updateTitle(FileSystemState state) {
//     state.mainThreadAction.updateTitle(position);
//   }
// 
// 
//   void down(FileSystemState view) {
//     FileSystemEntry newCursor = position.getNext();
//     if (newCursor == position) return;
//     view.invalidate(this);
//     top += position.getSizeForRendering();
//     position = newCursor;
//     view.invalidate(this);
//     updateTitle(view);
//   }
// 
//   void up(FileSystemState view) {
//     FileSystemEntry newCursor = position.getPrev();
//     if (newCursor == position) return;
//     view.invalidate(this);
//     top -= newCursor.getSizeForRendering();
//     position = newCursor;
//     view.invalidate(this);
//     updateTitle(view);
//   }
// 
//   void right(FileSystemState state) {
//     if (position.children == null) return;
//     if (position.children.length == 0) return;
//     state.invalidate(this);
//     position = position.children[0];
//     depth++;
//     // Log.d("Sample", "position depth = " + depth);
//     state.invalidate(this);
//     updateTitle(state);
//   }
// 
//   boolean left(FileSystemState state) {
//     if (position.parent == root) return false;
//     state.invalidate(this);
//     position = position.parent;
//     top = root.getOffset(position);
//     depth--;
//     // Log.d("Sample", "position depth = " + depth);
//     state.invalidate(this);
//     updateTitle(state);
//     return true;
//   }
// 
//   void set(FileSystemState state, FileSystemEntry newpos) {
//     if (newpos == root) throw new RuntimeException("will break zoomOut()");
//     state.invalidate(this);
//     position = newpos;
//     depth = root.depth(position) - 1;
//     // Log.d("Sample", "position depth = " + depth);
//     top = root.getOffset(position);
//     state.invalidate(this);
//     updateTitle(state);
//   }
// 
//   void refresh(FileSystemState view) {
//     set(view, position);
//   }
// }
// 
// Path: app/src/main/java/com/google/android/diskusage/opengl/DrawingCache.java
// public class DrawingCache {
//   private FileSystemEntry entry;
//   private String sizeString;
//   public RenderingThread.TextPixels textPixels;
//   public RenderingThread.TextPixels sizePixels;
// 
//   public DrawingCache(FileSystemEntry entry) {
//     this.entry = entry;
//   }
//   
//   public String getSizeString() {
//     if (sizeString != null) {
//       return sizeString;
//     }
//     String sizeString = entry.sizeString();
//     this.sizeString = sizeString;
//     return sizeString;
//   }
// 
//   public void resetSizeString() {
//     sizeString = null;
//     sizePixels = null;
//   }
//   
//   public void drawText(RenderingThread rt, float x0, float y0, int elementWidth) {
//     if (textPixels == null) {
//       textPixels = new TextPixels(entry.name);
//     }
//     textPixels.draw(rt, x0, y0, elementWidth);
//   }
//   
//   public void drawSize(RenderingThread rt, float x0, float y0, int elementWidth) {
//     if (sizePixels == null) {
//       sizePixels = new TextPixels(getSizeString());
//     }
//     sizePixels.draw(rt, x0, y0, elementWidth);
//   }
// }


import android.graphics.Rect;
import android.util.Log;
import com.google.android.diskusage.Cursor;
import com.google.android.diskusage.R;
import com.google.android.diskusage.opengl.DrawingCache;
import com.google.android.diskusage.opengl.RenderingThread;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
            float pos2 = pos - ascent;

            DrawingCache cache = c.getDrawingCache();
            String sizeString = cache.getSizeString();
            int cliplen = fg2.breakText(c.name, true, elementWidth - 4, null);
            String clippedName = c.name.substring(0, cliplen);
            canvas.drawText(clippedName,  xoffset + 2, pos1, textPaintFolder);
            canvas.drawText(sizeString, xoffset + 2, pos2, textPaintFolder);
          } else if (bottom - top > fontSize0) {
            int cliplen = fg2.breakText(c.name, true, elementWidth - 4, null);
            String clippedName = c.name.substring(0, cliplen);
            canvas.drawText(clippedName, xoffset + 2,
                (top + bottom - ascent - descent) / 2,
                c.children == null ? textPaintFile : textPaintFolder);
          }
      }

      child_clipTop -= csize;
      child_clipBottom -= csize;
      yoffset = bottom;
    }
  }

  private static void paintGPU(long parent_size, FileSystemEntry[] entries,
      RenderingThread rt, float xoffset, float yoffset, float yscale,
      long clipLeft, long clipRight, long clipTop, long clipBottom,
      int screenHeight) {

    FileSystemEntry children[] = entries;
    int len = children.length;
// Path: app/src/main/java/com/google/android/diskusage/Cursor.java
// public class Cursor {
//   FileSystemEntry root;
//   public FileSystemEntry position;
//   public long top;
//   public int depth;
// 
//   Cursor(FileSystemState state,
//       FileSystemEntry root) {
//     this.root = root;
// 
//     if (root.children == null || root.children.length == 0) {
//       throw new RuntimeException("no place for position");
//     }
//     position = root.children[0]; 
//     depth = 0;
//     top = 0;
//     updateTitle(state);
//   }
// 
//   public void updateTitle(FileSystemState state) {
//     state.mainThreadAction.updateTitle(position);
//   }
// 
// 
//   void down(FileSystemState view) {
//     FileSystemEntry newCursor = position.getNext();
//     if (newCursor == position) return;
//     view.invalidate(this);
//     top += position.getSizeForRendering();
//     position = newCursor;
//     view.invalidate(this);
//     updateTitle(view);
//   }
// 
//   void up(FileSystemState view) {
//     FileSystemEntry newCursor = position.getPrev();
//     if (newCursor == position) return;
//     view.invalidate(this);
//     top -= newCursor.getSizeForRendering();
//     position = newCursor;
//     view.invalidate(this);
//     updateTitle(view);
//   }
// 
//   void right(FileSystemState state) {
//     if (position.children == null) return;
//     if (position.children.length == 0) return;
//     state.invalidate(this);
//     position = position.children[0];
//     depth++;
//     // Log.d("Sample", "position depth = " + depth);
//     state.invalidate(this);
//     updateTitle(state);
//   }
// 
//   boolean left(FileSystemState state) {
//     if (position.parent == root) return false;
//     state.invalidate(this);
//     position = position.parent;
//     top = root.getOffset(position);
//     depth--;
//     // Log.d("Sample", "position depth = " + depth);
//     state.invalidate(this);
//     updateTitle(state);
//     return true;
//   }
// 
//   void set(FileSystemState state, FileSystemEntry newpos) {
//     if (newpos == root) throw new RuntimeException("will break zoomOut()");
//     state.invalidate(this);
//     position = newpos;
//     depth = root.depth(position) - 1;
//     // Log.d("Sample", "position depth = " + depth);
//     top = root.getOffset(position);
//     state.invalidate(this);
//     updateTitle(state);
//   }
// 
//   void refresh(FileSystemState view) {
//     set(view, position);
//   }
// }
// 
// Path: app/src/main/java/com/google/android/diskusage/opengl/DrawingCache.java
// public class DrawingCache {
//   private FileSystemEntry entry;
//   private String sizeString;
//   public RenderingThread.TextPixels textPixels;
//   public RenderingThread.TextPixels sizePixels;
// 
//   public DrawingCache(FileSystemEntry entry) {
//     this.entry = entry;
//   }
//   
//   public String getSizeString() {
//     if (sizeString != null) {
//       return sizeString;
//     }
//     String sizeString = entry.sizeString();
//     this.sizeString = sizeString;
//     return sizeString;
//   }
// 
//   public void resetSizeString() {
//     sizeString = null;
//     sizePixels = null;
//   }
//   
//   public void drawText(RenderingThread rt, float x0, float y0, int elementWidth) {
//     if (textPixels == null) {
//       textPixels = new TextPixels(entry.name);
//     }
//     textPixels.draw(rt, x0, y0, elementWidth);
//   }
//   
//   public void drawSize(RenderingThread rt, float x0, float y0, int elementWidth) {
//     if (sizePixels == null) {
//       sizePixels = new TextPixels(getSizeString());
//     }
//     sizePixels.draw(rt, x0, y0, elementWidth);
//   }
// }


// Path: app/src/main/java/com/google/android/diskusage/entity/FileSystemEntry.java
import android.graphics.Rect;
import android.util.Log;
import com.google.android.diskusage.Cursor;
import com.google.android.diskusage.R;
import com.google.android.diskusage.opengl.DrawingCache;
import com.google.android.diskusage.opengl.RenderingThread;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

            float pos2 = pos - ascent;

            DrawingCache cache = c.getDrawingCache();
            String sizeString = cache.getSizeString();
            int cliplen = fg2.breakText(c.name, true, elementWidth - 4, null);
            String clippedName = c.name.substring(0, cliplen);
            canvas.drawText(clippedName,  xoffset + 2, pos1, textPaintFolder);
            canvas.drawText(sizeString, xoffset + 2, pos2, textPaintFolder);
          } else if (bottom - top > fontSize0) {
            int cliplen = fg2.breakText(c.name, true, elementWidth - 4, null);
            String clippedName = c.name.substring(0, cliplen);
            canvas.drawText(clippedName, xoffset + 2,
                (top + bottom - ascent - descent) / 2,
                c.children == null ? textPaintFile : textPaintFolder);
          }
      }

      child_clipTop -= csize;
      child_clipBottom -= csize;
      yoffset = bottom;
    }
  }

  private static void paintGPU(long parent_size, FileSystemEntry[] entries,
      RenderingThread rt, float xoffset, float yoffset, float yscale,
      long clipLeft, long clipRight, long clipTop, long clipBottom,
      int screenHeight) {

    FileSystemEntry children[] = entries;
    int len = children.length;
    long child_clipLeft = clipLeft - elementWidth;