projects
/
vrfileman
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
better icon placement
[vrfileman]
/
src
/
fs.cc
diff --git
a/src/fs.cc
b/src/fs.cc
index
b8f7420
..
0da07e5
100644
(file)
--- a/
src/fs.cc
+++ b/
src/fs.cc
@@
-4,6
+4,7
@@
#include <errno.h>
#include <string>
#include <map>
#include <errno.h>
#include <string>
#include <map>
+#include <algorithm>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h>
@@
-61,11
+62,22
@@
static Vec3 icon_pos(int row, int col, int ncols, float row_spacing, float radiu
return Vec3(x, y, z);
}
return Vec3(x, y, z);
}
+static float icon_angle(int col, int ncols, float max_angle = 0.0f)
+{
+ if(max_angle > 0) {
+ return max_angle * ((float)col / (float)(ncols - 1) - 0.5);
+ }
+ return 2.0 * M_PI * (float)col / (float)ncols;
+}
+
void draw_fs()
{
void draw_fs()
{
- static const int ncols = 8;
static const float row_spacing = 2.0;
static const float radius = 5;
static const float row_spacing = 2.0;
static const float radius = 5;
+ static const float umax = 0.42;
+ static const float max_icon_angle = M_PI * 2.0 * umax;
+
+ int max_ncols = std::max<int>(1, umax * 16);
Mat4 base_xform;
base_xform.rotate(time_sec, 0, 0);
Mat4 base_xform;
base_xform.rotate(time_sec, 0, 0);
@@
-75,8
+87,10
@@
void draw_fs()
glUseProgram(0);
glDisable(GL_TEXTURE_2D);
glUseProgram(0);
glDisable(GL_TEXTURE_2D);
- int first = start_child % ncols;
int nchildren = (int)cur_node->children.size();
int nchildren = (int)cur_node->children.size();
+ int ncols = std::min(cur_node->nfiles, max_ncols);
+
+ int first = start_child % ncols;
int col = 0, row = 0;
for(int i=0; i<nchildren; i++) {
int col = 0, row = 0;
for(int i=0; i<nchildren; i++) {
@@
-87,7
+101,7
@@
void draw_fs()
continue;
}
continue;
}
- float angle = -2.0 * M_PI * (float)col / (float)ncols;
+ float angle = icon_angle(col, ncols, max_icon_angle);
Mat4 xform = base_xform;
xform.translate(0, row * row_spacing, -radius);
Mat4 xform = base_xform;
xform.translate(0, row * row_spacing, -radius);
@@
-179,6
+193,7
@@
FSNode::FSNode()
type = FSTYPE_UNKNOWN;
size = 0;
parent = 0;
type = FSTYPE_UNKNOWN;
size = 0;
parent = 0;
+ nfiles = ndirs = 0;
}
bool FSNode::expand()
}
bool FSNode::expand()
@@
-203,6
+218,15
@@
bool FSNode::expand()
if(!node) continue;
children.push_back(node);
if(!node) continue;
children.push_back(node);
+ switch(node->type) {
+ case FSTYPE_FILE:
+ ++nfiles;
+ break;
+ case FSTYPE_DIR:
+ ++ndirs;
+ default:
+ break;
+ }
}
printf("expanded %d children\n", (int)children.size());
}
printf("expanded %d children\n", (int)children.size());