blob: 428ff786aecc33b9fa267cfacc6cc0196113df79 [file] [log] [blame]
Joe Onorato93839052009-08-06 20:34:32 -07001#pragma version(1)
2#pragma stateVertex(PV)
3#pragma stateFragment(PF)
4#pragma stateFragmentStore(PFS)
5
Joe Onorato43e7bcf2009-08-08 18:53:53 -07006#define PI 3.14159f
7
8// Allocations ======
9#define ALLOC_PARAMS 0
10#define ALLOC_STATE 1
11#define ALLOC_SCRATCH 2
12#define ALLOC_ICON_IDS 3
13#define ALLOC_LABEL_IDS 4
14
15// Variables from java ======
16
17// Parameters ======
18#define PARAM_BUBBLE_WIDTH 0
19#define PARAM_BUBBLE_HEIGHT 1
20#define PARAM_BUBBLE_BITMAP_WIDTH 2
21#define PARAM_BUBBLE_BITMAP_HEIGHT 3
Joe Onorato93839052009-08-06 20:34:32 -070022
23//#define STATE_POS_X 0
24#define STATE_DONE 1
25//#define STATE_PRESSURE 2
26#define STATE_ZOOM 3
27//#define STATE_WARP 4
28#define STATE_ORIENTATION 5
29#define STATE_SELECTION 6
30#define STATE_FIRST_VISIBLE 7
31#define STATE_COUNT 8
32#define STATE_TOUCH 9
33
Joe Onorato43e7bcf2009-08-08 18:53:53 -070034// Scratch variables ======
35#define SCRATCH_FADE 0
36#define SCRATCH_ZOOM 1
37#define SCRATCH_ROT 2
Joe Onorato93839052009-08-06 20:34:32 -070038
Joe Onorato43e7bcf2009-08-08 18:53:53 -070039// Drawing constants, should be parameters ======
40#define SCREEN_WIDTH 480
41#define SCREEN_HEIGHT 854
42#define COLUMNS_PER_PAGE 4
43#define ROWS_PER_PAGE 4
44#define DIAMETER 8.0f
45
46#define PAGE_PADDING_TOP_PX 80
47#define CELL_PADDING_TOP_PX 5
48#define ICON_HEIGHT_PX 64
49#define ICON_LABEL_GUTTER_PX 5
50#define CELL_PADDING_BOTTOM_PX 5
51#define ROW_GUTTER_PX 10
52
53#define PAGE_PADDING_LEFT_PX 22
54#define CELL_WIDTH_PX 105
55#define ICON_WIDTH_PX 64
56#define COLUMN_GUTTER_PX 5
57#define LABEL_WIDTH_PX 105
58
59int
60count_pages(int iconCount)
Joe Onorato93839052009-08-06 20:34:32 -070061{
Joe Onorato43e7bcf2009-08-08 18:53:53 -070062 int iconsPerPage = COLUMNS_PER_PAGE * ROWS_PER_PAGE;
63 int pages = iconCount / iconsPerPage;
64 if (pages*iconsPerPage != iconCount) {
65 iconCount++;
66 }
67 return iconCount;
Joe Onorato93839052009-08-06 20:34:32 -070068}
69
Joe Onorato43e7bcf2009-08-08 18:53:53 -070070int
71main(void* con, int ft, int launchID)
Joe Onorato93839052009-08-06 20:34:32 -070072{
Joe Onorato43e7bcf2009-08-08 18:53:53 -070073 // Clear to transparent
Joe Onorato93839052009-08-06 20:34:32 -070074 pfClearColor(0.0f, 0.0f, 0.0f, 0.0f);
Joe Onorato93839052009-08-06 20:34:32 -070075
Joe Onorato43e7bcf2009-08-08 18:53:53 -070076 // icons & labels
77 int iconCount = loadI32(ALLOC_STATE, STATE_COUNT);
78 int pageCount = count_pages(iconCount);
79
80 float densityScale = 2.0f / SCREEN_WIDTH;
81 float screenTop = SCREEN_HEIGHT/(float)SCREEN_WIDTH; // == (SCREEN_HEIGHT/2)*densityScale;
82
83 float pagePaddingTop = screenTop - (PAGE_PADDING_TOP_PX * densityScale);
84 float pageGutterY = ROW_GUTTER_PX * densityScale;
85 float cellHeight = (CELL_PADDING_TOP_PX + ICON_HEIGHT_PX + ICON_LABEL_GUTTER_PX
86 + loadI32(ALLOC_PARAMS, PARAM_BUBBLE_HEIGHT)
87 + CELL_PADDING_BOTTOM_PX + ROW_GUTTER_PX) * densityScale;
88 float cellPaddingTop = CELL_PADDING_TOP_PX * densityScale;
89 float iconHeight = ICON_HEIGHT_PX * densityScale;
90 float iconLabelGutter = ICON_LABEL_GUTTER_PX * densityScale;
91
92 float pagePaddingLeft = PAGE_PADDING_LEFT_PX * densityScale;
93 float cellWidth = CELL_WIDTH_PX * densityScale;
94 float iconWidth = ICON_WIDTH_PX * densityScale;
95 float columnGutter = COLUMN_GUTTER_PX * densityScale;
96
97 float pageLeft = -1;
98 int icon = 0;
99 int page;
100
101 float labelWidth = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_WIDTH) * densityScale;
102 float labelTextureWidth = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_BITMAP_WIDTH) * densityScale;
103 float labelTextureHeight = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_BITMAP_HEIGHT) * densityScale;
104
105 int scrollXPx = 100;
106 pageLeft -= scrollXPx * densityScale;
Joe Onorato93839052009-08-06 20:34:32 -0700107
108
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700109 for (page=0; page<pageCount; page++) {
110 // Bug makes 1.0f alpha fail.
111 color(1.0f, 1.0f, 1.0f, 0.99f);
112
113 float cellTop = pagePaddingTop;
114 int row;
115 for (row=0; row<ROWS_PER_PAGE && icon<iconCount; row++) {
116 float s = pageLeft; // distance along the linear strip of icons in normalized coords
117 s += pagePaddingLeft;
118 int col;
119 for (col=0; col<COLUMNS_PER_PAGE && icon<iconCount; col++) {
120 // icon
121 float iconLeft = s + ((cellWidth-iconWidth)/2.0f);
122 float iconRight = iconLeft + iconWidth;
123 float iconTop = cellTop - cellPaddingTop;
124 float iconBottom = iconTop - iconHeight;
Joe Onorato93839052009-08-06 20:34:32 -0700125
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700126 bindProgramFragment(NAMED_PF);
127 bindProgramFragmentStore(NAMED_PFS);
Joe Onorato93839052009-08-06 20:34:32 -0700128
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700129 bindTexture(NAMED_PF, 0, loadI32(ALLOC_ICON_IDS, icon));
130 drawRect(iconLeft, iconTop, iconRight, iconBottom, 0.0f);
Joe Onorato93839052009-08-06 20:34:32 -0700131
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700132 // label
133 float labelLeft = s + ((cellWidth-labelWidth)/2.0f);
134 float labelTop = iconBottom - iconLabelGutter;
Joe Onorato93839052009-08-06 20:34:32 -0700135
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700136 bindProgramFragment(NAMED_PFText);
137 bindProgramFragmentStore(NAMED_PFSText);
Joe Onorato93839052009-08-06 20:34:32 -0700138
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700139 bindTexture(NAMED_PFText, 0, loadI32(ALLOC_LABEL_IDS, icon));
140 drawRect(labelLeft, labelTop, labelLeft+labelTextureWidth,
141 labelTop-labelTextureHeight, 0.0f);
Joe Onorato93839052009-08-06 20:34:32 -0700142
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700143 s += cellWidth + columnGutter;
144 icon++;
Joe Onorato93839052009-08-06 20:34:32 -0700145 }
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700146 cellTop -= cellHeight;
Joe Onorato93839052009-08-06 20:34:32 -0700147 }
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700148 pageLeft += 2.0f;
Joe Onorato93839052009-08-06 20:34:32 -0700149 }
150
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700151 return 0;
Joe Onorato93839052009-08-06 20:34:32 -0700152}
153
154