| Line 71... |
Line 71... |
| 71 |
rdata->accumulator -= distance * factor;
|
71 |
rdata->accumulator -= distance * factor;
|
| 72 |
rdata->viewposition += distance;
|
72 |
rdata->viewposition += distance;
|
| 73 |
rdata->lastupdate = time;
|
73 |
rdata->lastupdate = time;
|
| 74 |
if (data->position - rdata->viewposition) rc = CHOOSER_RESULT_REDRAW;
|
74 |
if (data->position - rdata->viewposition) rc = CHOOSER_RESULT_REDRAW;
|
| 75 |
else rdata->lastupdate = 0;
|
75 |
else rdata->lastupdate = 0;
|
| - |
|
76 |
const struct chooser_item* selected = data->selected;
|
| 76 |
if (params->copy_dest.buf.addr == params->fill_dest.loc.buf.addr
|
77 |
if (params->copy_dest.buf.addr == params->fill_dest.loc.buf.addr
|
| 77 |
&& params->copy_dest.buf.stride == params->fill_dest.loc.buf.stride
|
78 |
&& params->copy_dest.buf.stride == params->fill_dest.loc.buf.stride
|
| 78 |
&& params->copy_dest.pos.x == params->fill_dest.loc.pos.x
|
79 |
&& params->copy_dest.pos.x == params->fill_dest.loc.pos.x
|
| 79 |
&& params->copy_dest.pos.y == params->fill_dest.loc.pos.y
|
80 |
&& params->copy_dest.pos.y == params->fill_dest.loc.pos.y
|
| 80 |
&& params->copy_src.size.x == params->fill_dest.size.x
|
81 |
&& params->copy_src.size.x == params->fill_dest.size.x
|
| Line 145... |
Line 146... |
| 145 |
int iiv = params->iconsinview;
|
146 |
int iiv = params->iconsinview;
|
| 146 |
const struct chooser_renderer_iconflow_itemdata* iparams;
|
147 |
const struct chooser_renderer_iconflow_itemdata* iparams;
|
| 147 |
const struct chooser_item* item = data->info->items;
|
148 |
const struct chooser_item* item = data->info->items;
|
| 148 |
while (true)
|
149 |
while (true)
|
| 149 |
{
|
150 |
{
|
| 150 |
if (item == data->selected && dir == 1)
|
151 |
if (item == selected && dir == 1)
|
| 151 |
{
|
152 |
{
|
| 152 |
dir = -1;
|
153 |
dir = -1;
|
| 153 |
item = &data->info->items[data->info->itemcount - 1];
|
154 |
item = &data->info->items[data->info->itemcount - 1];
|
| 154 |
pos = spi * data->info->itemcount - spi / 2;
|
155 |
pos = spi * data->info->itemcount - spi / 2;
|
| 155 |
}
|
156 |
}
|
| 156 |
iparams = (const struct chooser_renderer_iconflow_itemdata*)(item->renderparams);
|
157 |
iparams = (const struct chooser_renderer_iconflow_itemdata*)(item->renderparams);
|
| 157 |
const struct libui_surface* icon;
|
158 |
const struct libui_surface* icon;
|
| 158 |
if (item == data->selected) icon = &iparams->icon_selected;
|
159 |
if (item == selected) icon = &iparams->icon_selected;
|
| 159 |
else icon = &iparams->icon;
|
160 |
else icon = &iparams->icon;
|
| 160 |
int ix, iy, io;
|
161 |
int ix, iy, io;
|
| 161 |
int dist = pos - vpos;
|
162 |
int dist = pos - vpos;
|
| 162 |
chooser_renderer_iconflow_geticondata(x, y, w, h, spi * iiv, dist, icon, &ix, &iy, &io);
|
163 |
chooser_renderer_iconflow_geticondata(x, y, w, h, spi * iiv, dist, icon, &ix, &iy, &io);
|
| 163 |
if (item == data->selected)
|
164 |
if (item == selected)
|
| 164 |
{
|
165 |
{
|
| 165 |
io = 255;
|
166 |
io = 255;
|
| 166 |
if (iparams->text && iparams->text_color)
|
167 |
if (iparams->text && iparams->text_color)
|
| 167 |
rendertext(buf, params->text_pos.x - strlen(iparams->text) * get_font_width() / 2,
|
168 |
rendertext(buf, params->text_pos.x - strlen(iparams->text) * get_font_width() / 2,
|
| 168 |
params->text_pos.y, stride, iparams->text_color, 0, iparams->text);
|
169 |
params->text_pos.y, stride, iparams->text_color, 0, iparams->text);
|
| 169 |
}
|
170 |
}
|
| 170 |
if (icon->loc.buf.addr && io && ix >= x && iy >= y
|
171 |
if (icon->loc.buf.addr && io && ix >= x && iy >= y
|
| 171 |
&& ix + icon->size.x <= x + w && iy + icon->size.y <= y + h)
|
172 |
&& ix + icon->size.x <= x + w && iy + icon->size.y <= y + h)
|
| 172 |
blenda(icon->size.x, icon->size.y, io, buf, ix, iy, stride, buf, ix, iy, stride,
|
173 |
blenda(icon->size.x, icon->size.y, io, buf, ix, iy, stride, buf, ix, iy, stride,
|
| 173 |
icon->loc.buf.addr, icon->loc.pos.x, icon->loc.pos.y, icon->loc.buf.stride);
|
174 |
icon->loc.buf.addr, icon->loc.pos.x, icon->loc.pos.y, icon->loc.buf.stride);
|
| 174 |
if (item == data->selected) break;
|
175 |
if (item == selected) break;
|
| 175 |
item += dir;
|
176 |
item += dir;
|
| 176 |
pos += dir * spi;
|
177 |
pos += dir * spi;
|
| 177 |
}
|
178 |
}
|
| 178 |
if (params->preblit && params->preblit(data)) return rc;
|
179 |
if (params->preblit && params->preblit(data)) return rc;
|
| 179 |
displaylcd(params->blit_dest.x, params->blit_dest.y, params->blit_src.size.x,
|
180 |
displaylcd(params->blit_dest.x, params->blit_dest.y, params->blit_src.size.x,
|
| Line 188... |
Line 189... |
| 188 |
{
|
189 |
{
|
| 189 |
if (x < 0 || y < 0) return NULL;
|
190 |
if (x < 0 || y < 0) return NULL;
|
| 190 |
const struct chooser_renderer_iconflow_params* params;
|
191 |
const struct chooser_renderer_iconflow_params* params;
|
| 191 |
params = (const struct chooser_renderer_iconflow_params*)(data->info->rendererparams);
|
192 |
params = (const struct chooser_renderer_iconflow_params*)(data->info->rendererparams);
|
| 192 |
if (x >= params->viewport.size.x || y >= params->viewport.size.y) return NULL;
|
193 |
if (x >= params->viewport.size.x || y >= params->viewport.size.y) return NULL;
|
| - |
|
194 |
const struct chooser_item* selected = data->selected;
|
| 193 |
struct chooser_renderer_iconflow_data* rdata;
|
195 |
struct chooser_renderer_iconflow_data* rdata;
|
| 194 |
rdata = (struct chooser_renderer_iconflow_data*)(data->rendererdata);
|
196 |
rdata = (struct chooser_renderer_iconflow_data*)(data->rendererdata);
|
| 195 |
const struct chooser_item* result = NULL;
|
197 |
const struct chooser_item* result = NULL;
|
| 196 |
int vx = params->viewport.loc.pos.x;
|
198 |
int vx = params->viewport.loc.pos.x;
|
| 197 |
int vy = params->viewport.loc.pos.y;
|
199 |
int vy = params->viewport.loc.pos.y;
|
| Line 204... |
Line 206... |
| 204 |
int iiv = params->iconsinview;
|
206 |
int iiv = params->iconsinview;
|
| 205 |
const struct chooser_renderer_iconflow_itemdata* iparams;
|
207 |
const struct chooser_renderer_iconflow_itemdata* iparams;
|
| 206 |
const struct chooser_item* item = data->info->items;
|
208 |
const struct chooser_item* item = data->info->items;
|
| 207 |
while (true)
|
209 |
while (true)
|
| 208 |
{
|
210 |
{
|
| 209 |
if (item == data->selected && dir == 1)
|
211 |
if (item == selected && dir == 1)
|
| 210 |
{
|
212 |
{
|
| 211 |
dir = -1;
|
213 |
dir = -1;
|
| 212 |
item = &data->info->items[data->info->itemcount - 1];
|
214 |
item = &data->info->items[data->info->itemcount - 1];
|
| 213 |
pos = spi * data->info->itemcount - spi / 2;
|
215 |
pos = spi * data->info->itemcount - spi / 2;
|
| 214 |
}
|
216 |
}
|
| 215 |
iparams = (const struct chooser_renderer_iconflow_itemdata*)(item->renderparams);
|
217 |
iparams = (const struct chooser_renderer_iconflow_itemdata*)(item->renderparams);
|
| 216 |
const struct libui_surface* icon;
|
218 |
const struct libui_surface* icon;
|
| 217 |
if (item == data->selected) icon = &iparams->icon_selected;
|
219 |
if (item == selected) icon = &iparams->icon_selected;
|
| 218 |
else icon = &iparams->icon;
|
220 |
else icon = &iparams->icon;
|
| 219 |
int ix, iy, o;
|
221 |
int ix, iy, o;
|
| 220 |
int dist = pos - vpos;
|
222 |
int dist = pos - vpos;
|
| 221 |
chooser_renderer_iconflow_geticondata(vx, vy, vw, vh, spi * iiv, dist, icon, &ix, &iy, &o);
|
223 |
chooser_renderer_iconflow_geticondata(vx, vy, vw, vh, spi * iiv, dist, icon, &ix, &iy, &o);
|
| 222 |
if (x >= ix && y >= ix && x < ix + icon->size.x && y < iy + icon->size.y) result = item;
|
224 |
if (x >= ix && y >= ix && x < ix + icon->size.x && y < iy + icon->size.y) result = item;
|
| 223 |
if (item == data->selected) break;
|
225 |
if (item == selected) break;
|
| 224 |
item += dir;
|
226 |
item += dir;
|
| 225 |
pos += dir * spi;
|
227 |
pos += dir * spi;
|
| 226 |
}
|
228 |
}
|
| 227 |
return result;
|
229 |
return result;
|
| 228 |
}
|
230 |
}
|