Пример #1
0
void handle_userevent(SDL_UserEvent user) {
	switch (user.code) {
		case TIMER_KEYREPEAT:
			SDL_RemoveTimer(timerKeyRepeat);
			if (layerVelocity > 0) {
				if (currentLayer < layerCount - 1)
					drawLayer(++currentLayer);
				else
					break;
			}
			else if (layerVelocity < 0) {
				if (currentLayer > 0)
					drawLayer(--currentLayer);
				else
					break;
			}
			timerKeyRepeat = SDL_AddTimer(20, &timerCallback, (void *) TIMER_KEYREPEAT);
			break;
		case TIMER_DRAGRENDER:
			SDL_RemoveTimer(timerDragRender);
			render();
			timerDragRender = SDL_AddTimer(50, &timerCallback, (void *) TIMER_DRAGRENDER);
			break;
	}
}
Пример #2
0
void ofxLayerMask::drawOverlay() {
    if(overlayOn) {
        overlayHeight = thumbSize * (layers.size() + 1) + (overlayPadding * layers.size());

        //Draw overlay panel
        x = ofGetWidth() - tripleThumbWidth - textAreaWidth - quadruplePadding - overlayMargin;
        y = ofGetHeight() - overlayHeight - doublePadding - overlayMargin;
        drawDebugBox(x, y, tripleThumbWidth + textAreaWidth + quadruplePadding, overlayHeight + doublePadding);
        
        //Draw layers
        x += overlayPadding;
        y += overlayPadding;
        for(int i = 0; i < layers.size(); i++) {
            ofDrawBitmapString("Layer " + ofToString(i + 1), x, y + halfThumbHeight + 4);
            drawDebugBox(x - 1 + textAreaWidth, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150));
            drawLayer(i, x + textAreaWidth, y, thumbWidth, thumbHeight, false);
            drawDebugBox(x - 1 + textAreaWidth + thumbWidth + overlayPadding, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150));
            drawMask(i, x + textAreaWidth + thumbWidth + overlayPadding, y, thumbWidth, thumbHeight);
            drawDebugBox(x - 1 + textAreaWidth + doubleThumbWidth + doublePadding, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150));
            drawLayer(i, x + textAreaWidth + doubleThumbWidth + doublePadding, y, thumbWidth, thumbHeight);
            y += thumbHeight + overlayPadding;
        }

        //Draw composite thumbnail
        ofDrawBitmapString("Composite", x, y + halfThumbHeight + 4);
        drawDebugBox(x - 1 + textAreaWidth + doubleThumbWidth + doublePadding, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150));
        draw(x + textAreaWidth + doubleThumbWidth + doublePadding, y, thumbWidth, thumbHeight);
    }
}
Пример #3
0
void CCRenderSurface::draw(LayerRendererChromium* layerRenderer, const FloatRect& surfaceDamageRect)
{
    if (m_skipsDraw || !m_contentsTexture)
        return;
    // FIXME: By using the same RenderSurface for both the content and its reflection,
    // it's currently not possible to apply a separate mask to the reflection layer
    // or correctly handle opacity in reflections (opacity must be applied after drawing
    // both the layer and its reflection). The solution is to introduce yet another RenderSurface
    // to draw the layer and its reflection in. For now we only apply a separate reflection
    // mask if the contents don't have a mask of their own.
    CCLayerImpl* replicaMaskLayer = m_maskLayer;
    if (!m_maskLayer && m_owningLayer->replicaLayer())
        replicaMaskLayer = m_owningLayer->replicaLayer()->maskLayer();

    if (m_owningLayer->parent() && m_owningLayer->parent()->usesLayerClipping() && layerRenderer->capabilities().usingPartialSwap) {
        FloatRect clipAndDamageRect = m_clipRect;
        clipAndDamageRect.intersect(surfaceDamageRect);
        layerRenderer->setScissorToRect(enclosingIntRect(clipAndDamageRect));
    } else if (layerRenderer->capabilities().usingPartialSwap)
        layerRenderer->setScissorToRect(enclosingIntRect(surfaceDamageRect));
    else if (m_owningLayer->parent() && m_owningLayer->parent()->usesLayerClipping())
        layerRenderer->setScissorToRect(m_clipRect);
    else
        GLC(layerRenderer->context(), layerRenderer->context()->disable(GraphicsContext3D::SCISSOR_TEST));

    // Reflection draws before the layer.
    if (m_owningLayer->replicaLayer())
        drawLayer(layerRenderer, replicaMaskLayer, m_replicaDrawTransform);

    drawLayer(layerRenderer, m_maskLayer, m_drawTransform);
}
Пример #4
0
void stereo_straw_g1() {

ostringstream fname; 
fname << "stereo_straw_" << numLayers << "_layers_" << Int_t(floor(innerRadius)) << "_x_" << Int_t(floor(outerRadius)) << ".01.geo";
const char* filename = (fname.str()).c_str();

// output file for straw endcap geometry
ofstream* f = new ofstream(filename, ios::out | ios::trunc);                                                                            

//************************* Main procedure START *****************************

Mpdshape* layer =  initDrawLayer(f, TVector3(angleLayers, 0.0, 0.0), TVector3(0, 0, initDist + layerThickness/2.0), 0);
Mpdshape* layerR = initDrawLayer(f, TVector3(angleLayers, 0.0, 0.0), TVector3(0, 0, initDist + layerThickness*1 + layerThickness/2.0), angleStereo);
Mpdshape* layerL = initDrawLayer(f, TVector3(angleLayers, 0.0, 0.0), TVector3(0, 0, initDist + layerThickness*2 + layerThickness/2.0), -angleStereo);
drawLayer(layer, TVector3(angleLayers,0,0), TVector3(0,0,initDist + layerThickness*3 + layerThickness/2.0));

for (Int_t i = 4; i < numLayers; i+=4) {                                                                                                          
    drawLayer(layer, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + i*layerThickness));
    drawLayer(layerR, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + (i+1)*layerThickness));
    drawLayer(layerL, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + (i+2)*layerThickness));
    drawLayer(layer, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + (i+3)*layerThickness));
} 

