Esempio n. 1
0
void CRimshotView::OnViewZoom() 
{
    CRimshotDoc* pDoc = GetDocument();
    if (pDoc->m_pInput)
    {
	CZoomDlg dlg;
	CRect rect;
	
	GetClientRect(&rect);
	dlg.m_dLeft = pDoc->m_dLeft;
	dlg.m_dRight = pDoc->m_dRight;
	dlg.m_dWidth = pDoc->m_dRight - pDoc->m_dLeft;
	dlg.m_dPerPixel = dlg.m_dWidth / (double)rect.Width();

	if (dlg.DoModal() == IDOK)
	{
	    if (dlg.m_bLR)
	    {
		if (dlg.m_dLeft < dlg.m_dRight)
		{
		    RLOG_EVENT event;
		    pDoc->m_dLeft = dlg.m_dLeft;
		    pDoc->m_dRight = dlg.m_dRight;
		    RLOG_FindGlobalEventBeforeTimestamp(pDoc->m_pInput, (dlg.m_dLeft + dlg.m_dRight) / 2.0, &event);
		    StopDrawing();
		    StartDrawing();
		}
	    }
	    if (dlg.m_bWidth)
	    {
		if (dlg.m_dWidth > 0.0)
		{
		    double middle = (pDoc->m_dLeft + pDoc->m_dRight) / 2.0;
		    pDoc->m_dLeft = middle - (dlg.m_dWidth / 2.0);
		    pDoc->m_dRight = middle + (dlg.m_dWidth / 2.0);
		    StopDrawing();
		    StartDrawing();
		}
	    }
	    if (dlg.m_bPerPixel)
	    {
		dlg.m_dWidth = dlg.m_dPerPixel * (double)rect.Width();
		if (dlg.m_dWidth > 0.0)
		{
		    double middle = (pDoc->m_dLeft + pDoc->m_dRight) / 2.0;
		    pDoc->m_dLeft = middle - (dlg.m_dWidth / 2.0);
		    pDoc->m_dRight = middle + (dlg.m_dWidth / 2.0);
		    StopDrawing();
		    StartDrawing();
		}
	    }
	}
    }
}
Esempio n. 2
0
void CRimshotView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    RLOG_EVENT event;
    double d;
    CRimshotDoc* pDoc = GetDocument();

    if (pDoc->m_pInput)
    {
	switch (nChar)
	{
	case VK_RIGHT:
	    if (RLOG_GetNextGlobalEvent(pDoc->m_pInput, &event) == 0)
	    {
		while (!m_Draw.pCursorRanks[event.rank].active)
		{
		    if (RLOG_GetNextGlobalEvent(pDoc->m_pInput, &event) != 0)
			break;
		}
		StopDrawing();
		d = (pDoc->m_dRight - pDoc->m_dLeft) / 2;
		pDoc->m_dLeft = event.start_time - d;
		pDoc->m_dRight = event.start_time + d;
		StartDrawing();
	    }
	    break;
	case VK_LEFT:
	    if (RLOG_GetPreviousGlobalEvent(pDoc->m_pInput, &event) == 0)
	    {
		while (!m_Draw.pCursorRanks[event.rank].active)
		{
		    if (RLOG_GetPreviousGlobalEvent(pDoc->m_pInput, &event) != 0)
			break;
		}
		StopDrawing();
		d = (pDoc->m_dRight - pDoc->m_dLeft) / 2;
		pDoc->m_dLeft = event.start_time - d;
		pDoc->m_dRight = event.start_time + d;
		StartDrawing();
	    }
	    break;
	default:
	    break;
	}
    }

    CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Esempio n. 3
