// EIKTHUMB.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//
	  
#include <eikthumb.h>
#include <eikenv.h>
#include <eikgrip.h>

#include <eikcolor.h>

EXPORT_C CEikScrollThumb::CEikScrollThumb(TOrientation aOrientation)
	:iOrientation(aOrientation)
// Constructor
	{
	__DECLARE_NAME(_S("CEikScrollThumb"));
	iBorder=TEikBorder(TEikBorder::EVerticalBar);
	if (iOrientation==EHorizontal)
		iBorder.SetType(TEikBorder::EHorizontalBar);
	}

EXPORT_C void CEikScrollThumb::SetDragState(TBool aState)
// Set the drag state of the button
	{
	iDragState=aState;
	}

EXPORT_C TBool CEikScrollThumb::DragState()
	{
	return(iDragState);
	}

const TInt KEikScrollThumbGripProportion=3;
const TInt KEikScrollThumbGripMargin=3;


EXPORT_C void CEikScrollThumb::Draw(const TRect& /*aRect*/) const
// Draw the whole thumb
	{
	CWindowGc& gc=SystemGc();
	gc.SetPenColor(iEikonEnv->ControlColor(EEikColorScrollThumbEdge, *this)); //KEikScrollThumbEdgeColor);
	iBorder.Draw(gc,Rect());
	DrawDragState(gc);
	}

EXPORT_C void CEikScrollThumb::DrawDragStateNow() const
	{
	ActivateGc();
	CWindowGc& gc=SystemGc();
	DrawDragState(gc);
	DeactivateGc();
	}

void CEikScrollThumb::DrawDragState(CWindowGc& aGc) const
// Draw the thumb's emphasis depending on whether it's being dragged
	{
	TBool horizontal=(iOrientation==EHorizontal);
	TRect rect=iBorder.InnerRect(Rect());
	TRgb bgColor;
	if (IsDimmed())
		bgColor=iEikonEnv->ControlColor((iDragState? EEikColorScrollButtonThumbBackgroundPressed : EEikColorScrollThumbDimmed), *this);
	else
		bgColor=iEikonEnv->ControlColor((iDragState? EEikColorScrollButtonThumbBackgroundPressed : 
													EEikColorScrollButtonThumbBackground),*this);
	aGc.SetBrushColor(bgColor);
	aGc.Clear(rect);

	TRect gripRect=rect;
	TInt length=(horizontal)? gripRect.Size().iWidth : gripRect.Size().iHeight;
	TInt gripStart=((length*(KEikScrollThumbGripProportion-1))/KEikScrollThumbGripProportion)/2;
	TInt horizBorder=(horizontal)? gripStart : KEikScrollThumbGripMargin;
	TInt vertBorder=(horizontal)? KEikScrollThumbGripMargin : gripStart;

	gripRect.Shrink(horizBorder,vertBorder);
	TEikGrip::TOrientation gripOrientation=(horizontal)? TEikGrip::EVertical : TEikGrip::EHorizontal;
	TEikGrip(gripOrientation).Draw(aGc,gripRect);
	}