//*********************** Main procedure END *********************************

delete layerL;
delete layer;
delete layerR;

f->close();
return;

}
Пример #5
0
void drawMap(const struct Map *map, SDL_Renderer *renderer, int x, int y){
    unsigned i;
    if(map->numLayers == 0)
        return;
    drawLayer(map->tilesets, map->layers, renderer, x, y);
    // TODO: draw entities
    for(i = 1; i < map->numLayers; i++){
        drawLayer(map->tilesets, map->layers + i, renderer, x, y);
    }
}
Пример #6
0
void SquareMap::draw(BITMAP *dest, bool drawObstacle)
{
	Rectangle oldClip;
	oldClip.clipToRect(dest);
	cameraScreenRect.rectToClip(dest);

	if (mapLayers[0]) drawLayer(dest, drawObstacle, mapLayers[0]);
	drawEntities(dest);
	if (mapLayers[1]) drawLayer(dest, drawObstacle, mapLayers[1]);
	drawAirborneEntities(dest);

	oldClip.rectToClip(dest);
}
Пример #7
0
/**
 * Draw the full page, usually you would like to call this method
 * @param page The page to draw
 * @param cr Draw to thgis context
 * @param dontRenderEditingStroke false to draw currently drawing stroke
 * @param hideBackground true to hide the background
 */
