Пример #1
0
void draw_fresh(char (*p)[32])
{
	int i, j;

	for(i = 0; i < 24; i++) {
		for(j = 0; j < 32; j++) {
			if(p[i][j]) {
				draw_element(j, i, COLOR);	
			}else {
				draw_element(j, i, BLACK);
			}
		}
	}
}
void SoftwareRendererImp::draw_group( Group& group ) {

  for ( size_t i = 0; i < group.elements.size(); ++i ) {
    draw_element(group.elements[i]);
  }

}
Пример #3
0
void
hid_expose_callback (HID * hid, BoxType * region, void *item)
{
  HID *old_gui = gui;

  gui = hid;
  Output.fgGC = gui->graphics->make_gc ();
  Output.bgGC = gui->graphics->make_gc ();
  Output.pmGC = gui->graphics->make_gc ();

  hid->graphics->set_color (Output.pmGC, "erase");
  hid->graphics->set_color (Output.bgGC, "drill");

  if (item)
    {
      doing_pinout = true;
      draw_element ((ElementType *)item);
      doing_pinout = false;
    }
  else
    DrawEverything (region);

  gui->graphics->destroy_gc (Output.fgGC);
  gui->graphics->destroy_gc (Output.bgGC);
  gui->graphics->destroy_gc (Output.pmGC);
  gui = old_gui;
}
Пример #4
0
    void SoftwareRendererImp::draw_svg(SVG& svg) {

        // set top level transformation
        transformation = canvas_to_screen;

        // draw all elements
        for (size_t i = 0; i < svg.elements.size(); ++i) {
            draw_element(svg.elements[i]);
        }

        // draw canvas outline
        Vector2D a = transform(Vector2D(0, 0));
        a.x--;
        a.y++;
        Vector2D b = transform(Vector2D(svg.width, 0));
        b.x++;
        b.y++;
        Vector2D c = transform(Vector2D(0, svg.height));
        c.x--;
        c.y--;
        Vector2D d = transform(Vector2D(svg.width, svg.height));
        d.x++;
        d.y--;

        rasterize_line(a.x, a.y, b.x, b.y, Color::Black);
        rasterize_line(a.x, a.y, c.x, c.y, Color::Black);
        rasterize_line(d.x, d.y, b.x, b.y, Color::Black);
        rasterize_line(d.x, d.y, c.x, c.y, Color::Black);

        // resolve and send to render target
        resolve();

    }
