Changeset 603 for trunk/src


Ignore:
Timestamp:
Aug 21, 1999, 2:10:02 PM (26 years ago)
Author:
cbratschi
Message:

trackbar: performance updates

Location:
trunk/src/comctl32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comctl32/progress.c

    r592 r603  
    1 /* $Id: progress.c,v 1.9 1999-08-19 21:24:19 cbratschi Exp $ */
     1/* $Id: progress.c,v 1.10 1999-08-21 12:10:01 cbratschi Exp $ */
    22/*
    33 * Progress control
     
    2828//        "Unknown parameter(s) for message " #msg     \
    2929//      "(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
    30 #define UNKNOWN_PARAM(msg, wParam, lParam)
    31 
    32 #define PROGRESS_GetInfoPtr(hwnd) ((PROGRESS_INFO *)GetWindowLongA(hwnd, 0))
     30//#define UNKNOWN_PARAM(msg, wParam, lParam)
     31
     32#define PROGRESS_GetInfoPtr(hwnd) ((PROGRESS_INFO *)GetWindowLongA(hwnd,0))
    3333
    3434
  • trunk/src/comctl32/tab.c

    r496 r603  
    1 /* $Id: tab.c,v 1.10 1999-08-14 16:13:13 cbratschi Exp $ */
     1/* $Id: tab.c,v 1.11 1999-08-21 12:10:02 cbratschi Exp $ */
    22/*
    33 * Tab control
     
    389389  TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd);
    390390  POINT pt;
    391   INT newItem,dummy;
     391  INT newItem;
     392  UINT dummy;
    392393
    393394  if (infoPtr->hwndToolTip)
     
    17951796TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    17961797{
     1798//if (uMsg == WM_CREATE) MessageBoxA(hwnd,"wm_create!",NULL,MB_OK);//CB:bug!!!
     1799//CB: WM_CREATE never send!!!
    17971800    switch (uMsg)
    17981801    {
  • trunk/src/comctl32/trackbar.c

    r592 r603  
    1 /* $Id: trackbar.c,v 1.14 1999-08-19 21:24:19 cbratschi Exp $ */
     1/* $Id: trackbar.c,v 1.15 1999-08-21 12:10:02 cbratschi Exp $ */
    22/*
    33 * Trackbar control
     
    357357}
    358358
     359static VOID TRACKBAR_FillHorzTics(TRACKBAR_INFO *infoPtr,HDC hdc,int flags,COLORREF clrTic)
     360{
     361  RECT rect;
     362  INT range = infoPtr->nRangeMax-infoPtr->nRangeMin;
     363  INT width = infoPtr->rcChannel.right-infoPtr->rcChannel.left;
     364  HBRUSH hbr = CreateSolidBrush(clrTic);
     365
     366  if (flags & TBS_TOP)
     367  {
     368    rect.bottom = infoPtr->rcFullThumb.top-SCALE_SPACE-1+1;
     369    rect.top = rect.bottom-3;
     370  } else
     371  {
     372    rect.top = infoPtr->rcFullThumb.bottom+SCALE_SPACE+1;
     373    rect.bottom = rect.top+3;
     374  }
     375  rect.left = infoPtr->rcChannel.left+(width*(infoPtr->tics[0]-infoPtr->nRangeMin))/range;
     376  rect.right = infoPtr->rcChannel.left+(width*(infoPtr->tics[infoPtr->uNumTics-1]-infoPtr->nRangeMin))/range+1;
     377
     378  FillRect(hdc,&rect,hbr);
     379  DeleteObject(hbr);
     380}
     381
    359382static VOID
    360383TRACKBAR_DrawVertTic (TRACKBAR_INFO *infoPtr, HDC hdc, LONG ticPos,
     
    415438}
    416439
     440static VOID TRACKBAR_FillVertTics(TRACKBAR_INFO *infoPtr,HDC hdc,int flags,COLORREF clrTic)
     441{
     442  RECT rect;
     443  INT range = infoPtr->nRangeMax-infoPtr->nRangeMin;
     444  INT width = infoPtr->rcChannel.bottom-infoPtr->rcChannel.top;
     445  HBRUSH hbr = CreateSolidBrush(clrTic);
     446
     447  if (flags & TBS_TOP)
     448  {
     449    rect.right = infoPtr->rcFullThumb.left-SCALE_SPACE-1+1;
     450    rect.left = rect.right-3;
     451  } else
     452  {
     453    rect.left = infoPtr->rcFullThumb.right+SCALE_SPACE+1;
     454    rect.right = rect.left+3;
     455  }
     456  rect.top = infoPtr->rcChannel.top+(width*(infoPtr->tics[0]-infoPtr->nRangeMin))/range;
     457  rect.bottom = infoPtr->rcChannel.top+(width*(infoPtr->tics[infoPtr->uNumTics-1]-infoPtr->nRangeMin))/range+1;
     458
     459  FillRect(hdc,&rect,hbr);
     460  DeleteObject(hbr);
     461}
    417462
    418463static VOID
     
    749794        int ticFlags = dwStyle & 0x0f;
    750795        COLORREF clrTic = GetSysColor(COLOR_3DDKSHADOW);
    751 
    752         for (i = 0;i < infoPtr->uNumTics;i++)
    753             TRACKBAR_DrawTics(infoPtr,hdc,infoPtr->tics[i],ticFlags,clrTic);
     796        INT range = infoPtr->nRangeMax-infoPtr->nRangeMin;
     797        INT width = (dwStyle & TBS_VERT) ? rcChannel.bottom-rcChannel.top:rcChannel.right-rcChannel.left;
     798
     799        //check if maximum of visible marks is reached
     800        if (dwStyle & TBS_AUTOTICKS && infoPtr->uNumTics > 1 && (INT)(width*infoPtr->tics[0]/range) == (INT)(width*infoPtr->tics[1]/range))
     801        {
     802          //draw all pixels at once -> much faster
     803          if (dwStyle & TBS_VERT)
     804          {
     805            if ((ticFlags & TBS_LEFT) || (ticFlags & TBS_BOTH))
     806              TRACKBAR_FillVertTics(infoPtr,hdc,ticFlags | TBS_LEFT,clrTic);
     807            if (!(ticFlags & TBS_LEFT) || (ticFlags & TBS_BOTH))
     808              TRACKBAR_FillVertTics(infoPtr,hdc,ticFlags & ~TBS_LEFT,clrTic);
     809          } else
     810          {
     811            if ((ticFlags & TBS_TOP) || (ticFlags & TBS_BOTH))
     812              TRACKBAR_FillHorzTics(infoPtr,hdc,ticFlags | TBS_TOP,clrTic);
     813            if (!(ticFlags & TBS_TOP) || (ticFlags & TBS_BOTH))
     814              TRACKBAR_FillHorzTics(infoPtr,hdc,ticFlags & ~TBS_TOP,clrTic);
     815          }
     816        } else
     817        {
     818          for (i = 0;i < infoPtr->uNumTics;i++)
     819              TRACKBAR_DrawTics(infoPtr,hdc,infoPtr->tics[i],ticFlags,clrTic);
     820        }
    754821
    755822        TRACKBAR_DrawTics(infoPtr,hdc,0,ticFlags | TIC_LEFTEDGE,clrTic);
     
    817884   TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(hwnd);
    818885   DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    819    RECT lastRect,newRect,windowRect;
     886   RECT lastRect,newRect,updateRect;
    820887   HDC hdcCompatible;
    821888   HBITMAP bitmap,oldbmp;
     
    830897     infoPtr->flags &= ~TB_DRAGPOSVALID;
    831898   }
    832    if (infoPtr->nPos == lastPos) return;
     899   if (!mustRedraw && infoPtr->nPos == lastPos) return;
    833900
    834901   if (dwStyle & TBS_NOTHUMB) return;
     
    848915
    849916   //BitBlt from memory -> no flickering
    850    GetClientRect(hwnd,&windowRect);
     917   updateRect.left = MIN(lastRect.left,newRect.left);
     918   updateRect.right = MAX(lastRect.right,newRect.right);
     919   updateRect.top = MIN(lastRect.top,newRect.top);
     920   updateRect.bottom = MAX(lastRect.bottom,newRect.bottom);
    851921   hdc = GetDC(hwnd);
    852922   hdcCompatible = CreateCompatibleDC(hdc);
    853    bitmap = CreateCompatibleBitmap(hdc,windowRect.right,windowRect.bottom);
     923   bitmap = CreateCompatibleBitmap(hdc,updateRect.right,updateRect.bottom);
    854924   oldbmp = SelectObject(hdcCompatible,bitmap);
    855925   TRACKBAR_Draw(hwnd,hdcCompatible);
     
    883953}
    884954
    885 //redraw thumb at same position
    886 
    887 static VOID TRACKBAR_UpdateThumb(HWND hwnd)
    888 {
    889    HDC hdc;
    890    TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr (hwnd);
    891    DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    892    HRGN hrgn;
    893 
    894    if (dwStyle & TBS_NOTHUMB) return;
    895 
    896    hdc = GetDC(hwnd);
    897    hrgn = CreateRectRgnIndirect(&infoPtr->rcFullThumb);
    898    SelectClipRgn(hdc,hrgn);
    899    TRACKBAR_Draw(hwnd,hdc);
    900    SelectClipRgn(hdc,0);
    901    DeleteObject(hrgn);
    902    ReleaseDC(hwnd,hdc);
    903 }
    904 
    905955//redraw everything
    906956
     
    17511801    int clickPlace,prevPos,vertical;
    17521802    DOUBLE clickPos;
    1753     RECT thumb;
     1803    RECT thumb,fullThumb;
    17541804    POINT clickPoint;
    17551805
     
    17651815
    17661816    //Button down on thumb?
    1767     thumb = infoPtr->rcFullThumb; //approzimative
     1817    thumb = infoPtr->rcThumb;
     1818    fullThumb = infoPtr->rcFullThumb;
    17681819    if ((vertical &&
    1769          (clickPoint.y >= thumb.top) &&
    1770          (clickPoint.y <= thumb.bottom) &&
    1771          (clickPoint.x >= thumb.left) &&
    1772          (clickPoint.x <= thumb.right))   ||
     1820         clickPoint.y >= thumb.top &&
     1821         clickPoint.y <= thumb.bottom &&
     1822         ((dwStyle & TBS_BOTH &&
     1823           clickPoint.x >= thumb.left &&
     1824           clickPoint.x <= thumb.right
     1825          ) ||
     1826          (dwStyle & TBS_LEFT &&
     1827           clickPoint.x <= thumb.right &&
     1828           (clickPoint.x >= thumb.left ||
     1829            (clickPoint.x >= fullThumb.left &&
     1830             (thumb.left-clickPoint.x <= clickPoint.y-thumb.top &&
     1831              thumb.left-clickPoint.x <= thumb.bottom-clickPoint.y
     1832             )
     1833            )
     1834           )
     1835          ) ||
     1836          (!(dwStyle & (TBS_BOTH | TBS_LEFT)) &&
     1837           clickPoint.x >= thumb.left &&
     1838           (clickPoint.x <= thumb.right ||
     1839            (clickPoint.x <= fullThumb.right &&
     1840             (clickPoint.x-thumb.right <= clickPoint.y-thumb.top &&
     1841              clickPoint.x-thumb.right <= thumb.bottom-clickPoint.y
     1842             )
     1843            )
     1844           )
     1845         ))
     1846        ) ||
    17731847        (!vertical &&
    1774          (clickPoint.x >= thumb.left) &&
    1775          (clickPoint.x <= thumb.right) &&
    1776          (clickPoint.y >= thumb.top) &&
    1777          (clickPoint.y <= thumb.bottom)))
     1848         clickPoint.x >= thumb.left &&
     1849         clickPoint.x <= thumb.right &&
     1850         ((dwStyle & TBS_BOTH &&
     1851           clickPoint.y >= thumb.top &&
     1852           clickPoint.y <= thumb.bottom
     1853          ) ||
     1854          (dwStyle & TBS_TOP &&
     1855           clickPoint.y <= thumb.bottom &&
     1856           (clickPoint.y >= thumb.top ||
     1857            (clickPoint.y >= fullThumb.top &&
     1858             (thumb.top-clickPoint.y <= clickPoint.x-thumb.left &&
     1859              thumb.top-clickPoint.y <= thumb.right-clickPoint.x
     1860             )
     1861            )
     1862           )
     1863          ) ||
     1864          (!(dwStyle & (TBS_BOTH | TBS_TOP)) &&
     1865           clickPoint.y >= thumb.top &&
     1866           (clickPoint.y <= thumb.bottom ||
     1867            (clickPoint.y <= fullThumb.bottom &&
     1868             (clickPoint.y-thumb.bottom <= clickPoint.x-thumb.left &&
     1869              clickPoint.y-thumb.bottom <= thumb.right-clickPoint.x
     1870             )
     1871            )
     1872           )
     1873         ))
     1874       ))
    17781875       {
    17791876         infoPtr->flags |= TB_DRAG_MODE;
     
    18011898         }
    18021899         SetCapture(hwnd);
    1803          TRACKBAR_UpdateThumb(hwnd); //change arrow color
     1900         TRACKBAR_UpdateThumbPosition(hwnd,infoPtr->nPos,TRUE); //change arrow color
    18041901         return 0;
    18051902       }
     
    18731970      }
    18741971
    1875       TRACKBAR_UpdateThumb(hwnd); //change arrow color
     1972      TRACKBAR_UpdateThumbPosition(hwnd,infoPtr->nPos,TRUE); //change arrow color
    18761973    }
    18771974
Note: See TracChangeset for help on using the changeset viewer.