Subversion Repositories freemyipod

Rev

Rev 695 | Rev 820 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 695 Rev 703
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
}