/*************************************************************************
	Draw the list box item in its current state.
*************************************************************************/
void ListboxTextItem::draw(std::vector<GeometryBuffer*>& geometry_buffers, const Rectf& targetRect,
                           float alpha, const Rectf* clipper) const
{
    if (d_selected && d_selectBrush != 0)
    {
        d_selectBrush->render(geometry_buffers, targetRect, clipper, true,
                            d_selectCols, alpha);
    }

    const Font* font = getFont();

    if (!font)
        return;

    glm::vec2 draw_pos(targetRect.getPositionGLM());

    draw_pos.y += CoordConverter::alignToPixels(
        (font->getLineSpacing() - font->getFontHeight()) * 0.5f);

    if (!d_renderedStringValid)
        parseTextString();

    const ColourRect final_colours(ColourRect(0xFFFFFFFF));

    for (size_t i = 0; i < d_renderedString.getLineCount(); ++i)
    {
        d_renderedString.draw(d_owner, i, geometry_buffers, draw_pos, &final_colours, clipper, 0.0f);
        draw_pos.y += d_renderedString.getPixelSize(d_owner, i).d_height;
    }
}
/*************************************************************************
	Draw the list box item in its current state.
*************************************************************************/
void ListboxTextItem::draw(GeometryBuffer& buffer, const Rect& targetRect,
                           float alpha, const Rect* clipper) const
{
    if (d_selected && d_selectBrush != 0)
        d_selectBrush->draw(buffer, targetRect, clipper,
                            getModulateAlphaColourRect(d_selectCols, alpha));

    Font* font = getFont();

    if (!font)
        return;

    Vector2 draw_pos(targetRect.getPosition());

    draw_pos.d_y += PixelAligned(
        (font->getLineSpacing() - font->getFontHeight()) * 0.5f);

    if (!d_renderedStringValid)
        parseTextString();

    const ColourRect final_colours(
        getModulateAlphaColourRect(ColourRect(0xFFFFFFFF), alpha));

    for (size_t i = 0; i < d_renderedString.getLineCount(); ++i)
    {
        d_renderedString.draw(i, buffer, draw_pos, &final_colours, clipper, 0.0f);
        draw_pos.d_y += d_renderedString.getPixelSize(i).d_height;
    }
}
//----------------------------------------------------------------------------//
void LeftAlignedRenderedString::draw(GeometryBuffer& buffer,
                                 const Vector2& position,
                                 const ColourRect* mod_colours,
                                 const Rect* clip_rect) const
{
    Vector2 draw_pos(position);

    for (size_t i = 0; i < d_renderedString->getLineCount(); ++i)
    {
        d_renderedString->draw(i, buffer, draw_pos, mod_colours, clip_rect, 0.0f);
        draw_pos.d_y += d_renderedString->getPixelSize(i).d_height;
    }
}
//----------------------------------------------------------------------------//
void JustifiedRenderedString::draw(const Window* ref_wnd, GeometryBuffer& buffer,
                                   const Vector2f& position,
                                   const ColourRect* mod_colours,
                                   const Rectf* clip_rect) const
{
    Vector2f draw_pos(position);

    for (size_t i = 0; i < d_renderedString->getLineCount(); ++i)
    {
        d_renderedString->draw(ref_wnd, i, buffer, draw_pos, mod_colours,
                               clip_rect, d_spaceExtras[i]);
        draw_pos.d_y += d_renderedString->getPixelSize(ref_wnd, i).d_height;
    }
}
예제 #5
0
//----------------------------------------------------------------------------//
void JustifiedRenderedString::draw(const Window* ref_wnd, std::vector<GeometryBuffer*>& geometry_buffers,
                                   const glm::vec2& position,
                                   const ColourRect* mod_colours,
                                   const Rectf* clip_rect) const
{
    glm::vec2 draw_pos(position);

    for (size_t i = 0; i < d_renderedString->getLineCount(); ++i)
    {
        d_renderedString->draw(ref_wnd, i, geometry_buffers, draw_pos, mod_colours,
                               clip_rect, d_spaceExtras[i]);
        draw_pos.y += d_renderedString->getPixelSize(ref_wnd, i).d_height;
    }
}
예제 #6
0
/*************************************************************************
    Draw the tree item in its current state.
*************************************************************************/
void TreeItem::draw(GeometryBuffer& buffer, const Rect &targetRect,
                    float alpha, const Rect *clipper) const
{
    Rect finalRect(targetRect);

    if (d_iconImage != 0)
    {
        Rect finalPos(finalRect);
        finalPos.setWidth(targetRect.getHeight());
        finalPos.setHeight(targetRect.getHeight());
        d_iconImage->draw(buffer, finalPos, clipper,
                          ColourRect(colour(1,1,1,alpha)));
        finalRect.d_left += targetRect.getHeight();
    }

    if (d_selected && d_selectBrush != 0)
        d_selectBrush->draw(buffer, finalRect, clipper,
                            getModulateAlphaColourRect(d_selectCols, alpha));

    Font* font = getFont();

    if (!font)
        return;

    Vector2 draw_pos(finalRect.getPosition());
    draw_pos.d_y -= (font->getLineSpacing() - font->getBaseline()) * 0.5f;

    if (!d_renderedStringValid)
        parseTextString();

    const ColourRect final_colours(
        getModulateAlphaColourRect(ColourRect(0xFFFFFFFF), alpha));

    for (size_t i = 0; i < d_renderedString.getLineCount(); ++i)
    {
        d_renderedString.draw(i, buffer, draw_pos, &final_colours, clipper, 0.0f);
        draw_pos.d_y += d_renderedString.getPixelSize(i).d_height;
    }
}
예제 #7
0
static SimpleSpiceUpdate *test_spice_create_update_draw(uint32_t surface_id, int t)
{
    int top, left;
    uint8_t *dst;
    uint8_t *bitmap;
    int bw, bh;
    int i;
    QXLRect bbox;

    draw_pos(t, &left, &top);
    if ((t % angle_parts) == 0) {
        c_i++;
    }

    if (surface_id != 0) {
        color = (color + 1) % 2;
    } else {
        color = surface_id;
    }

    unique++;

    bw       = g_primary_width/SINGLE_PART;
    bh       = 48;

    bitmap = dst = malloc(bw * bh * 4);
    //printf("allocated %p\n", dst);

    for (i = 0 ; i < bh * bw ; ++i, dst+=4) {
        *dst = (color+i % 255);
        *(dst+((1+c_i)%3)) = 255 - color;
        *(dst+((2+c_i)%3)) = (color * (color + i)) & 0xff;
        *(dst+((3+c_i)%3)) = 0;
    }

    bbox.left = left; bbox.top = top;
    bbox.right = left + bw; bbox.bottom = top + bh;
    return test_spice_create_update_from_bitmap(surface_id, bbox, bitmap, 0, NULL);
}
예제 #8
0
void SampleViewer::draw(const Point& p_pos,const Size& p_size,const Rect& p_exposed) {

    Painter *p=get_painter();
    if (!sm->check(sample) || sm->get_size(sample)==0) {

        p->draw_fill_rect(Point(),p_size,color(COLOR_SAMPLE_EDITOR_NOSAMPLE));
        return;
    }

    AudioLock::begin();

    if (sm->lock_data(sample)) {

        AudioLock::end();

        ERR_PRINT("Can't lock sample!");
        return;
    }

    int sample_len=sm->get_size(sample);
    bool is_16=sm->is_16bits( sample );
    bool is_stereo=sm->is_stereo( sample );
    int loop_begin=sm->get_loop_begin( sample );
    int loop_end=sm->get_loop_end( sample );

    void *data_ptr=sm->get_data(sample);

    if (data_ptr==0) {

        AudioLock::end();

        ERR_PRINT("data_ptr==NULL , serious bug!");
        return;

    }

    int chans=is_stereo?2:1;

    int from=offset;
    int len=(int)(sample_len*zoom);


    for (int c=0; c<chans; c++) {

        Sint16 pre=0;


        Sint16 prev_max_peak=0;
        Sint16 prev_min_peak=0;
        Sint16 max_peak=-32768;
        Sint16 min_peak=32767; //pretty difficult values..
        int prev_screen_pos=0;
        bool has_loop_pos=false;
        for (int i=0; i<len; i++) {

            int pos=offset+i;
            if (pos>=sample_len)
                break; //abort just in case
            Sint16 val=0;
            if (is_16) {

                val=((Sint16*)data_ptr)[(chans)*pos+c];

            } else {

                val=((Sint8*)data_ptr)[(chans)*pos+c];
                val<<=8;
            }


            if (pos==loop_begin || pos==loop_end)
                has_loop_pos=true;

            if (val<min_peak)
                min_peak=val;

            if (val>max_peak)
                max_peak=val;

            int screen_pos=i*p_size.width/len;

            if (i==len-1)
                screen_pos=p_size.width;

            if (prev_screen_pos!=screen_pos || (i==len-1)) {

                bool is_selected=selection && selection->is_active() && pos>=selection->get_begin() && pos<=selection->get_end();

                for (int sp=(prev_screen_pos+1); sp<=screen_pos; sp++)
                    draw_pos(prev_min_peak,prev_max_peak,min_peak,max_peak,sp,has_loop_pos,is_selected,c);

                has_loop_pos=false;
                prev_min_peak=min_peak;
                prev_max_peak=max_peak;
                max_peak=-32768;
                min_peak=32767; //pretty difficult values..
                prev_screen_pos=screen_pos;

            }
        }
    }


    sm->unlock_data(sample);
    AudioLock::end();
}