void MaterialWindow::OnPaint(wxPaintEvent &WXUNUSED(event))
{
    wxBufferedPaintDC bpdc(this);
    wxGCDC gdc;
    wxGraphicsRenderer* const renderer = wxGraphicsRenderer::GetDefaultRenderer();
    wxGraphicsContext* context;
    if ( wxMemoryDC *memdc = wxDynamicCast(&bpdc, wxMemoryDC) )
    {
        context = renderer->CreateContext(*memdc);
    }
    gdc.SetGraphicsContext(context);

    // Draw Background
    gdc.SetBackground(wxBrush(wxColour(38, 38, 38)));
    gdc.Clear();

    // Draw Background Grid
    int gridOffsetX = (int)mWindowX % 20;
    int gridOffsetY = (int)mWindowY % 20;
    gdc.SetPen(wxPen( wxColour(128, 128, 128, 128), 1) );
    wxSize windowSize = GetSize();
    // Vertical Lines
    for(int x = 0; x < (windowSize.x + 40); x += 20)
        gdc.DrawLine(gridOffsetX + x - 20, gridOffsetY - 20, gridOffsetX + x - 20, gridOffsetY + windowSize.y + 40);
    // Horizontal Lines
    for(int y = 0; y < (windowSize.y + 40); y += 20)
        gdc.DrawLine(gridOffsetX - 20, gridOffsetY + y - 20, gridOffsetX + windowSize.x + 40, gridOffsetY + y - 20);

    // Draw Nodes
    for(S32 n = 0; n < nodeList.size(); ++n )
    {
        Node* node = &nodeList[n];
        drawNode(gdc, node);
    }

    // Draw Connections
    for(S32 n = 0; n < connectionList.size(); ++n )
    {
        Connection* connection = &connectionList[n];
        drawConnection(gdc, context, connection);
    }
}
Example #2
0
void CScrollBar::OnPaint(wxPaintEvent& WXUNUSED(event))
{
    int w, h, aw, ah, new_aw, new_ah, tw, th, new_tw, new_th, tx, prev_tx = m_rcSBT.x, dr;
    wxBitmap newSBLA, newSBRA, newSBT, newSBLC, newSBRC;
    bool isRes = false;
    this->GetClientSize(&w, &h);

    //wxPaintDC dc( this );
    wxBitmap bmp(w, h);
    wxMemoryDC dc(bmp);

    aw = m_SBLA.GetWidth();
    ah = m_SBLA.GetHeight();

    new_ah = h;
    new_aw = (int)((double)(aw*new_ah)/(double)ah);

    tw = m_SBT.GetWidth();
    th = m_SBT.GetHeight();

    new_th = h;
    new_tw = (int)((double)(tw*new_th)/(double)th);

    dr = w - 2*new_aw - new_tw;
    tx = new_aw + (int)((double)((m_pos-m_min_pos)*dr)/(double)m_range);

    m_rcSBLA.x = 0;
    m_rcSBLA.y = 0;
    m_rcSBLA.width = new_aw;
    m_rcSBLA.height = new_ah;

    m_rcSBRA.x = w-new_aw;
    m_rcSBRA.y = 0;
    m_rcSBRA.width = new_aw;
    m_rcSBRA.height = new_ah;

    m_rcSBLC.x = new_aw;
    m_rcSBLC.y = 0;
    m_rcSBLC.width = tx-new_aw;
    m_rcSBLC.height = h;

    m_rcSBT.x = tx;
    m_rcSBT.y = 0;
    m_rcSBT.width = new_tw;
    m_rcSBT.height = new_th;

    m_rcSBRC.x = tx+new_tw;
    m_rcSBRC.y = 0;
    m_rcSBRC.width = w-(tx+new_tw)-new_aw;
    m_rcSBRC.height = h;

    newSBLA = wxBitmap(m_SBLA.Scale(m_rcSBLA.width, m_rcSBLA.height, wxIMAGE_QUALITY_HIGH));
    if (m_rcSBLC.width > 0)
    {
        newSBLC = wxBitmap(m_SBLC.Scale(m_rcSBLC.width, m_rcSBLC.height, wxIMAGE_QUALITY_HIGH));
    }
    newSBT = wxBitmap(m_SBT.Scale(m_rcSBT.width, m_rcSBT.height, wxIMAGE_QUALITY_HIGH));
    if (m_rcSBRC.width > 0)
    {
        newSBRC = wxBitmap(m_SBRC.Scale(m_rcSBRC.width, m_rcSBRC.height, wxIMAGE_QUALITY_HIGH));
    }
    newSBRA = wxBitmap(m_SBRA.Scale(m_rcSBRA.width, m_rcSBRA.height, wxIMAGE_QUALITY_HIGH));

    dc.DrawBitmap(newSBLA, m_rcSBLA.x, m_rcSBLA.y);
    if (m_rcSBLC.width > 0)
    {
        dc.DrawBitmap(newSBLC, m_rcSBLC.x, m_rcSBLC.y);
    }
    dc.DrawBitmap(newSBT, m_rcSBT.x, m_rcSBT.y);
    if (m_rcSBRC.width > 0)
    {
        dc.DrawBitmap(newSBRC, m_rcSBRC.x, m_rcSBRC.y);
    }
    dc.DrawBitmap(newSBRA, m_rcSBRA.x, m_rcSBRA.y);

    wxBufferedPaintDC bpdc(this, bmp);
}