Пример #1
0
void CmusikTrackCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW lpcd = (LPNMCUSTOMDRAW)pNMHDR;

	// CDDS_PREPAINT is at the beginning of the paint cycle. 
	// this will fire first, so we tell it we want
	// all item drawing information...
	if ( lpcd->dwDrawStage == CDDS_PREPAINT )
	{
		// Request prepaint notifications for each item.
		*pResult = CDRF_NOTIFYITEMDRAW;         
		return;
	}

	// CDDS_ITEMPREPAINT is sent when an item is about
	// to be drawn..
	if ( lpcd->dwDrawStage == CDDS_ITEMPREPAINT )
	{	
		CDC *pDC = CDC::FromHandle( lpcd->hdc );
		CRect rect( lpcd->rc );

		// we don't want to draw any ticks,
		// so just skip the default action
		// and return...
		if ( lpcd->dwItemSpec == TBCD_TICS )
		{
			ReleaseDC( pDC );

			*pResult = CDRF_SKIPDEFAULT;
			return;
		}

		// drawing the thumb
		else if ( lpcd->dwItemSpec == TBCD_THUMB )
		{
			CRect rcThumbDraw;
			if ( rect.Height() > rect.Width() )
				DrawHorizontalThumb( pDC, rect );
			else
				DrawVerticalThumb( pDC, rect );
		}

		// drawing the channel, the space
		// below the thumb
		else if ( lpcd->dwItemSpec == TBCD_CHANNEL )
		{
			CRect rcThumb;
			GetThumbRect(rcThumb);

			DrawChannel( pDC, rect, ( rcThumb.Height() > rcThumb.Width() ) );
		}

		*pResult = CDRF_SKIPDEFAULT;
		return;
	}

	*pResult = CDRF_SKIPDEFAULT;
}
int MainWindowImpl::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QMainWindow::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: FinDeCourseValueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 1: GrapheMoteurValueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 2: GraphePasValueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 3: InverseurStateChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 4: TrimeValueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 5: DebatementValueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 6: DRValueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 7: TypeCurrentIndexChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 8: ModeCurrentIndexChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 9: FoncInterupteurA((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 10: FoncInterupteurB((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 11: FoncPotA((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 12: FoncPotB((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 13: FoncTimeEnvoyer((*reinterpret_cast< const QTime(*)>(_a[1]))); break;
        case 14: FoncMixSource((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 15: FoncMixDestination((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 16: FoncMixPositif((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 17: FoncMixInterupteur((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 18: FoncMixNegatif((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 19: FoncEnvoyer(); break;
        case 20: FoncCharger(); break;
        case 21: FoncEnregistr(); break;
        case 22: FoncEnregistrSous(); break;
        case 23: FoncImport(); break;
        case 24: FoncExport(); break;
        case 25: DrawChannel(); break;
        case 26: FoncNewCBPort((*reinterpret_cast< const QString(*)>(_a[1]))); break;
        case 27: FoncA_propos(); break;
        case 28: StateChangedInverseur3((*reinterpret_cast< int(*)>(_a[1]))); break;
        default: ;
        }
        _id -= 29;
    }
    return _id;
}
Пример #3
0
void HandlerPPM (char *file1, char *file2, char *file3){
	
	/* in PPM format, there are tree bits per pixel, each bit
		corresponding to the levels of RGB in the pixel */
	printf("step - .ppm file\n");
	
	FILE *fp1;//image 1
	FILE *fp2;//image 2
	FILE *fp3;//image 3
	
	FILE *ceri1;//image 1
	FILE *ceri2;//image 2
	FILE *ceri3;//image 3
	
	FILE *rend;//final HDR rendered file
	
	int width;
	int height;
		
	fp1 = fopen(file1, "rb");
	fp2 = fopen(file2, "rb");
	fp3 = fopen(file3, "rb");
	
	/* Get width and height from first image */
	Get_w_h(fp1, &width, &height);
	/* Skip lines so we are ready to read */
	SkipLines(&fp1, 1);
	SkipLines(&fp2, 4);
	SkipLines(&fp3, 4);
	
	
	//write to rendered file
	rend = fopen("rendered.ppm", "w");
	fprintf(rend, "%s\n%d\n%d\n%d\n", "P6", width, height, 255);
	
	ceri1 = fopen("cert1.ppm", "w");
	fprintf(ceri1, "%s\n%d\n%d\n%d\n", "P6", width, height, 255);
	
	ceri2 = fopen("cert2.ppm", "w");
	fprintf(ceri2, "%s\n%d\n%d\n%d\n", "P6", width, height, 255);
	
	ceri3 = fopen("cert3.ppm", "w");
	fprintf(ceri3, "%s\n%d\n%d\n%d\n", "P6", width, height, 255);
		
	int size;
	float ku, km, ko; //exposures for the three images
	unsigned char rendR, rendG, rendB;
	ku = 1;
	km = 4;
	ko = 16;
	
	unsigned char bR1, bR2, bR3;
	unsigned char bG1, bG2, bG3;
	unsigned char bB1, bB2, bB3;
	
	unsigned char c1wR, c2wR, c3wR;
	unsigned char c1wG, c2wG, c3wG;
	unsigned char c1wB, c2wB, c3wB;

	printf("step - writing channels\n");
	for(size = width * height; size > 0; size --){
	
		/* Red Channel */
		bR1 = fgetc(fp1);//median
		bR2 = fgetc(fp2);//under
		bR3 = fgetc(fp3);//over
		rendR = DrawChannel(bR1, bR2, bR3, km, ku, ko, &c1wR, &c2wR, &c3wR);
		
		bG1 = fgetc(fp1);
		bG2 = fgetc(fp2);
		bG3 = fgetc(fp3);
		rendG = DrawChannel(bG1, bG2, bG3, km, ku, ko, &c1wG, &c2wG, &c3wG);
		
		bB1 = fgetc(fp1);
		bB2 = fgetc(fp2);
		bB3 = fgetc(fp3);
		rendB = DrawChannel(bB1, bB2, bB3, km, ku, ko, &c1wB, &c2wB, &c3wB);

		/* write rendered file */
		fprintf(rend, "%c", rendR);
		fprintf(rend, "%c", rendG);
		fprintf(rend, "%c", rendB);
		
		/* write certainty c1 */
		fprintf(ceri1, "%c", c1wR);
		fprintf(ceri1, "%c", c1wG);
		fprintf(ceri1, "%c", c1wB);
	
		/* write certainty c1 */
		fprintf(ceri2, "%c", c2wR);
		fprintf(ceri2, "%c", c2wG);
		fprintf(ceri2, "%c", c2wB);
		
		/* write certainty c1 */
		fprintf(ceri3, "%c", c3wR);
		fprintf(ceri3, "%c", c3wG);
		fprintf(ceri3, "%c", c3wB);
	}
	
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	
	fclose(rend);
	
	fclose(ceri1);
	fclose(ceri2);
	fclose(ceri3);
	
	
	printf("step - closed files\n");
}
Пример #4
0
void CScopeWindow::UpdateChart (void)
{
	UG_AREA Area;
	UG_WindowGetArea (&m_Window, &Area);
	Area.xs += MARGIN;
	Area.xe -= MARGIN;
	Area.ys += MARGIN+20+10;	// consider title height and margin below
	Area.ye -= MARGIN;

	UG_FillFrame (Area.xs, Area.ys, Area.xe, Area.ye, C_BLACK);

	if (m_pTimeLine == 0)
	{
		return;
	}

	// display headline

	double fZoomFactor = m_pTimeLine->GetZoomFactor ();
	CString Zoom;
	if (fZoomFactor >= 1.0)
	{
		Zoom.Format ("%.0f", fZoomFactor);
	}
	else
	{
		Zoom.Format ("1/%.0f", 1.0 / fZoomFactor);
	}

	double fSampleRate = m_pTimeLine->GetSampleRate ();
	CString SampleRate;
	if (fSampleRate < 1000000.0)
	{
		SampleRate.Format ("%.0fKHz", fSampleRate / 1000.0);
	}
	else
	{
		SampleRate.Format ("%.3fMHz", fSampleRate / 1000000.0);
	}

	CString String;
	String.Format ("SC: %.0fus     OF: %.1fus     TO: %.0fus     ZO: x%s     FQ: %s",
		       m_pTimeLine->GetScaleDivision () * 1000000.0,
		       m_pTimeLine->GetWindowLeft () * 1000000.0,
		       m_pTimeLine->GetRuntime () * 1000000.0,
		       (const char *) Zoom,
		       (const char *) SampleRate);

	UG_SetBackcolor (C_BLACK);
	UG_SetForecolor (C_WHITE);
	UG_FontSelect (&FONT_6X8);
	UG_PutString (Area.xs+5, Area.ys+1, (char *) (const char *) String);

	Area.ys += 12;
	UG_DrawLine (Area.xs, Area.ys, Area.xe, Area.ys, C_WHITE);

	// draw scale

	DrawScale (Area);

	// count active channels

	unsigned nChannelCount = 0;
	for (unsigned nChannel = 1; nChannel <= CHANS; nChannel++)
	{
		if (m_nChannelEnable & CH (nChannel))
		{
			nChannelCount++;
		}
	}

	if (nChannelCount == 0)
	{
		return;
	}

	if (nChannelCount == 1)
	{
		Area.ys += 100;
		Area.ye -= 100;
	}

	// draw channels

	UG_S16 sChannelHeight = (Area.ye-Area.ys+1) / nChannelCount;

	unsigned nChannelsDrawn = 0;
	for (unsigned nChannel = 1; nChannel <= CHANS; nChannel++)
	{
		if (m_nChannelEnable & CH (nChannel))
		{
			UG_AREA ChannelArea;
			ChannelArea.xs = Area.xs;
			ChannelArea.xe = Area.xe;
			ChannelArea.ys = Area.ys + sChannelHeight*nChannelsDrawn;
			ChannelArea.ye = ChannelArea.ys + sChannelHeight-1;

			DrawChannel (nChannel, ChannelArea);

			nChannelsDrawn++;
		}
	}
}
void CXTPSkinObjectTrackBar::OnDraw(CDC* pDC)
{
	CXTPClientRect rc(this);

	CXTPBufferDC dcMem(*pDC, rc);

	NMCUSTOMDRAW nm;
	ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
	nm.hdc = dcMem.GetSafeHdc();
	nm.dwDrawStage = CDDS_PREPAINT;
	nm.hdr.code = NM_CUSTOMDRAW;
	nm.hdr.hwndFrom = GetSafeHwnd();
	nm.hdr.idFrom = GetDlgCtrlID();

	LRESULT lrCdrf = GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);

	FillBackground(&dcMem, rc);


	if (::GetFocus() == m_hWnd && ((SendMessage(WM_QUERYUISTATE) & UISF_HIDEFOCUS) == 0))
	{
		dcMem.SetBkColor(GetColor(COLOR_BTNHIGHLIGHT));

		DrawFocusRect(dcMem, &rc);
	}

	FillDrawRect();

	if (lrCdrf & CDRF_NOTIFYITEMDRAW)
	{
		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_ITEMPREPAINT;
		nm.dwItemSpec = TBCD_TICS;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);
	}

	DrawTics(&dcMem);

	if (lrCdrf & CDRF_NOTIFYITEMDRAW)
	{
		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_ITEMPOSTPAINT;
		nm.dwItemSpec = TBCD_TICS;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);

		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_ITEMPREPAINT;
		nm.dwItemSpec = TBCD_CHANNEL;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);
	}

	DrawChannel(&dcMem);

	if (lrCdrf & CDRF_NOTIFYITEMDRAW)
	{
		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_ITEMPOSTPAINT;
		nm.dwItemSpec = TBCD_CHANNEL;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);

		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_ITEMPREPAINT;
		nm.dwItemSpec = TBCD_THUMB;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);
	}

	DrawThumb(&dcMem);

	if (lrCdrf & CDRF_NOTIFYITEMDRAW)
	{
		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_ITEMPOSTPAINT;
		nm.dwItemSpec = TBCD_THUMB;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);
	}

	if (lrCdrf & CDRF_NOTIFYPOSTPAINT)
	{
		ZeroMemory(&nm, sizeof(NMCUSTOMDRAW));
		nm.hdc = dcMem.GetSafeHdc();
		nm.dwDrawStage = CDDS_POSTPAINT;
		nm.hdr.code = NM_CUSTOMDRAW;
		nm.hdr.hwndFrom = GetSafeHwnd();
		nm.hdr.idFrom = GetDlgCtrlID();

		GetParent()->SendMessage(WM_NOTIFY, (WPARAM)GetDlgCtrlID(), (LPARAM)&nm);
	}
}
Пример #6
0
void CEarSliderCtrl::OnReflectCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
    NMCUSTOMDRAW nmcd = *(LPNMCUSTOMDRAW)pNMHDR;
    LPNMCUSTOMDRAW lpcd = (LPNMCUSTOMDRAW)pNMHDR;

    UINT drawStage = nmcd.dwDrawStage;
    UINT itemSpec = nmcd.dwItemSpec;
    CDC *pDC = CDC::FromHandle(nmcd.hdc);

    switch(drawStage)
    {
    case CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYPOSTPAINT ;
        break;
    case CDDS_PREERASE:
    case CDDS_POSTERASE:
    case CDDS_ITEMPREERASE:
    case CDDS_ITEMPOSTERASE:
        *pResult = CDRF_DODEFAULT;
        break;
    case CDDS_ITEMPREPAINT:
        /* switch(itemSpec)
        {
        	case TBCD_CHANNEL:
        		 *pResult = CDRF_DODEFAULT| CDRF_NOTIFYPOSTPAINT;
                  break;
        	case TBCD_TICS:
        	case TBCD_THUMB:
        		 *pResult = CDRF_DODEFAULT;
                  break;

        }
        break;*/
        switch(itemSpec)
        {
        case TBCD_TICS:
            *pResult = CDRF_DODEFAULT;
            break;
        case TBCD_THUMB:
            //DrawThumb(pDC, lpcd);

            if( m_focused )
            {
                CString str;
                DrawThumb(pDC, lpcd);
                *pResult =  CDRF_SKIPDEFAULT;
                break;
            }
            else
            {
                *pResult = CDRF_DODEFAULT ; //CDRF_SKIPDEFAULT;// CDRF_DODEFAULT;//CDRF_SKIPDEFAULT;//CDRF_SKIPDEFAULT;
                break;
            }


        //	str.Format(_T("%x"),lpcd->uItemState); CDIS_GRAYED
        //	DrawThumb(pDC, lpcd,str);
        //	*pResult =  CDRF_SKIPDEFAULT;
        //    break;

        case TBCD_CHANNEL:
            if(this->IsWindowVisible())
            {
                DrawChannel(pDC,&nmcd);
                *pResult = CDRF_SKIPDEFAULT;//CDRF_SKIPDEFAULT;//CDRF_SKIPDEFAULT;// //CDRF_SKIPDEFAULT; //CDRF_SKIPDEFAULT ;//CDRF_SKIPDEFAULT;  //CDRF_SKIPDEFAULT;
            }
            else
            {
                *pResult = CDRF_DODEFAULT;
            }
            break;
        }
        break;
    case CDDS_ITEMPOSTPAINT:
        switch(itemSpec)
        {
        case TBCD_CHANNEL:
        /*  {
        	    COLORREF m_color = RGB(128,128,128);
        		COLORREF m_clr   =  ::GetSysColor(COLOR_BTNFACE);  //RGB(200,30,40);
        		HDC  hbkdc  = this->GetParent()->GetDC()->GetSafeHdc();
        		COLORREF bkcolor = ::GetBkColor(hbkdc);

        		CDC* pDC = CDC::FromHandle( nmcd.hdc );

        		CPen pen(PS_SOLID,nmcd.rc.right-nmcd.rc.left, bkcolor); //m_clr);
        		//pDC->SelectObject(&pen);

        		RECT rrc = {nmcd.rc.left, nmcd.rc.top+1, nmcd.rc.right, nmcd.rc.bottom-1};
        	//	pDC->SetBkMode(TRANSPARENT);
        	//	pDC->Draw3dRect( &rrc, bkcolor, bkcolor );

        		pDC->SelectObject(&pen);
        		pDC->MoveTo(nmcd.rc.left,nmcd.rc.top);
        		pDC->LineTo(nmcd.rc.left,nmcd.rc.bottom);

        		pDC->MoveTo(nmcd.rc.right,nmcd.rc.top);
        		pDC->LineTo(nmcd.rc.right,nmcd.rc.bottom);
        		//pDC->DrawEdge(&nmcd.rc,EDGE_BUMP,BF_RECT);
        		pDC->Detach();
        	}
        	*pResult = CDRF_SKIPDEFAULT;
        	break;*/
        case TBCD_TICS:
            *pResult = CDRF_DODEFAULT;
            break;
        case TBCD_THUMB:

            *pResult = CDRF_DODEFAULT ; // CDRF_DODEFAULT; // CDRF_SKIPDEFAULT; //CDRF_DODEFAULT;  //CDRF_DODEFAULT;//CDRF_SKIPDEFAULT;
            break;



        }
        break;

    case CDDS_POSTPAINT:
        *pResult = CDRF_DODEFAULT;
        break;

    default:
        ASSERT( FALSE );

    }

}
void
BChannelSlider::_DrawThumbs()
{
	if (fBacking == NULL) {
		// This is the idea: we build a bitmap by taking the coordinates
		// of the first and last thumb frames (top/left and bottom/right)
		BRect first = ThumbFrameFor(0);
		BRect last = ThumbFrameFor(CountChannels() - 1);
		BRect rect(first.LeftTop(), last.RightBottom());

		if (fIsVertical)
			rect.top -= ThumbRangeFor(0);
		else
			rect.right += ThumbRangeFor(0);

		rect.OffsetTo(B_ORIGIN);
		fBacking = new (std::nothrow) BBitmap(rect, B_RGB32, true);
		if (fBacking) {
			fBackingView = new (std::nothrow) BView(rect, "", 0, B_WILL_DRAW);
			if (fBackingView) {
				if (fBacking->Lock()) {
					fBacking->AddChild(fBackingView);
					fBackingView->SetFontSize(10.0);
					fBackingView->SetLowColor(
						ui_color(B_PANEL_BACKGROUND_COLOR));
					fBackingView->SetViewColor(
						ui_color(B_PANEL_BACKGROUND_COLOR));
					fBacking->Unlock();
				}
			} else {
				delete fBacking;
				fBacking = NULL;
			}
		}
	}

	if (fBacking && fBackingView) {
		BPoint drawHere;

		BRect bounds(fBacking->Bounds());
		drawHere.x = (Bounds().Width() - bounds.Width()) / 2.0;
		drawHere.y = (Bounds().Height() - bounds.Height()) - kPadding
			- fLineFeed;

		if (fBacking->Lock()) {
			// Clear the view's background
			fBackingView->FillRect(fBackingView->Bounds(), B_SOLID_LOW);

			BRect channelArea;
			// draw the entire control
			for (int32 channel = 0; channel < CountChannels(); channel++) {
				channelArea = ThumbFrameFor(channel);
				bool pressed = IsTracking()
					&& (channel == fCurrentChannel || fAllChannels);
				DrawChannel(fBackingView, channel, channelArea, pressed);
			}

			// draw some kind of current value tool tip
			if (fCurrentChannel != -1 && fMinPoint != 0) {
				char valueString[32];
				snprintf(valueString, 32, "%ld", ValueFor(fCurrentChannel));
				float stringWidth = fBackingView->StringWidth(valueString);
				float width = max_c(10.0, stringWidth);
				BRect valueRect(0.0, 0.0, width, 10.0);

				BRect thumbFrame(ThumbFrameFor(fCurrentChannel));
				float thumbDelta(ThumbDeltaFor(fCurrentChannel));

				if (fIsVertical) {
					valueRect.OffsetTo((thumbFrame.Width() - width) / 2.0
						+ fCurrentChannel * thumbFrame.Width(),
						thumbDelta + thumbFrame.Height() + 2.0);
					if (valueRect.bottom > fBackingView->Frame().bottom)
						valueRect.OffsetBy(0.0, -(thumbFrame.Height() + 12.0));
				} else {
					valueRect.OffsetTo((thumbDelta - (width + 2.0)),
						thumbFrame.top);
					if (valueRect.left < fBackingView->Frame().left) {
						valueRect.OffsetBy(thumbFrame.Width() + width + 2.0,
							0.0);
					}
				}

				rgb_color oldColor = fBackingView->HighColor();
				fBackingView->SetHighColor(255, 255, 172);
				fBackingView->FillRect(valueRect);
				fBackingView->SetHighColor(0, 0, 0);
				fBackingView->DrawString(valueString, BPoint(valueRect.left
					+ (valueRect.Width() - stringWidth) / 2.0, valueRect.bottom
					- 1.0));
				fBackingView->StrokeRect(valueRect.InsetByCopy(-0.5, -0.5));
				fBackingView->SetHighColor(oldColor);
			}

			fBackingView->Sync();
			fBacking->Unlock();
		}

		DrawBitmapAsync(fBacking, drawHere);

		// fClickDelta is used in MouseMoved()
		fClickDelta = drawHere;
	}
}