[DFB]移动鼠标绘制线条

    技术2022-05-20  30

    /*1。surface的绘图函数 2。如何在surface中获取类似framebuffer的绘制内存地址(去掉代码中的注释) 3。eventbuffer的使用,按escape退出,按c 键清屏 ,移动鼠标绘线条 (平滑度有待改进)*/ #include <stdio.h> #include <directfb/directfb.h> static IDirectFB                *dfb = NULL; static IDirectFBDisplayLayer    *layer = NULL; static IDirectFBSurface            *surface = NULL; static IDirectFBEventBuffer        *events = NULL; static int screen_width = 0; static int screen_height = 0; int main(int argc, char *argv[]) {     int pitch;     int i,j;     int quit = 0;     int x = 0, y = 0, old_x = 0, old_y = 0;     DirectFBInit(&argc, &argv);     DirectFBCreate(&dfb);     dfb->GetDisplayLayer(dfb, DLID_PRIMARY, &layer);     dfb->CreateInputEventBuffer(dfb, DICAPS_ALL, DFB_TRUE, &events);     layer->SetCooperativeLevel(layer, DLSCL_EXCLUSIVE);     layer->GetSurface(layer, &surface);     surface->GetSize(surface, &screen_width, &screen_height);     surface->SetColor(surface, 0, 56, 0 , 0xff);     surface->FillRectangle(surface, 0, 0, screen_width, screen_height);     while(!quit){         DFBEvent    evt;         events->WaitForEvent(events);    //等待事件         while(!quit && events->GetEvent(events, &evt) == DFB_OK){             if(evt.clazz == DFEC_INPUT){                     switch(evt.input.type){                         case    DIET_KEYPRESS: //响应键盘事件                             if(evt.input.key_symbol == DIKS_ESCAPE){//退出程序                                 quit = 1;                             }else     if(evt.input.key_symbol == DIKS_SMALL_C){//清屏                                 surface->SetColor(surface, 0, 0, 0 , 0xff);//设置当前色                                 surface->FillRectangle(surface, 0, 0, screen_width, screen_height);                             }                             break;                         case    DIET_AXISMOTION:                             if(evt.input.flags & DIEF_AXISREL){                                 switch(evt.input.axis){                                     case DIAI_X:                                          x+=evt.input.axisrel;                                          break;                                     case DIAI_Y:                                          y+=evt.input.axisrel;                                          break;                                     default :                                          break;                                 }//switch(evt.input.axis){                                 if(x < 0){x = 0;}                                 if(y < 0){y = 0;}                             }                             surface->SetColor(surface, 0, 0xff, 0, 0xff);                             surface->DrawLine(surface, old_x, old_y, x, y);                             old_x = x;                             old_y = y;                             break;                         default:                             break;                     }//switch                 }//if             }//while(!quit && events->GetEvent(events, &evt) == DFB_OK){     }//while(!quit){     surface->Release(surface);     layer->Release(layer);     dfb->Release(dfb);     return 0; }


    最新回复(0)