0
void CRenderer::Polygon(PolygonVertices* _polygon, int color){
	StartDrawing();
	for(int i =0; i<_polygon->size()-1;i++){
		Line(*((*_polygon)[i]),*((*_polygon)[i+1]), color);
	}
	Line(*((*_polygon)[_polygon->size()-1]), *((*_polygon)[0]), color);
	StopDrawing();
}
Esempio n. 4
0
void CRimshotView::OnResetZoom() 
{
    CRimshotDoc* pDoc = GetDocument();
    StopDrawing();
    pDoc->m_dLeft = pDoc->m_dFirst;
    pDoc->m_dRight = pDoc->m_dLast;
    StartDrawing();
}
Esempio n. 5
0
void CRimshotView::OnViewUniform() 
{
    CMenu *pMenu = GetParentFrame()->GetMenu();

    m_Draw.bDrawUniform = !m_Draw.bDrawUniform;

    if (pMenu)
	pMenu->CheckMenuItem(ID_VIEW_UNIFORM, MF_BYCOMMAND | m_Draw.bDrawUniform ? MF_CHECKED : MF_UNCHECKED);
    StopDrawing();
    StartDrawing();
}
Esempio n. 6
0
void CRimshotView::OnZoomOut() 
{
    double d;
    CRimshotDoc* pDoc = GetDocument();

    StopDrawing();
    d = (pDoc->m_dRight - pDoc->m_dLeft) / 2.0;
    pDoc->m_dLeft -= d;
    pDoc->m_dRight += d;
    StartDrawing();
}
EDA_DRAW_PANEL_GAL::~EDA_DRAW_PANEL_GAL()
{
    StopDrawing();
    SaveGalSettings();

    assert( !m_drawing );

    delete m_painter;
    delete m_viewControls;
    delete m_view;
    delete m_gal;
}
Esempio n. 8
0
void CRimshotView::OnPrevious() 
{
    double d;
    RLOG_EVENT event;
    CRimshotDoc* pDoc = GetDocument();

    StopDrawing();
    d = (pDoc->m_dRight - pDoc->m_dLeft) / 6.0;
    RLOG_FindGlobalEventBeforeTimestamp(pDoc->m_pInput, (pDoc->m_dLeft + pDoc->m_dRight) / 2.0 - d, &event);
    pDoc->m_dLeft = event.start_time - (3.0 * d);
    pDoc->m_dRight = event.start_time + (3.0 * d);
    StartDrawing();
}
Esempio n. 9
0
void CRimshotView::OnSize(UINT nType, int cx, int cy) 
{
    CView::OnSize(nType, cx, cy);

    if (m_Draw.pCanvas != NULL)
    {
	// stop any current drawing
	StopDrawing();

	if (m_Draw.max_rect_size.cx < cx || m_Draw.max_rect_size.cy < cy)
	{
	    m_Draw.max_rect_size.cx = max(m_Draw.max_rect_size.cx, cx);
	    m_Draw.max_rect_size.cy = max(m_Draw.max_rect_size.cy, cy);
	    // create a new resized canvas bitmap
	    CBitmap *pBmp = new CBitmap();
	    pBmp->CreateDiscardableBitmap(GetDC(), m_Draw.max_rect_size.cx, m_Draw.max_rect_size.cy);
	    
	    if (m_Draw.pBitmap)
	    {
		m_Draw.pCanvas->SelectObject(pBmp);
		delete m_Draw.pBitmap;
		m_Draw.pBitmap = pBmp;
	    }
	    else
	    {
		m_Draw.pOriginalBmp = m_Draw.pCanvas->SelectObject(pBmp);
		m_Draw.pBitmap = pBmp;
	    }
	}
	m_Draw.rect_size.cx = cx;
	m_Draw.rect_size.cy = cy;

	// create the copy bitmap if this is the first size event
	if (m_Draw.pCopyBitmap == NULL)
	{
	    CBitmap *pBmpCopy = new CBitmap();
	    pBmpCopy->CreateDiscardableBitmap(GetDC(), cx, cy);

	    m_Draw.pCopyOriginalBmp = m_Draw.pCopyCanvas->SelectObject(pBmpCopy);
	    m_Draw.pCopyBitmap = pBmpCopy;
	    m_Draw.copy_size.cx = cx;
	    m_Draw.copy_size.cy = cy;
	    m_Draw.max_copy_size.cx = cx;
	    m_Draw.max_copy_size.cy = cy;
	}

	// start redrawing
	StartDrawing();
    }
}
Esempio n. 10
0
void CRimshotView::OnNext() 
{
    double d;
    RLOG_EVENT event1, event2;
    CRimshotDoc* pDoc = GetDocument();

    StopDrawing();
    d = (pDoc->m_dRight - pDoc->m_dLeft) / 6.0;
    RLOG_GetCurrentGlobalEvent(pDoc->m_pInput, &event1);
    RLOG_FindGlobalEventBeforeTimestamp(pDoc->m_pInput, (pDoc->m_dLeft + pDoc->m_dRight) / 2.0 + d, &event2);
    if (event1.start_time == event2.start_time)
	RLOG_GetNextGlobalEvent(pDoc->m_pInput, &event2);
    pDoc->m_dLeft = event2.start_time - (3.0 * d);
    pDoc->m_dRight = event2.start_time + (3.0 * d);
    StartDrawing();
}
Esempio n. 11
0
void CRimshotView::OnZoomTo() 
{
    CRect rect;
    RLOG_EVENT event;
    CRimshotDoc* pDoc = GetDocument();
    double width;

    if (pDoc->m_pInput)
    {
	StopDrawing();
	RLOG_GetCurrentGlobalEvent(pDoc->m_pInput, &event);
	GetClientRect(&rect);
	width = event.end_time - event.start_time;
	pDoc->m_dLeft = event.start_time - (10.0 * width);
	pDoc->m_dRight = event.start_time + (10.0 * width);
	StartDrawing();
    }
}
Esempio n. 12
0
void CRenderer::PolygonFilled(PolygonVertices* _polygon, int color) {
  if (_polygon->size()<3) return;

	StartDrawing();
  float miny, maxy;
  //Znajdujemy max i min na ykach
  miny = maxy = ((*_polygon)[0])->y;
  float temp_x1, temp_x2, temp_y1, temp_y2;
  for (unsigned i=0;i<_polygon->size();i++){
	temp_y1 = ((*_polygon)[i])->y;
    if (miny > temp_y1) {miny = temp_y1;}
    if (maxy < temp_y1) {maxy = temp_y1;}
  }

  //lista xów
  int *xlist = new int[_polygon->size()];
  unsigned xlistsize;

  // dla kazdego yka na wys polygona
  for (float y=miny;y<=maxy;y++) {
    // szukamy przeciec linii
    xlistsize = 0;
    for (unsigned i=0;i<_polygon->size();i++) {
      temp_y1 = ((*_polygon)[i])->y; 
	  temp_y2 = ((*_polygon)[(i+1)%(_polygon->size())])->y;
      if ((y>temp_y1 && y<=temp_y2) || (y>temp_y2 && y<=temp_y1)) {
        temp_x1 = ((*_polygon)[i])->x;
        temp_x2 = ((*_polygon)[(i+1)%(_polygon->size())])->x;
        xlist[xlistsize++] = (int)( temp_x1 + (y-temp_y1)*(temp_x2-temp_x1)/(temp_y2-temp_y1) );
      }
    }
    if (xlistsize==0) { continue; }
//sortujemy xy
	std::sort(xlist,xlist+xlistsize);
//malujemy co drugie
    for (int i=0;i<xlistsize;i+=2) {
      for (int x=xlist[i];x<=xlist[i+1];x++) {
		  PutPixel(x,y,color);
      }
    }
  }
  delete[] xlist;
  StopDrawing();
}
Esempio n. 13
0
BOOL CRimshotView::DestroyWindow() 
{
    StopDrawing();
    m_Draw.nCmd = EXIT_CMD;
    SetEvent(m_Draw.hDrawEvent);
    WaitForSingleObject(m_hDrawThread, 10000);
    CloseHandle(m_Draw.hDrawEvent);
    CloseHandle(m_Draw.hStoppedEvent);
    CloseHandle(m_hDrawThread);

    if (m_Draw.pCanvas)
    {
	if (m_Draw.pBitmap)
	{
	    // select out the bitmap
	    m_Draw.pCanvas->SelectObject(m_Draw.pOriginalBmp);
	}
	delete m_Draw.pCanvas;
	m_Draw.pCanvas = NULL;
    }
    if (m_Draw.pBitmap)
    {
	delete m_Draw.pBitmap;
	m_Draw.pBitmap = NULL;
    }

    if (m_Draw.pCopyCanvas)
    {
	if (m_Draw.pCopyBitmap)
	{
	    m_Draw.pCopyCanvas->SelectObject(m_Draw.pCopyOriginalBmp);
	}
	delete m_Draw.pCopyCanvas;
	m_Draw.pCopyCanvas = NULL;
    }
    if (m_Draw.pCopyBitmap)
    {
	delete m_Draw.pCopyBitmap;
	m_Draw.pCopyBitmap = NULL;
    }

    return CView::DestroyWindow();
}
Esempio n. 14
0
void CRimshotView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    bool bHit = false;
    CRimshotDoc* pDoc = GetDocument();
    if (pDoc->m_pInput)
    {
	for (int i=0; i<pDoc->m_pInput->nNumRanks; i++)
	{
	    if (PointInside(point, m_Draw.pCursorRanks[i].rect))
	    {
		m_Draw.pCursorRanks[i].active = !m_Draw.pCursorRanks[i].active;
		//InvalidateRect(&m_Draw.pCursorRanks[i].rect);
		bHit = true;
	    }
	}
    }
    if (bHit)
    {
	StopDrawing();
	StartDrawing();
    }
    CView::OnLButtonDown(nFlags, point);
}
void EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType )
{
    // Do not do anything if the currently used GAL is correct
    if( aGalType == m_currentGal && m_gal != NULL )
        return;

    // Prevent refreshing canvas during backend switch
    StopDrawing();

    delete m_gal;

    switch( aGalType )
    {
    case GAL_TYPE_OPENGL:
        m_gal = new KIGFX::OPENGL_GAL( this, this, this );
        break;

    case GAL_TYPE_CAIRO:
        m_gal = new KIGFX::CAIRO_GAL( this, this, this );
        break;

    case GAL_TYPE_NONE:
        return;
    }

    wxSize size = GetClientSize();
    m_gal->ResizeScreen( size.GetX(), size.GetY() );

    if( m_painter )
        m_painter->SetGAL( m_gal );

    if( m_view )
        m_view->SetGAL( m_gal );

    m_currentGal = aGalType;
}
bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
{
    // Do not do anything if the currently used GAL is correct
    if( aGalType == m_backend && m_gal != NULL )
        return true;

    bool result = true; // assume everything will be fine

    // Prevent refreshing canvas during backend switch
    StopDrawing();

    KIGFX::GAL* new_gal = NULL;

    try
    {
        switch( aGalType )
        {
        case GAL_TYPE_OPENGL:
            new_gal = new KIGFX::OPENGL_GAL( this, this, this );
            break;

        case GAL_TYPE_CAIRO:
            new_gal = new KIGFX::CAIRO_GAL( this, this, this );
            break;

        default:
            assert( false );
            // warn about unhandled GAL canvas type, but continue with the fallback option

        case GAL_TYPE_NONE:
            // KIGFX::GAL is a stub - it actually does cannot display anything,
            // but prevents code relying on GAL canvas existence from crashing
            new_gal = new KIGFX::GAL();
            break;
        }
    }
    catch( std::runtime_error& err )
    {
        new_gal = new KIGFX::GAL();
        aGalType = GAL_TYPE_NONE;
        DisplayError( m_parent, wxString( err.what() ) );
        result = false;
    }

    SaveGalSettings();

    assert( new_gal );
    delete m_gal;
    m_gal = new_gal;

    wxSize size = GetClientSize();
    m_gal->ResizeScreen( size.GetX(), size.GetY() );

    if( m_painter )
        m_painter->SetGAL( m_gal );

    if( m_view )
        m_view->SetGAL( m_gal );

    m_backend = aGalType;
    LoadGalSettings();

    return result;
}
Esempio n. 17
0
void CRimshotView::OnToggleArrows() 
{
    StopDrawing();
    m_Draw.bDrawArrows = !m_Draw.bDrawArrows;
    StartDrawing();
}