blob: 7648270ef4f6e2bfa198d36137f527010f0483bd [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
Joe Onorato1feb3a82009-08-08 22:32:00 -070023// State ======
24#define STATE_ICON_COUNT 0
25#define STATE_SCROLL_X 1
Joe Onorato93839052009-08-06 20:34:32 -070026
Joe Onorato43e7bcf2009-08-08 18:53:53 -070027// Scratch variables ======
28#define SCRATCH_FADE 0
29#define SCRATCH_ZOOM 1
30#define SCRATCH_ROT 2
Joe Onorato93839052009-08-06 20:34:32 -070031
Joe Onorato43e7bcf2009-08-08 18:53:53 -070032// Drawing constants, should be parameters ======
33#define SCREEN_WIDTH 480
34#define SCREEN_HEIGHT 854
35#define COLUMNS_PER_PAGE 4
36#define ROWS_PER_PAGE 4
37#define DIAMETER 8.0f
38
39#define PAGE_PADDING_TOP_PX 80
40#define CELL_PADDING_TOP_PX 5
41#define ICON_HEIGHT_PX 64
42#define ICON_LABEL_GUTTER_PX 5
43#define CELL_PADDING_BOTTOM_PX 5
44#define ROW_GUTTER_PX 10
45
46#define PAGE_PADDING_LEFT_PX 22
47#define CELL_WIDTH_PX 105
48#define ICON_WIDTH_PX 64
49#define COLUMN_GUTTER_PX 5
50#define LABEL_WIDTH_PX 105
51
52int
53count_pages(int iconCount)
Joe Onorato93839052009-08-06 20:34:32 -070054{
Joe Onorato43e7bcf2009-08-08 18:53:53 -070055 int iconsPerPage = COLUMNS_PER_PAGE * ROWS_PER_PAGE;
56 int pages = iconCount / iconsPerPage;
57 if (pages*iconsPerPage != iconCount) {
58 iconCount++;
59 }
60 return iconCount;
Joe Onorato93839052009-08-06 20:34:32 -070061}
62
Joe Onorato43e7bcf2009-08-08 18:53:53 -070063int
64main(void* con, int ft, int launchID)
Joe Onorato93839052009-08-06 20:34:32 -070065{
Joe Onorato43e7bcf2009-08-08 18:53:53 -070066 // Clear to transparent
Joe Onorato93839052009-08-06 20:34:32 -070067 pfClearColor(0.0f, 0.0f, 0.0f, 0.0f);
Joe Onorato93839052009-08-06 20:34:32 -070068
Joe Onorato43e7bcf2009-08-08 18:53:53 -070069 // icons & labels
Joe Onorato1feb3a82009-08-08 22:32:00 -070070 int iconCount = loadI32(ALLOC_STATE, STATE_ICON_COUNT);
Joe Onorato43e7bcf2009-08-08 18:53:53 -070071 int pageCount = count_pages(iconCount);
72
73 float densityScale = 2.0f / SCREEN_WIDTH;
74 float screenTop = SCREEN_HEIGHT/(float)SCREEN_WIDTH; // == (SCREEN_HEIGHT/2)*densityScale;
75
76 float pagePaddingTop = screenTop - (PAGE_PADDING_TOP_PX * densityScale);
77 float pageGutterY = ROW_GUTTER_PX * densityScale;
78 float cellHeight = (CELL_PADDING_TOP_PX + ICON_HEIGHT_PX + ICON_LABEL_GUTTER_PX
79 + loadI32(ALLOC_PARAMS, PARAM_BUBBLE_HEIGHT)
80 + CELL_PADDING_BOTTOM_PX + ROW_GUTTER_PX) * densityScale;
81 float cellPaddingTop = CELL_PADDING_TOP_PX * densityScale;
82 float iconHeight = ICON_HEIGHT_PX * densityScale;
83 float iconLabelGutter = ICON_LABEL_GUTTER_PX * densityScale;
84
85 float pagePaddingLeft = PAGE_PADDING_LEFT_PX * densityScale;
86 float cellWidth = CELL_WIDTH_PX * densityScale;
87 float iconWidth = ICON_WIDTH_PX * densityScale;
88 float columnGutter = COLUMN_GUTTER_PX * densityScale;
89
Joe Onorato43e7bcf2009-08-08 18:53:53 -070090 float labelWidth = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_WIDTH) * densityScale;
91 float labelTextureWidth = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_BITMAP_WIDTH) * densityScale;
92 float labelTextureHeight = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_BITMAP_HEIGHT) * densityScale;
93
Joe Onorato1feb3a82009-08-08 22:32:00 -070094 float pageLeft = -1;
95 int icon = 0;
96 int page;
Joe Onorato93839052009-08-06 20:34:32 -070097
Joe Onorato1feb3a82009-08-08 22:32:00 -070098 int scrollXPx = loadI32(ALLOC_STATE, STATE_SCROLL_X);
99 debugI32("scrollXPx", scrollXPx);
100 pageLeft += scrollXPx * densityScale;
Joe Onorato93839052009-08-06 20:34:32 -0700101
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700102 for (page=0; page<pageCount; page++) {
103 // Bug makes 1.0f alpha fail.
104 color(1.0f, 1.0f, 1.0f, 0.99f);
105
106 float cellTop = pagePaddingTop;
107 int row;
108 for (row=0; row<ROWS_PER_PAGE && icon<iconCount; row++) {
109 float s = pageLeft; // distance along the linear strip of icons in normalized coords
110 s += pagePaddingLeft;
111 int col;
112 for (col=0; col<COLUMNS_PER_PAGE && icon<iconCount; col++) {
113 // icon
114 float iconLeft = s + ((cellWidth-iconWidth)/2.0f);
115 float iconRight = iconLeft + iconWidth;
116 float iconTop = cellTop - cellPaddingTop;
117 float iconBottom = iconTop - iconHeight;
Joe Onorato93839052009-08-06 20:34:32 -0700118
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700119 bindProgramFragment(NAMED_PF);
120 bindProgramFragmentStore(NAMED_PFS);
Joe Onorato93839052009-08-06 20:34:32 -0700121
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700122 bindTexture(NAMED_PF, 0, loadI32(ALLOC_ICON_IDS, icon));
123 drawRect(iconLeft, iconTop, iconRight, iconBottom, 0.0f);
Joe Onorato93839052009-08-06 20:34:32 -0700124
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700125 // label
126 float labelLeft = s + ((cellWidth-labelWidth)/2.0f);
127 float labelTop = iconBottom - iconLabelGutter;
Joe Onorato93839052009-08-06 20:34:32 -0700128
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700129 bindProgramFragment(NAMED_PFText);
130 bindProgramFragmentStore(NAMED_PFSText);
Joe Onorato93839052009-08-06 20:34:32 -0700131
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700132 bindTexture(NAMED_PFText, 0, loadI32(ALLOC_LABEL_IDS, icon));
133 drawRect(labelLeft, labelTop, labelLeft+labelTextureWidth,
134 labelTop-labelTextureHeight, 0.0f);
Joe Onorato93839052009-08-06 20:34:32 -0700135
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700136 s += cellWidth + columnGutter;
137 icon++;
Joe Onorato93839052009-08-06 20:34:32 -0700138 }
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700139 cellTop -= cellHeight;
Joe Onorato93839052009-08-06 20:34:32 -0700140 }
Joe Onorato43e7bcf2009-08-08 18:53:53 -0700141 pageLeft += 2.0f;
Joe Onorato93839052009-08-06 20:34:32 -0700142 }
143
Joe Onorato1feb3a82009-08-08 22:32:00 -0700144 return 1;
Joe Onorato93839052009-08-06 20:34:32 -0700145}
146
147