diff options
| -rw-r--r-- | plugingui/eventhandler.cc | 242 | ||||
| -rw-r--r-- | plugingui/guievent.h | 14 | ||||
| -rw-r--r-- | plugingui/listbox.cc | 55 | ||||
| -rw-r--r-- | plugingui/listbox.h | 1 | 
4 files changed, 119 insertions, 193 deletions
| diff --git a/plugingui/eventhandler.cc b/plugingui/eventhandler.cc index 34e0769..1dd629d 100644 --- a/plugingui/eventhandler.cc +++ b/plugingui/eventhandler.cc @@ -147,95 +147,46 @@ LRESULT CALLBACK dialogProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)   		break;  	case WM_LBUTTONUP: -    { -      GUI::ButtonEvent *e = new GUI::ButtonEvent(); -      e->x = (int)(short) LOWORD(lp); -      e->y = (int)(short) HIWORD(lp); -      e->button = 0; -      e->direction = -1; -      handler->event = e; -    } -    //		xPos = (int)(short) LOWORD(lp); -    //		yPos = (int)(short) HIWORD(lp); -    //		fwKeys = wp; -		break; -  	case WM_LBUTTONDBLCLK:  	case WM_LBUTTONDOWN: -    { -      GUI::ButtonEvent *e = new GUI::ButtonEvent(); -      e->x = (int)(short) LOWORD(lp); -      e->y = (int)(short) HIWORD(lp); -      e->button = 0; -      e->direction = 1; -      e->doubleclick = (msg == WM_LBUTTONDBLCLK); -      handler->event = e; -    } -    //xPos = (int)(short) LOWORD(lp); -		//yPos = (int)(short) HIWORD(lp); -		//fwKeys = wp; -		break; - +	case WM_RBUTTONUP: +	case WM_RBUTTONDBLCLK: +	case WM_RBUTTONDOWN:  	case WM_MBUTTONUP: -    { -      GUI::ButtonEvent *e = new GUI::ButtonEvent(); -      e->x = (int)(short) LOWORD(lp); -      e->y = (int)(short) HIWORD(lp); -      e->button = 3; -      e->direction = -1; -      e->doubleclick = 0; -      handler->event = e; -    } -		//xPos = (int)(short) LOWORD(lp); -		//yPos = (int)(short) HIWORD(lp); -		//fwKeys = wp; -		break; - -  case WM_MBUTTONDBLCLK: +	case WM_MBUTTONDBLCLK:  	case WM_MBUTTONDOWN:      {        GUI::ButtonEvent *e = new GUI::ButtonEvent();        e->x = (int)(short) LOWORD(lp);        e->y = (int)(short) HIWORD(lp); -      e->button = 3; -      e->direction = 1; -      e->doubleclick = (msg == WM_MBUTTONDBLCLK); -      handler->event = e; -    } -    //		xPos = (int)(short) LOWORD(lp); -    //		yPos = (int)(short) HIWORD(lp); -    //		fwKeys = wp; -		break; -	case WM_RBUTTONUP: -    { -      GUI::ButtonEvent *e = new GUI::ButtonEvent(); -      e->x = (int)(short) LOWORD(lp); -      e->y = (int)(short) HIWORD(lp); -      e->button = 1; -      e->direction = -1; -      e->doubleclick = 0; -      handler->event = e; -    } -    //		xPos = (int)(short) LOWORD(lp); -    //		yPos = (int)(short) HIWORD(lp); -    //		fwKeys = wp; -		break; +      if(msg == WM_LBUTTONUP || +         msg == WM_LBUTTONDBLCLK || +         msg == WM_LBUTTONDOWN) e->button = 0; + +      if(msg == WM_RBUTTONUP || +         msg == WM_RBUTTONDBLCLK || +         msg == WM_RBUTTONDOWN) e->button = 1; + +      if(msg == WM_MBUTTONUP || +         msg == WM_MBUTTONDBLCLK || +         msg == WM_MBUTTONDOWN) e->button = 2; + +      e->direction = 0; +      if(msg == WM_LBUTTONUP || +         msg == WM_RBUTTONUP || +         msg == WM_MBUTTONUP) e->direction = -1; + +      if(msg == WM_LBUTTONDOWN || +         msg == WM_RBUTTONDOWN || +         msg == WM_MBUTTONDOWN) e->direction = 1; + +      e->doubleclick = (msg == WM_LBUTTONDBLCLK || +                        msg == WM_RBUTTONDBLCLK || +                        msg == WM_MBUTTONDBLCLK); -  case WM_RBUTTONDBLCLK: -	case WM_RBUTTONDOWN: -    { -      GUI::ButtonEvent *e = new GUI::ButtonEvent(); -      e->x = (int)(short) LOWORD(lp); -      e->y = (int)(short) HIWORD(lp); -      e->button = 1; -      e->direction = 1; -      e->doubleclick = (msg == WM_RBUTTONDBLCLK);        handler->event = e;      } -    //		xPos = (int)(short) LOWORD(lp); -    //		yPos = (int)(short) HIWORD(lp); -    //		fwKeys = wp;  		break;  	case WM_KEYDOWN: @@ -254,9 +205,6 @@ LRESULT CALLBACK dialogProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)        e->direction = -1;        handler->event = e;      } -    //		xPos = (int)(short) LOWORD(lp); -    //		yPos = (int)(short) HIWORD(lp); -    //		fwKeys = wp;  		break;  	case WM_CHAR: @@ -270,9 +218,6 @@ LRESULT CALLBACK dialogProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)          handler->event = e;        }      } -    //		xPos = (int)(short) LOWORD(lp); -    //		yPos = (int)(short) HIWORD(lp); -    //		fwKeys = wp;  		break;  	case WM_PAINT: @@ -284,8 +229,6 @@ LRESULT CALLBACK dialogProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)        e->height = 100;        handler->event = e; - -#if 1        // Move to window.h (in class)        HDC pDC;        HBITMAP old; @@ -294,119 +237,48 @@ LRESULT CALLBACK dialogProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)        GUI::PixelBuffer &px = gwindow->wpixbuf;        { // Create bitmap (move to window.cc) -          HDC hDC;          BITMAPINFO bitmapinfo; -        hDC=CreateCompatibleDC(NULL); -        bitmapinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); -        bitmapinfo.bmiHeader.biWidth=px.width; -        bitmapinfo.bmiHeader.biHeight=-px.height; /* top-down */ -        bitmapinfo.bmiHeader.biPlanes=1; -        bitmapinfo.bmiHeader.biBitCount=32; -        bitmapinfo.bmiHeader.biCompression=BI_RGB; -        bitmapinfo.bmiHeader.biSizeImage=0; -        bitmapinfo.bmiHeader.biClrUsed=256; -        bitmapinfo.bmiHeader.biClrImportant=256; -        ourbitmap=CreateDIBSection(hDC,&bitmapinfo,DIB_RGB_COLORS,(void**)&framebuf,0,0); +        hDC = CreateCompatibleDC(NULL); +        bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); +        bitmapinfo.bmiHeader.biWidth = px.width; +        bitmapinfo.bmiHeader.biHeight = -px.height; /* top-down */ +        bitmapinfo.bmiHeader.biPlanes = 1; +        bitmapinfo.bmiHeader.biBitCount = 32; +        bitmapinfo.bmiHeader.biCompression = BI_RGB; +        bitmapinfo.bmiHeader.biSizeImage = 0; +        bitmapinfo.bmiHeader.biClrUsed = 256; +        bitmapinfo.bmiHeader.biClrImportant = 256; +        ourbitmap=CreateDIBSection(hDC, &bitmapinfo, +                                   DIB_RGB_COLORS, (void**)&framebuf, 0, 0);          pDC=CreateCompatibleDC(NULL); -        old=(HBITMAP__*)SelectObject(pDC,ourbitmap); +        old = (HBITMAP__*)SelectObject(pDC, ourbitmap);          DeleteDC(hDC); -                } -        { // Copy GUI::PixelBuffer to framebuffer (move to window.cc) -          int i,j,k; -        for (k=0,i=0;i<(int)px.height;i++) -          for (j=0;j<(int)px.width;j++,k++) +        for (k=0,i=0;i<(int)px.height;i++) { +          for (j=0;j<(int)px.width;j++,k++) {              *(framebuf+k)=RGB(px.buf[(j + i * px.width) * 3 + 2],                                px.buf[(j + i * px.width) * 3 + 1],                                px.buf[(j + i * px.width) * 3 + 0]); +          } +        }        } -	PAINTSTRUCT	ps; -  //	RECT		rect; -	HDC			hdc; - -  //  bool m_state = true; -  //	HBRUSH	m_brush; -  //	HPEN	m_penh, m_pens;		//Outer -  //	HPEN	m_penih, m_penis;	//Inner -   -	hdc = BeginPaint(handler->gctx->m_hwnd, &ps); -  BitBlt(hdc,0,0,px.width,px.height,pDC,0,0,SRCCOPY); -  EndPaint(handler->gctx->m_hwnd, &ps); - - - - -  { // Destroy bitmap (move to window.cc) - -    SelectObject(pDC,old); -    DeleteDC(pDC); -    DeleteObject(ourbitmap); - -  } - - - - - - - -#else -	PAINTSTRUCT	ps; -  //	RECT		rect; -	HDC			hdc; -  hdc = BeginPaint(handler->gctx->m_hwnd, &ps); -	if(hdc) { -    //		GetClientRect(handler->gctx->m_hwnd, &rect); - -    //Backgound -    //		FillRect(hdc, &rect, m_brush); - -    /* -    POINT p[2]; -    p[0].x = p[0].y = 10; -    p[1].x = p[1].y = 10; -    SelectObject(hdc, m_penis); -    Polyline(hdc, p, 2); -    */ -    GUI::PixelBuffer &px = gwindow->wpixbuf; -    for(size_t y = 0; y < px.height; y++) { -      for(size_t x = 0; x < px.width; x++) { -        int col = *((int*)(&px.buf[(x + y * px.width) * 3])) & 0xffffff; -        SetPixel(hdc, x, y, col); +      PAINTSTRUCT	ps; +      HDC	hdc = BeginPaint(handler->gctx->m_hwnd, &ps); +      BitBlt(hdc,0,0,px.width,px.height,pDC,0,0,SRCCOPY); +      EndPaint(handler->gctx->m_hwnd, &ps); + +      { // Destroy bitmap (move to window.cc) +        SelectObject(pDC,old); +        DeleteDC(pDC); +        DeleteObject(ourbitmap); +                }      } - -    /* -		//Edges -		drawHilight(hdc, m_state ? m_pens : m_penh, &rect); -		drawShadow(hdc, m_state ? m_penh : m_pens, &rect); - -		//Lav rect 1 mindre (shrink) -		rect.left++; -		rect.right--; -		rect.top++; -		rect.bottom--; - -		drawHilight(hdc, m_state ? m_penis : m_penih, &rect); -		drawShadow(hdc, m_state ? m_penih : m_penis, &rect); -    */ -		EndPaint(handler->gctx->m_hwnd, &ps); -	} -  //DeleteDC(hdc);  -#endif - - - - - - - -    }  		return DefWindowProc(hwnd, msg, wp, lp);  	} @@ -520,13 +392,15 @@ GUI::Event *GUI::EventHandler::getNextEvent()    }    if(xe.type == KeyPress || xe.type == KeyRelease) { -    //    printf("key: %d\n", e.xkey.keycode); +    // printf("key: %d\n", xe.xkey.keycode);      KeyEvent *e = new KeyEvent();      e->window_id = xe.xkey.window;      switch(xe.xkey.keycode) {      case 113: e->keycode = KeyEvent::KEY_LEFT; break;      case 114: e->keycode = KeyEvent::KEY_RIGHT; break; +    case 111: e->keycode = KeyEvent::KEY_UP; break; +    case 116: e->keycode = KeyEvent::KEY_DOWN; break;      case 119: e->keycode = KeyEvent::KEY_DELETE; break;      case 22: e->keycode = KeyEvent::KEY_BACKSPACE; break;      case 110: e->keycode = KeyEvent::KEY_HOME; break; diff --git a/plugingui/guievent.h b/plugingui/guievent.h index db0328c..df2db26 100644 --- a/plugingui/guievent.h +++ b/plugingui/guievent.h @@ -108,12 +108,14 @@ public:    enum {      KEY_UNKNOWN   =-1, -    KEY_LEFT      = 1,// if(e->keycode == 113) { // left key -    KEY_RIGHT     = 2,//} else if(e->keycode == 114) { // right key -    KEY_DELETE    = 3,//} else if(e->keycode == 119) { // delete -    KEY_BACKSPACE = 4,//} else if(e->keycode == 22) { // backspace -    KEY_HOME      = 5, -    KEY_END       = 6, +    KEY_LEFT      = 1, +    KEY_RIGHT     = 2, +    KEY_UP        = 3, +    KEY_DOWN      = 4, +    KEY_DELETE    = 5, +    KEY_BACKSPACE = 6, +    KEY_HOME      = 7, +    KEY_END       = 8,      KEY_CHARACTER = 0xffff // character data is stored in 'text'    };  }; diff --git a/plugingui/listbox.cc b/plugingui/listbox.cc index f917368..3dec8bc 100644 --- a/plugingui/listbox.cc +++ b/plugingui/listbox.cc @@ -134,9 +134,58 @@ void GUI::ListBox::scrollEvent(ScrollEvent *e)    repaintEvent(NULL);  } +void GUI::ListBox::keyEvent(GUI::KeyEvent *e) +{ +  //  printf("!\n"); + +  if(e->direction == -1) { +    switch(e->keycode) { +    case GUI::KeyEvent::KEY_UP: +      { +        std::map<std::string, std::string>::reverse_iterator i = items.rbegin(); +        while(i != items.rend()) { +          if(i->second == selected) break; +          i++; +        } +        i++; +        scroll_offset--; +        if(scroll_offset < 0) scroll_offset = 0; +        selected = i->second; +      } +      break; +    case GUI::KeyEvent::KEY_DOWN: +      { +        std::map<std::string, std::string>::iterator i = items.begin(); +        while(i != items.end()) { +          if(i->second == selected) break; +          i++; +        } +        i++; +        scroll_offset++; +        if(scroll_offset > (items.size() - 1)) +          scroll_offset = (items.size() - 1); +        selected = i->second; +      } +      break; +    case GUI::KeyEvent::KEY_HOME: +      selected = items.begin()->second; +      break; +    case GUI::KeyEvent::KEY_END: +      selected = items.rbegin()->second; +      break; +    default: +      break; +    } + +    //  printf("sel: %s\n", selected.c_str()); + +    repaintEvent(NULL); +  } + +} +  void GUI::ListBox::buttonEvent(ButtonEvent *e)  { -  //printf("click %d %d [dc: %d]\n", e->x, e->y, e->doubleclick);    if(e->direction == 1) {      if(e->x > (width() - btn_size) && e->y < (width() - 1)) {        if(e->y > 0 && e->y < btn_size) { @@ -173,7 +222,7 @@ void GUI::ListBox::buttonEvent(ButtonEvent *e)      }      repaintEvent(NULL); - -    if(e->doubleclick && dblclk_handler) dblclk_handler(ptr);    } + +  if(e->doubleclick && dblclk_handler) dblclk_handler(ptr);  } diff --git a/plugingui/listbox.h b/plugingui/listbox.h index 061a0eb..26d104b 100644 --- a/plugingui/listbox.h +++ b/plugingui/listbox.h @@ -54,6 +54,7 @@ public:    virtual void repaintEvent(RepaintEvent *e);    virtual void buttonEvent(ButtonEvent *e);    virtual void scrollEvent(ScrollEvent *e); +  virtual void keyEvent(KeyEvent *e);  private:    std::map<std::string, std::string> items; | 