void SoftwareRendererImp::draw_svg( SVG& svg ) {

  // set top level transformation
  transformation = canvas_to_screen;

  //allocate array for new target
  size_t super_w, super_h, super_size;
  super_w = this->target_w * sample_rate;
  super_h = this->target_h * sample_rate;
  unsigned char* old_buf = this->render_target;
  unsigned char* super_buf = new unsigned char [super_w * super_h * 4];

  set_render_target( super_buf, super_w, super_h );
  clear_target();

  /*
  printf("before rendering:\n");
  for (size_t i = 0; i < super_w * super_h; i++ ) {
    if (super_buf[i] != 255) {
      printf("super_buf[%zu] = %u\n", i, super_buf[i]);
    }
  }
  */

  // draw all elements
  for ( size_t i = 0; i < svg.elements.size(); ++i ) {
    transformation = canvas_to_screen;
    draw_element(svg.elements[i]);
  }

  // draw canvas outline
  Vector2D a = transform(Vector2D(    0    ,     0    )); a.x--; a.y++;
  Vector2D b = transform(Vector2D(svg.width,     0    )); b.x++; b.y++;
  Vector2D c = transform(Vector2D(    0    ,svg.height)); c.x--; c.y--;
  Vector2D d = transform(Vector2D(svg.width,svg.height)); d.x++; d.y--;

  rasterize_line(a.x, a.y, b.x, b.y, Color::Black);
  rasterize_line(a.x, a.y, c.x, c.y, Color::Black);
  rasterize_line(d.x, d.y, b.x, b.y, Color::Black);
  rasterize_line(d.x, d.y, c.x, c.y, Color::Black);

  this->sample_buffer = super_buf;
  /*
  printf("after rendering:\n");
  for (size_t i = 0; i < super_w * super_h; i++ ) {
    if (super_buf[i] != 255) {
      printf("super_buf[%zu] = %u\n", i, super_buf[i]);
    }
  }
  */
  set_render_target( old_buf, super_w / sample_rate, super_h / sample_rate);
  clear_target();
  // resolve and send to render target
  resolve();

}
Пример #6
0
void reset_block()
{
	int i,j;
	int x,y;
	for (i = 0; i < ROW_CANVAS; i++) {
		for (j = 0; j < COL_CANVAS; j++) {
			if ( block_entry_p->arr[i][j] == 1 ) {
				block_entry_p->arr[i][j] = 0;
				x = j * DRAW_BLOCK_SIZE;
				y = i * DRAW_BLOCK_SIZE;
				draw_element(x+autodown_x, y+autodown_y, PINK);
			}
		}
	}
}
Пример #7
0
static void load_laby(int num){
  int x,y;
  for(x=0;x<RING_WIDTH;x++)
    for(y=0;y<RING_HEIGHT;y++){
      ring[x][y] = labyrinth[num][y][x];
      if(ring[x][y] != ' '){
        draw_element(x,y,wall,0);
      }else{
        draw_filled_rect(x * SNAKE_ELEMENT_SIZE,
                         y * SNAKE_ELEMENT_SIZE,
                         x * SNAKE_ELEMENT_SIZE+SNAKE_ELEMENT_SIZE-1,
                         y * SNAKE_ELEMENT_SIZE+SNAKE_ELEMENT_SIZE-1, MAKE_COLOR(COLOR_WHITE,COLOR_WHITE));
      }
    }
}
Пример #8
0
static void snake_generate_apple()
{
  int x,y,i;
  while(1)
  {
    randomagain:
    x = rand() % RING_WIDTH;
    y = rand() % RING_HEIGHT;
    if(ring[x][y] != ' ') continue;
    i = snake_tail;
    while(1){
      if(snake[i][0] == x && snake[i][1] == y) goto randomagain;
      if(i == snake_head) break;
      i = (i+1)%SNAKE_MAX_LENGTH;
    }
    draw_element(x,y,apple,0);
    ring[x][y] = 1;
    break;
  }
}
Пример #9
0
void init()
{
	int i,j;
	int x,y;
	int is_init = 0;

	russian_p = calloc(COL*ROW, sizeof(int));

	for (i = 0; i < ROW; i++) {//20
		for (j = 0; j < COL; j++) {//10
			x=j*DRAW_BLOCK_SIZE;
			y=i*DRAW_BLOCK_SIZE;
			if (is_init == 0) {
				max_x = min_x = x;
				max_y = min_y = y;
				is_init = 1;
			}else{
				if (x > max_x) {
					max_x = x;
				}
				if (x < min_x) {
					min_x = x;
				}
				if (y > max_y) {
					max_y = y;
				}
				if (y < min_y) {
					min_y = y;
				}
			}
			draw_element(x, y, 0xfa);
			//sleep(1);
		}
	}
	//printf("max_x %d min_x %d max_y %d min_y %d\n", max_x, min_x, max_y, min_y);


}
Пример #10
0
void draw_picture(int row_canvas, int color, int is_draw){
	int i,j;
	int x,y;
	int max_x_i,  max_x_j, min_x_i,  min_x_j, max_y_i,  max_y_j;

	switch(block_entry_p->type){
		case F**K:
			switch(block_entry_p->pos){

				case UP:
					block_entry_p->arr[0][1] = 1;
					block_entry_p->arr[1][0] = 1;
					block_entry_p->arr[1][1] = 1;
					block_entry_p->arr[1][2] = 1;
					min_x_i = 1; min_x_j = 0;
					max_x_i = 1; max_x_j = 2;
					max_y_i = 1; max_y_j = 2;
					break;
				case DOWN:
					block_entry_p->arr[0][0] = 1;
					block_entry_p->arr[0][1] = 1;
					block_entry_p->arr[0][2] = 1;
					block_entry_p->arr[1][1] = 1;
					min_x_i = 0; min_x_j = 0;
					max_x_i = 0; max_x_j = 2;
					max_y_i = 1; max_y_j = 1;
					break;
				case LEFT:
					block_entry_p->arr[1][0] = 1;
					block_entry_p->arr[0][1] = 1;
					block_entry_p->arr[1][1] = 1;
					block_entry_p->arr[2][1] = 1;
					min_x_i = 1; min_x_j = 0;
					max_x_i = 0; max_x_j = 1;
					max_y_i = 2; max_y_j = 1;
					break;
				case RIGHT:
					block_entry_p->arr[0][1] = 1;
					block_entry_p->arr[1][1] = 1;
					block_entry_p->arr[1][2] = 1;
					block_entry_p->arr[2][1] = 1;
					min_x_i = 0; min_x_j = 1;
					max_x_i = 1; max_x_j = 2;
					max_y_i = 2; max_y_j = 1;
					break;

				default:
					break;
			}
			break;
		default:break;
	}

	for (i = 0; i < row_canvas; i++) {
		for (j = 0; j < COL_CANVAS; j++) {
			if ( block_entry_p->arr[i][j] == 1 ) {
				x = j*DRAW_BLOCK_SIZE;
				y = i*DRAW_BLOCK_SIZE;
				if(max_x_i == i && max_x_j == j){
					current_max_x = x;
				}
				if(min_x_i == i && min_x_j == j){
					current_min_x = x;
				}
				if(max_y_i == i && max_y_j == j){
					current_max_y =y;
				}
				if (is_draw == IS_DRAW) {
					draw_element(x+autodown_x, y+autodown_y, color);
					//sleep(1);
				}
			}
		}
	}

	//printf(" current_max_x %d  current_max_y %d current_min_x %d \n", current_max_x, current_max_y, current_min_x);

}
Пример #11
0
void copy(){
	int k;
	int i, j ,l, m, x, y, z , p, q;
	int is_game_over = 0;

	//set top level i j for copy gamever
	top_i_j tmp;
	top_i_j i_j_arr[COL];
	for (k = 0; k < COL; k++) {
		tmp.i = 0;
		tmp.j = k;
		i_j_arr[k] =tmp;
	}

	for (i = 0; i < ROW; i++) {
		for (j = 0; j < COL; j++) {
			x=j*DRAW_BLOCK_SIZE;
			y=i*DRAW_BLOCK_SIZE;
			for (l = 0; l < ROW_CANVAS; l++) {
				for (m = 0; m < COL_CANVAS; m++) {
					p=m*DRAW_BLOCK_SIZE+autodown_x;
					q=l*DRAW_BLOCK_SIZE+autodown_y;
					if(x == p && y ==q){
						if(block_entry_p->arr[l][m]==1){
							//printf("wwwwwwwwwwwwwwwwwwwwwwww i %d j %d\n", i, j);
							russian_p[i][j]=1;
							draw_element(p, q, YELLOW);
							for (k = 0; k < COL; k++) {
								if (i==i_j_arr[k].i && j ==i_j_arr[k].j) {
									is_game_over=1;
								}
							}
						}
					}
				}
			}
		}
	}

	//delete complete block
	int delete_num = 0;
	int last_delete_row = 0;
	for (i = ROW-1; i > 0; i--) {
		for (j = 0; j < COL; j++) {
			if (russian_p[i][j] == 0) {
				break;
			}
			if (j==COL-1) {
				for (k = 0; k < COL; k++) {
					x=k*DRAW_BLOCK_SIZE;
					y=i*DRAW_BLOCK_SIZE;
					draw_element(x, y, PINK);
					russian_p[i][k] = 0;
					printf("delete i %d k %d\n",i,k);
				}
				delete_num++;
				last_delete_row = i;
				printf("---------------------------------\n");
				sleep(2);
			}
		}
	}
	printf("delete_num %d\n", delete_num);

	//after delete move down
	if (delete_num) {
		for (j = 0; j < COL; j++) {
			for (i = last_delete_row-1; i >= 0 ; i--) {
				x = j * DRAW_BLOCK_SIZE;
				y = i * DRAW_BLOCK_SIZE;
				z = (i+delete_num) * DRAW_BLOCK_SIZE;
				if (russian_p[i][j] == 1) {
					draw_element(x, y, PINK);
					russian_p[i][j] = 0;
					//sleep(2);
					printf("z %d y %d\n",z, y);
					draw_element(x, z, YELLOW);
					russian_p[i+delete_num][j] = 1;
				}
			}
		}
	}

	if (is_game_over) {
		printf("game over!!!");
		exit(1);
	}
}
Пример #12
0
sk_sp<GrTexture> GrClipMaskManager::CreateAlphaClipMask(GrContext* context,
                                                        int32_t elementsGenID,
                                                        GrReducedClip::InitialState initialState,
                                                        const GrReducedClip::ElementList& elements,
                                                        const SkVector& clipToMaskOffset,
                                                        const SkIRect& clipSpaceIBounds) {
    GrResourceProvider* resourceProvider = context->resourceProvider();
    GrUniqueKey key;
    GetClipMaskKey(elementsGenID, clipSpaceIBounds, &key);
    if (GrTexture* texture = resourceProvider->findAndRefTextureByUniqueKey(key)) {
        return sk_sp<GrTexture>(texture);
    }

    // There's no texture in the cache. Let's try to allocate it then.
    GrPixelConfig config = kRGBA_8888_GrPixelConfig;
    if (context->caps()->isConfigRenderable(kAlpha_8_GrPixelConfig, false)) {
        config = kAlpha_8_GrPixelConfig;
    }

    sk_sp<GrDrawContext> dc(context->newDrawContext(SkBackingFit::kApprox,
                                                    clipSpaceIBounds.width(),
                                                    clipSpaceIBounds.height(),
                                                    config));
    if (!dc) {
        return nullptr;
    }
    
    // The texture may be larger than necessary, this rect represents the part of the texture
    // we populate with a rasterization of the clip.
    SkIRect maskSpaceIBounds = SkIRect::MakeWH(clipSpaceIBounds.width(), clipSpaceIBounds.height());

    // The scratch texture that we are drawing into can be substantially larger than the mask. Only
    // clear the part that we care about.
    dc->clear(&maskSpaceIBounds,
              GrReducedClip::kAllIn_InitialState == initialState ? 0xffffffff : 0x00000000,
              true);

    // Set the matrix so that rendered clip elements are transformed to mask space from clip
    // space.
    const SkMatrix translate = SkMatrix::MakeTrans(clipToMaskOffset.fX, clipToMaskOffset.fY);

    // It is important that we use maskSpaceIBounds as the stencil rect in the below loop.
    // The second pass that zeros the stencil buffer renders the rect maskSpaceIBounds so the first
    // pass must not set values outside of this bounds or stencil values outside the rect won't be
    // cleared.

    // walk through each clip element and perform its set op
    for (GrReducedClip::ElementList::Iter iter = elements.headIter(); iter.get(); iter.next()) {
        const Element* element = iter.get();
        SkRegion::Op op = element->getOp();
        bool invert = element->isInverseFilled();
        if (invert || SkRegion::kIntersect_Op == op || SkRegion::kReverseDifference_Op == op) {
            GrFixedClip clip(maskSpaceIBounds);

            // draw directly into the result with the stencil set to make the pixels affected
            // by the clip shape be non-zero.
            static constexpr GrUserStencilSettings kStencilInElement(
                 GrUserStencilSettings::StaticInit<
                     0xffff,
                     GrUserStencilTest::kAlways,
                     0xffff,
                     GrUserStencilOp::kReplace,
                     GrUserStencilOp::kReplace,
                     0xffff>()
            );
            if (!stencil_element(dc.get(), clip, &kStencilInElement,
                                 translate, element)) {
                return nullptr;
            }

            // Draw to the exterior pixels (those with a zero stencil value).
            static constexpr GrUserStencilSettings kDrawOutsideElement(
                 GrUserStencilSettings::StaticInit<
                     0x0000,
                     GrUserStencilTest::kEqual,
                     0xffff,
                     GrUserStencilOp::kZero,
                     GrUserStencilOp::kZero,
                     0xffff>()
            );
            if (!dc->drawContextPriv().drawAndStencilRect(clip, &kDrawOutsideElement,
                                                          op, !invert, false,
                                                          translate,
                                                          SkRect::Make(clipSpaceIBounds))) {
                return nullptr;
            }
        } else {
            // all the remaining ops can just be directly draw into the accumulation buffer
            GrPaint paint;
            paint.setAntiAlias(element->isAA());
            paint.setCoverageSetOpXPFactory(op, false);

            draw_element(dc.get(), GrNoClip(), paint, translate, element);
        }
    }

    sk_sp<GrTexture> texture(dc->asTexture());
    SkASSERT(texture);
    texture->resourcePriv().setUniqueKey(key);
    return texture;
}
Пример #13
0
void gui_snake_draw() {
  unsigned short new_head;
  unsigned short new_tail;
  unsigned short new_cord;
  char game_over_flag = 0,draw_head,clear_tail,draw_points=1;
  unsigned char prevdir = direction;
  unsigned int i;
    new_head = (snake_head+1)%SNAKE_MAX_LENGTH;
    new_tail = (snake_tail+1)%SNAKE_MAX_LENGTH;
    draw_head = 1;
    clear_tail = 1;
    if(direction == DIR_RIGHT){
      new_cord = (snake[snake_head][0]+1)%RING_WIDTH;
      snake[new_head][0] = new_cord;
      snake[new_head][1] = snake[snake_head][1];
    }
    if(direction == DIR_LEFT){
      new_cord = snake[snake_head][0]-1;
      if(new_cord == 0xFFFF) new_cord = RING_WIDTH-1;
      snake[new_head][0] = new_cord;
      snake[new_head][1] = snake[snake_head][1];
    }
    if(direction == DIR_UP){
      new_cord = snake[snake_head][1]-1;
      if(new_cord == 0xFFFF) new_cord = RING_HEIGHT-1;
      snake[new_head][0] = snake[snake_head][0];
      snake[new_head][1] = new_cord;
    }
    if(direction == DIR_DOWN){
      new_cord = (snake[snake_head][1]+1)%RING_HEIGHT;
      snake[new_head][0] = snake[snake_head][0];
      snake[new_head][1] = new_cord;
    }

    i = snake_tail;
    while(1){
      if(snake[i][0] == snake[new_head][0] && snake[i][1] == snake[new_head][1]){
        game_over_flag = 1;
        break;
      }
      if(i == snake_head) break;
      i = (i+1)%SNAKE_MAX_LENGTH;
    }

    if(ring[snake[new_head][0]][snake[new_head][1]] == 1){
      ring[snake[new_head][0]][snake[new_head][1]] = ' ';
      snake_generate_apple();
      points+=level;
      draw_points = 1;
      if((new_head+1)%SNAKE_MAX_LENGTH != snake_tail){
        new_tail = snake_tail;
        clear_tail = 0;
      }
    }else if(ring[snake[new_head][0]][snake[new_head][1]] != ' '){
      game_over_flag = 1;
    }
    if(draw_head){
      if(direction == DIR_UP) draw_element(snake[new_head][0],snake[new_head][1],head,2);   //up
      if(direction == DIR_LEFT) draw_element(snake[new_head][0],snake[new_head][1],head,0);  //left
      if(direction == DIR_DOWN) draw_element(snake[new_head][0],snake[new_head][1],head,1);  //down
      if(direction == DIR_RIGHT) draw_element(snake[new_head][0],snake[new_head][1],head,3);  //right

      new_cord = snake_head-1;
      if(new_cord == 0xFFFF) new_cord = SNAKE_MAX_LENGTH-1;
      if(snake[new_cord][0] > snake[new_head][0] && snake[new_cord][1] > snake[new_head][1] && direction == DIR_UP) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,2);
      else if(snake[new_cord][0] > snake[new_head][0] && snake[new_cord][1] > snake[new_head][1] && direction == DIR_LEFT) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,0);
      else if(snake[new_cord][0] < snake[new_head][0] && snake[new_cord][1] > snake[new_head][1] && direction == DIR_UP) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,4);
      else if(snake[new_cord][0] < snake[new_head][0] && snake[new_cord][1] > snake[new_head][1] && direction == DIR_RIGHT) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,3);
      else if(snake[new_cord][0] < snake[new_head][0] && snake[new_cord][1] < snake[new_head][1] && direction == DIR_RIGHT) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,2);
      else if(snake[new_cord][0] < snake[new_head][0] && snake[new_cord][1] < snake[new_head][1] && direction == DIR_DOWN) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,0);
      else if(snake[new_cord][0] > snake[new_head][0] && snake[new_cord][1] < snake[new_head][1] && direction == DIR_LEFT) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,4);
      else if(snake[new_cord][0] > snake[new_head][0] && snake[new_cord][1] < snake[new_head][1] && direction == DIR_DOWN) draw_element(snake[snake_head][0],snake[snake_head][1],tail2,3);
      else if(prevdir == direction && (direction == DIR_RIGHT || direction == DIR_LEFT)) draw_element(snake[snake_head][0],snake[snake_head][1],tail,0);
      else if(prevdir == direction && (direction == DIR_UP || direction == DIR_DOWN)) draw_element(snake[snake_head][0],snake[snake_head][1],tail,1);
    }
    prevdir = direction;
    if(clear_tail){
        draw_filled_rect(snake[snake_tail][0] * SNAKE_ELEMENT_SIZE,
                         snake[snake_tail][1] * SNAKE_ELEMENT_SIZE,
                         snake[snake_tail][0] * SNAKE_ELEMENT_SIZE+SNAKE_ELEMENT_SIZE-1,
                         snake[snake_tail][1] * SNAKE_ELEMENT_SIZE+SNAKE_ELEMENT_SIZE-1, COLOR_WHITE);
    }
    snake_head = new_head;
    snake_tail = new_tail;
    msleep(100);
    if(game_over_flag){
      game_over();
      game_over_flag = 0;
    }
    if(draw_points){
      draw_points = 0;
      sprintf(str_buf,"Points: %d",points);
      draw_string(10,220,str_buf, MAKE_COLOR(COLOR_WHITE, COLOR_BLUE));
    }
}