void DocumentView::drawPage(PageRef page, cairo_t* cr, bool dontRenderEditingStroke, bool hideBackground)
{
	XOJ_CHECK_TYPE(DocumentView);

	initDrawing(page, cr, dontRenderEditingStroke);

	bool backgroundVisible = page->isLayerVisible(0);

	if (!hideBackground && backgroundVisible)
	{
		drawBackground();
	}

	if (!backgroundVisible)
	{
		drawTransparentBackgroundPattern();
	}

	int layer = 0;
	for (Layer* l : *page->getLayers())
	{
		if (!page->isLayerVisible(l))
		{
			continue;
		}

		drawLayer(cr, l);
		layer++;
	}

	finializeDrawing();
}
Пример #8
0
void Stage::dibujarFront(bool time_stopped)
{
    for(int i=0;i<(int)front.size();i++)
    {
        Layer* layer=front[i];
        drawLayer(layer,time_stopped);
    }
}
Пример #9
0
void Stage::dibujarBack(bool time_stopped)
{
    for(int i=0;i<(int)back.size();i++)
    {
        Layer* layer=back[i];
        drawLayer(layer,time_stopped);
    }
}
Пример #10
0
void Stage::dibujarFront()
{
    for(int i=0;i<(int)front.size();i++)
    {
        Layer* layer=front[i];
        drawLayer(layer);
    }
}
Пример #11
0
void handle_keydown(SDL_KeyboardEvent key) {
	switch(key.keysym.sym) {
		case SDLK_q:
		case SDLK_ESCAPE:
			printf("Exiting\n");
			Running = false;
			break;
		case SDLK_r:
			printf("Resetting position\n");
			zoomFactor = 3;
			#ifdef	OPENGL
				transX = transY = 0.0;
			#else
				viewPortL = 0.0;
				viewPortB = 200.0;
			#endif
			resize(600, 600);
			render();
			break;
		case SDLK_PAGEUP:
			layerVelocity = 1;
			if (timerKeyRepeat)
				SDL_RemoveTimer(timerKeyRepeat);
			else if (currentLayer < layerCount - 1)
				drawLayer(++currentLayer);
			timerKeyRepeat = SDL_AddTimer(500, &timerCallback, (void *) TIMER_KEYREPEAT);
			break;
		case SDLK_PAGEDOWN:
			layerVelocity = -1;
			if (timerKeyRepeat)
				SDL_RemoveTimer(timerKeyRepeat);
			else if (currentLayer > 0)
				drawLayer(--currentLayer);
			timerKeyRepeat = SDL_AddTimer(500, &timerCallback, (void *) TIMER_KEYREPEAT);
			break;
		case SDLK_LSHIFT:
			keymodifiermask |= KMM_LSHIFT;
			break;
		case SDLK_RSHIFT:
			keymodifiermask |= KMM_RSHIFT;
			break;
		default:
			printf("key %d pressed (%c)\n", key.keysym.sym, key.keysym.sym);
			break;
	}
}
void LedCubeMonoExtended::lightAllLedOnLayer(uint16_t layerNum) {
	uint16_t ledMask[4];
	ledMask[0] = bit(16) - 1;
	ledMask[1] = bit(16) - 1;
	ledMask[2] = bit(16) - 1;
	ledMask[3] = bit(16) - 1;
	drawLayer(LAYER_MASK(layerNum - 1), (uint16_t *) ledMask);
}
Пример #13
0
void Stage::dibujarBack()
{
    for(int i=0;i<(int)back.size();i++)
    {
        Layer* layer=back[i];
        drawLayer(layer);
    }
//    rosalila()->graphics->clearScreen(Color(0,0,0,0));
}
Пример #14
0
void BoardGerberExport::exportLayerTopSilkscreen() const {
  QStringList layers = mSettings->getSilkscreenLayersTop();
  if (layers.count() >
      0) {  // don't create silkscreen file if no layers selected
    FilePath        fp = getOutputFilePath(mSettings->getSuffixSilkscreenTop());
    GerberGenerator gen(
        mProject.getMetadata().getName() % " - " % mBoard.getName(),
        mBoard.getUuid(), mProject.getMetadata().getVersion());
    foreach (const QString& layer, layers) { drawLayer(gen, layer); }
Пример #15
0
void BoardGerberExport::exportLayerBottomSolderMask() const {
  FilePath        fp = getOutputFilePath(mSettings->getSuffixSolderMaskBot());
  GerberGenerator gen(
      mProject.getMetadata().getName() % " - " % mBoard.getName(),
      mBoard.getUuid(), mProject.getMetadata().getVersion());
  drawLayer(gen, GraphicsLayer::sBotStopMask);
  gen.generate();
  gen.saveToFile(fp);
  mWrittenFiles.append(fp);
}
Пример #16
0
void LayerItem::refreshPixmap()
{
    _pixmap = QPixmap(size());
    _pixmap.fill(this, 0, 0);

    QPainter painter(&_pixmap);
    painter.initFrom(this);
    drawLayer(&painter);
    update();
}
Пример #17
0
void ofApp::drawAnim() {
    ofBackground(ofColor::black);
    ofSetColor(ofColor::wheat);
    
    
    offset.y = 0.02;
    drawLayer(&tex);
    rotateScreen(90, halfWidth);
    drawLayer(&tex);
    rotateScreen(90, halfHeight);
    drawLayer(&tex);
    rotateScreen(90, halfWidth);
    drawLayer(&tex);
    rotateScreen(90, halfHeight);
    drawLayer2(&tex); //cover up

    if(ofGetFrameNum() == 100) {
        renderGif();
    }
}
Пример #18
0
void CCRenderSurface::drawContents(LayerRendererChromium* layerRenderer)
{
    if (m_skipsDraw || !m_contentsTexture)
        return;

    // FIXME: Cache this value so that we don't have to do it for both the surface and its replica.
    // Apply filters to the contents texture.
    SkBitmap filterBitmap = applyFilters(layerRenderer, m_filters, m_contentsTexture.get());

    int contentsTextureId = getSkBitmapTextureId(filterBitmap, m_contentsTexture->textureId());
    drawLayer(layerRenderer, m_maskLayer, m_drawTransform, contentsTextureId);
}
Пример #19
0
/**
 * @brief
 *
 * @param
 *
 * @return
 */
void
update(screen scr, layer * layers)
{
    int itr_layers;
    clrscr(scr);
    if (scr != NULL){
        /* draw each layer, sequentially */
        for (itr_layers = 0; layers[itr_layers] != NULL; itr_layers++){
            drawLayer(scr, layers[itr_layers]);
        }
        bufferToStream(scr);
    }
}
Пример #20
0
void BoardGerberExport::exportLayerInnerCopper() const {
  for (int i = 1; i <= mBoard.getLayerStack().getInnerLayerCount(); ++i) {
    mCurrentInnerCopperLayer = i;  // used for attribute provider
    FilePath        fp = getOutputFilePath(mSettings->getSuffixCopperInner());
    GerberGenerator gen(
        mProject.getMetadata().getName() % " - " % mBoard.getName(),
        mBoard.getUuid(), mProject.getMetadata().getVersion());
    drawLayer(gen, GraphicsLayer::getInnerLayerName(i));
    gen.generate();
    gen.saveToFile(fp);
    mWrittenFiles.append(fp);
  }
  mCurrentInnerCopperLayer = 0;
}
Пример #21
0
void Stage::dibujarBack()
{
    if(receiver->isOuyaDown('r')
        || receiver->isOuyaDown('s'))
        return;

    for(int i=0;i<(int)back.size();i++)
    {
        Layer* layer=back[i];
        //if(i%2!=0)
        //	continue;
        drawLayer(layer,i!=0);
    }
}
/* Function who light one LED by it number */
void LedCubeMonoExtended::lightOneLEDByHisNum(int layerNum, int num) {
	uint16_t ledMask[4];
	for(int i = 0; i<4;i++)
		ledMask[i] = 0;
	if(num <=16)
		ledMask[0] = bit(num-1);
	else if(num <= 32)
		ledMask[1] = bit(num-17);
	else if(num <= 48)
			ledMask[2] = bit(num-33);
	else if(num <= 64)
			ledMask[3] = bit(num-49);

	drawLayer(LAYER_MASK(layerNum - 1), (uint16_t *)ledMask);
}
Пример #23
0
void ofApp::updateAnim(){
    masker.beginBackground();
    ofBackground(0, 0, 0, 255);
    ofSetColor(ofColor::red);
    tx0 = -0.5;
    ty0 = -ofGetFrameNum() * 0.003 + offset1;
    tx1 = tx0 + 1;
    ty1 = ty0 + 0.5;
    drawLayer(&tex2);
    masker.endBackground();
    
    masker.beginMask();
    ofEnableAlphaBlending();
    ofBackground(0, 0, 0, 255);
    ofSetColor(ofColor::white);
    tx0 = -0.35;
    ty0 = ofGetFrameNum() * 0.01 + offset1;
    tx1 = tx0 + 0.7;
    ty1 = ty0 + 0.25;
    drawLayer(&tex1);
    
    ty0 = -ofGetFrameNum() * 0.02 + offset1;
    ty1 = ty0 + 0.25;
    drawLayer(&tex1);
    
    ty0 = ofGetFrameNum() * 0.01 + offset2;
    ty1 = ty0 + 0.25;
    drawLayer(&tex1);
    
    ty0 = -ofGetFrameNum() * 0.02 + offset2;
    ty1 = ty0 + 0.25;
    drawLayer(&tex1);
    
    ofRect(0, 0, 70, height);
    ofRect(width - 70, 0, 70, height);
    ofDisableAlphaBlending();
    masker.endMask();
    
    masker.beginForeground();
    ofBackground(0, 0, 0, 255);
    ofSetColor(ofColor::white);
    tx0 = -0.5;
    ty0 = -ofGetFrameNum() * 0.0012 + offset2;
    tx1 = tx0 + 1;
    ty1 = ty0 + 0.5;
    drawLayer(&tex2);
    masker.endForeground();
}
Пример #24
0
void CCRenderSurface::drawReplica(LayerRendererChromium* layerRenderer)
{
    ASSERT(hasReplica());
    if (!hasReplica() || m_skipsDraw || !m_contentsTexture)
        return;

    // Apply filters to the contents texture.
    SkBitmap filterBitmap = applyFilters(layerRenderer, m_filters, m_contentsTexture.get());

    // FIXME: By using the same RenderSurface for both the content and its reflection,
    // it's currently not possible to apply a separate mask to the reflection layer
    // or correctly handle opacity in reflections (opacity must be applied after drawing
    // both the layer and its reflection). The solution is to introduce yet another RenderSurface
    // to draw the layer and its reflection in. For now we only apply a separate reflection
    // mask if the contents don't have a mask of their own.
    CCLayerImpl* replicaMaskLayer = m_maskLayer;
    if (!m_maskLayer && m_owningLayer->replicaLayer())
        replicaMaskLayer = m_owningLayer->replicaLayer()->maskLayer();

    int contentsTextureId = getSkBitmapTextureId(filterBitmap, m_contentsTexture->textureId());
    drawLayer(layerRenderer, replicaMaskLayer, m_replicaDrawTransform, contentsTextureId);
}
Пример #25
0
void Layer::drawLayer(vector <Object *>  &deleteObj) {
	if( !clsVisible ) { return; }
		
	if( !deleteObj.empty() ){
		vector <ObjectNode> auxiliar;		
		int k = clsInLayer.size() ;		
		for( int i=k-1; i >= 0; i--){
			Object * obj = clsInLayer[i].getObject();			
			if( !deleteObj.empty() && obj == deleteObj.back() ){		
				deleteObj.pop_back();	
				delete obj;				
			}else{	
				auxiliar.push_back(obj);
			}
		}//end for
		clsInLayer.clear();
		clsInLayer = auxiliar;
		auxiliar.clear();
	}//end if
	
	drawLayer();
	
} // end method		*/	
Пример #26
0
void Stage::dibujarFront()
{
    for(int i=0;i<(int)front.size();i++)
    {
        Layer* layer=front[i];
        drawLayer(layer,true);
    }

    for (std::list<Dialogue*>::iterator dialogue = active_dialogues.begin(); dialogue != active_dialogues.end(); dialogue++)
    {
        painter->draw2DImage
        (   dialogue_bg,
            dialogue_bg->getWidth(),dialogue_bg->getHeight(),
            dialogue_x,dialogue_y,
            1.0,
            0.0,
            false,
            0,0,
            Color(255,255,255,255),
            false);
        ((Dialogue*)*dialogue)->render(this->dialogue_x+this->dialogue_padding_x,this->dialogue_y+this->dialogue_padding_y);
    }
}
Пример #27
0
void DataMarkerLabel::paintEvent(QPaintEvent * /*event*/)
{
    QPainter painter(this);
    painter.drawRect(0, 0, width() - 1, height() - 1);

    if (m_frameEnd - m_frameStart < 1)
    {
        return;
    }

    drawFrameBase(painter);

    ObjectModel *pModel = m_pEditData->getObjectModel();
    QModelIndex index = m_pEditData->getSelIndex();
    ObjectItem *obj = pModel->getObject(index);
    if (!obj)
    {
        return;
    }

    QList<int> frames;
    drawLayer(obj->getIndex(), painter, index, frames);
    if (m_pressCurrentFrame >= 0)
    {
        int x0 = getX(m_pressCurrentFrame);
        int x1 = getX(m_pressCurrentFrame + 1);
        int y0 = 0;
        QColor col = QColor(255, 0, 0, 128);
        if (pModel->isObject(index))
        {
            y0 = height() / 3;
            col.setRed(255);
        }
        painter.fillRect(x0, y0, x1 - x0, height() / 3, col);
    }
}
Пример #28
0
int main(int argc, char* argv[]) {
	msgbuf = malloc(256);
	msgbuf[0] = 0;

	currentLayer = 0;
	cache = true;

	int longIndex;
	int opt;
	do {
		opt = getopt_long(argc, argv, optString, longOpts, &longIndex);
		if (opt != -1) {
			switch( opt ) {
				case 'l':
					currentLayer = strtol(optarg, NULL, 10);
					break;

				case 'w':
					extrusionWidth = strtof(optarg, NULL);
					break;

				case 'n':
					printf("DISABLING CACHE\n");
					cache = false;
					break;

				case 'h':   /* fall-through is intentional */
				case '?':
					display_usage();
					break;

				case 0:     /* long option without a short arg */
					//if( strcmp( "randomize", longOpts[longIndex].name ) == 0 ) {
					//	globalArgs.randomized = 1;
					//}
					break;

				default:
					/* You won't actually get here. */
					break;
			}
		}
	}
	while (opt != -1);

	if (optind >= argc)
		display_usage();

	int fd = open(argv[optind], 0);
	if (fd == -1)
		die("Open ", argv[optind]);

	struct stat filestats;
	if (fstat(fd, &filestats) == -1)
		die("fstat ", argv[optind]);

	filesz = filestats.st_size;

	printf("File is %d long\n", filesz);

#ifdef __linux__
	gcodefile = mmap(NULL, filesz, PROT_READ, MAP_PRIVATE | MAP_POPULATE, fd, 0);
#elif defined __APPLE__
	gcodefile = mmap(NULL, filesz, PROT_READ, MAP_PRIVATE, fd, 0);
#else
	#error "don't know how to mmap on this system!"
#endif

	if (gcodefile == MAP_FAILED)
		die("mmap ", argv[optind]);
	gcodefile_end = &gcodefile[filesz];

	busy = BUSY_SCANFILE;

	scanLines();

	if (currentLayer >= layerCount)
		currentLayer = layerCount - 1;

	//for (int i = 0; i < layerCount; i++)
	//	printf("Layer %3d starts at %7d and is %7d bytes long\n", i, layer[i].index - gcodefile, layer[i].size);

	Running = true;
	Surf_Display = NULL;

	if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
		die("SDL_init", "");

	if (FcInitLoadConfigAndFonts() == ((void *) FcTrue))
		die("FontConfig Init","");

	// from http://www.spinics.net/lists/font-config/msg03050.html
		FcPattern *pat, *match;
		FcResult result;
		char *file;
		int index;
		pat = FcPatternCreate();
		FcPatternAddString(pat, FC_FAMILY, (FcChar8 *) "Mono");
		FcConfigSubstitute(NULL, pat, FcMatchPattern);
		FcDefaultSubstitute(pat);
		match = FcFontMatch(NULL, pat, &result);
		FcPatternGetString(match, FC_FILE, 0, (FcChar8 **) &file);
		FcPatternGetInteger(match, FC_INDEX, 0, &index);


	font = ftglCreateExtrudeFont(file);
	if (!font)
		die("FTGL createFont", "");

	FcPatternDestroy (match);
	FcPatternDestroy (pat);

	#ifdef	OPENGL
		transX = transY = 0.0;
		zoomFactor = 1.0;

		resize(600, 600);
	#else
		viewPortL = viewPortT = 0.0;
		viewPortR = viewPortB = 200.0;
		zoomFactor = 3.0;
		resize(viewPortR * zoomFactor, viewPortB * zoomFactor);
	#endif

	SDL_WM_SetCaption("gcodeview", 0);

	drawLayer(currentLayer);

	layerVelocity = 0;

	timerIdle = SDL_AddTimer(20, &timerCallback, (void *) TIMER_IDLE);

	SDL_Event Event;
	while(Running != false) {
		if (busy) {
			Event.type = SDL_NOEVENT;
			SDL_PollEvent(&Event);
		}
		else {
			if (SDL_WaitEvent(&Event) == 0)
				die("SDL_WaitEvent", "");
		}
		//SDL_RemoveTimer(timerIdle);
		switch (Event.type) {
			case SDL_NOEVENT:
				if (busy & BUSY_SCANFILE) {
					// TODO: scan next layer
					scanLine();
					if ((busy & BUSY_SCANFILE) == 0) {
						if (cache) {
							printf("File scanned, rendering...\n");
							busy = BUSY_RENDER;
						}
						else {
							printf("File scanned.\n");
							busy = 0;
						}
					}
				}
				else if ((busy & BUSY_RENDER) && cache) {
					bool allRendered = true;
					int i;
					// TODO: render next layer in background
					for (i = 0; i < layerCount; i++) {
						if (layer[i].glList == 0) {
							layer[i].glList = glGenLists(1);
							glNewList(layer[i].glList, GL_COMPILE);
							glBegin(GL_QUADS);
							for (int j = SHADOW_LAYERS; j >= 1; j--) {
								if (i - j > 0)
									render_layer(i - j, SHADOW_ALPHA - (j - 1) * (SHADOW_ALPHA / SHADOW_LAYERS));
							}
							render_layer(i, 1.0);
							glEnd();
							glEndList();
							layer[i].flags |= LD_LISTGENERATED;
							allRendered = false;
							break;
						}
					}
					if (allRendered) {
						printf("All %d layers rendered\n", i);
						busy &= ~BUSY_RENDER;
					}
				}
				break;
			case SDL_QUIT:
				Running = false;
				break;
			case SDL_VIDEORESIZE:
				resize(Event.resize.w, Event.resize.h);
				break;
			case SDL_VIDEOEXPOSE:
				render();
				break;
			case SDL_MOUSEBUTTONDOWN:
				handle_mousedown(Event.button);
				break;
			case SDL_MOUSEBUTTONUP:
				handle_mouseup(Event.button);
				break;
			case SDL_MOUSEMOTION:
				handle_mousemove(Event.motion);
				break;
			case SDL_ACTIVEEVENT: // lose or gain focus
				break;
			case SDL_KEYDOWN:
				handle_keydown(Event.key);
				break;
			case SDL_KEYUP:
				handle_keyup(Event.key);
				break;
			case SDL_USEREVENT:
				handle_userevent(Event.user);
				break;
			default:
				printf("SDL Event %d\n", Event.type);
				break;
		}
		//idle code
		//if (busy)
		//	timerIdle = SDL_AddTimer(20, &timerCallback, (void *) TIMER_IDLE);
	}
	if (timerKeyRepeat)
		SDL_RemoveTimer(timerKeyRepeat);
	if (timerDragRender)
		SDL_RemoveTimer(timerDragRender);
	free(layer);
	SDL_FreeSurface(Surf_Display);
	SDL_Quit();
	return 0;
}
Пример #29
0
void handle_mousedown(SDL_MouseButtonEvent button) {
	//printf("SDL Mousebutton down event: mouse %d, button %d, state %d, %dx%d\n", Event.button.which, Event.button.button, Event.button.state, Event.button.x, Event.button.y);
	switch (button.button) {
		case 1: // left mouse
			{
				float mousex = button.x;
				float mousey = Surf_Display->h - button.y;
				float w = Surf_Display->w;
				float h = Surf_Display->h;
				float dim = minf(w, h);
				gXmouseDown = transX + (mousex / w) * 200.0 * w / dim / zoomFactor;
				gYmouseDown = transY + (mousey / h) * 200.0 * h / dim / zoomFactor;
				if (timerDragRender)
					SDL_RemoveTimer(timerDragRender);
				timerDragRender = SDL_AddTimer(50, &timerCallback, (void *) TIMER_DRAGRENDER);
			}
			break;
		case 2: // middle mouse
			break;
		case 3: // right mouse
			break;
		case 4: // wheel up
			if ((keymodifiermask & (KMM_LSHIFT | KMM_RSHIFT)) == 0) {
			#ifdef	OPENGL
				float mousex = button.x;
				float mousey = Surf_Display->h - button.y;
				float w = Surf_Display->w;
				float h = Surf_Display->h;
				float dim = minf(w, h);
				float gX = transX + (mousex / w) * 200.0 * w / dim / zoomFactor;
				float gY = transY + (mousey / h) * 200.0 * h / dim / zoomFactor;
				//printf("%d,%d->%d,%d\n", (int) transX, (int) transY, (int) gX, (int) gY);
				zoomFactor *= 1.1;
				transX = gX - (mousex / w) * 200.0 * w / dim / zoomFactor;
				transY = gY - (mousey / h) * 200.0 * h / dim/ zoomFactor;
			#else
				//float viewX = (gX - viewPortL) * zoomFactor,
				float gX = ((float) button.x) / zoomFactor + viewPortL;
				// float viewY = (viewPortB - gY) * zoomFactor,
				float gY = viewPortB - ((float) button.y) / zoomFactor;
				zoomFactor *= 1.1;
				//printf("Zoom %g\n", zoomFactor);
				viewPortL = gX - ((float) button.x) / zoomFactor;
				viewPortB = ((float) button.y) / zoomFactor + gY;
			#endif
				render();
			}
			else if (currentLayer > 0)
				drawLayer(--currentLayer);
			break;
		case 5: // wheel down
			if ((keymodifiermask & (KMM_LSHIFT | KMM_RSHIFT)) == 0) {
			#ifdef	OPENGL
				float mousex = button.x;
				float mousey = Surf_Display->h - button.y;
				float w = Surf_Display->w;
				float h = Surf_Display->h;
				float dim = minf(w, h);
				float gX = transX + (mousex / w) * 200.0 * w / dim / zoomFactor;
				float gY = transY + (mousey / h) * 200.0 * h / dim / zoomFactor;
				//printf("%d,%d->%d,%d\n", (int) transX, (int) transY, (int) gX, (int) gY);
				zoomFactor /= 1.1;
				transX = gX - (mousex / w) * 200.0 * w / dim / zoomFactor;
				transY = gY - (mousey / h) * 200.0 * h / dim / zoomFactor;
			#else
				//float viewX = (gX - viewPortL) * zoomFactor,
				float gX = ((float) button.x) / zoomFactor + viewPortL;
				// float viewY = (viewPortB - gY) * zoomFactor,
				float gY = viewPortB - ((float) button.y) / zoomFactor;
				zoomFactor /= 1.1;
				//printf("Zoom %g\n", zoomFactor);
				viewPortL = gX - ((float) button.x) / zoomFactor;
				viewPortB = ((float) button.y) / zoomFactor + gY;
			#endif
				render();
			}
			else if (currentLayer < layerCount - 1)
				drawLayer(++currentLayer);
			break;
	}
}
Пример #30
0
void DataMarkerLabel::drawLayer(const QModelIndex &index, QPainter &painter, const QModelIndex selIndex, QList<int> &frames)
{
    if (!index.isValid())
    {
        return;
    }

    ObjectItem *pItem = m_pEditData->getObjectModel()->getItemFromIndex(index);
    if (!pItem)
    {
        return;
    }

    bool bMine = false;
    if (selIndex.isValid() && index == selIndex)
    {
        bMine = true;
    }

    const QList<FrameData> &datas = pItem->getFrameData();
    for (int i = 0; i < datas.size(); i++)
    {
        const FrameData data = datas.at(i);

        if (data.frame < m_frameStart || data.frame > m_frameEnd)
        {
            continue;
        }

        int x0 = getX(data.frame);
        int x1 = getX(data.frame + 1);
        if (x1 < 0)
        {
            continue;
        }
        if (bMine)
        {
            if (m_pressFrame == data.frame)
            {
                continue;
            }
            painter.fillRect(x0, 0, x1 - x0, height() / 3, QColor(255, 0, 0, 128));
        }
        else
        {
            if (frames.indexOf(data.frame) >= 0)
            {
                continue;
            }
            frames.append(data.frame);

            QColor col = QColor(0, 0, 255, 128);
            if (m_pEditData->getObjectModel()->isObject(m_pEditData->getSelIndex()))
            {
                col.setRed(255);
            }
            painter.fillRect(x0, height() / 3, x1 - x0, height() / 3, col);
        }
    }

    for (int i = 0; i < pItem->childCount(); i++)
    {
        QModelIndex child = m_pEditData->getObjectModel()->index(i, 0, index);
        drawLayer(child, painter, selIndex, frames);
    }
}