LLScrollbar::LLScrollbar(const Params & p)
:		LLUICtrl(p),
		mChangeCallback( p.change_callback() ),
		mOrientation( p.orientation ),
		mDocSize( p.doc_size ),
		mDocPos( p.doc_pos ),
		mPageSize( p.page_size ),
		mStepSize( p.step_size ),
		mDocChanged(FALSE),
		mDragStartX( 0 ),
		mDragStartY( 0 ),
		mHoverGlowStrength(0.15f),
		mCurGlowStrength(0.f),
		mTrackColor( p.track_color() ),
		mThumbColor ( p.thumb_color() ),
		mThumbImageV(p.thumb_image_vertical),
		mThumbImageH(p.thumb_image_horizontal),
		mTrackImageV(p.track_image_vertical),
		mTrackImageH(p.track_image_horizontal),
		mThickness(p.thickness.isProvided() ? p.thickness : LLUI::sSettingGroups["config"]->getS32("UIScrollbarSize")),
		mBGVisible(p.bg_visible),
		mBGColor(p.bg_color)
{
	updateThumbRect();
	
	// Page up and page down buttons
	LLRect line_up_rect;
	LLRect line_down_rect;

	if( VERTICAL == mOrientation )
	{
		line_up_rect.setLeftTopAndSize( 0, getRect().getHeight(), mThickness, mThickness );
		line_down_rect.setOriginAndSize( 0, 0, mThickness, mThickness );
	}
	else // HORIZONTAL
	{
		line_up_rect.setOriginAndSize( 0, 0, mThickness, mThickness );
		line_down_rect.setOriginAndSize( getRect().getWidth() - mThickness, 0, mThickness, mThickness );
	}

	LLButton::Params up_btn(mOrientation == VERTICAL ? p.up_button : p.left_button);
	up_btn.name(std::string("Line Up"));
	up_btn.rect(line_up_rect);
	up_btn.click_callback.function(boost::bind(&LLScrollbar::onLineUpBtnPressed, this, _2));
	up_btn.mouse_held_callback.function(boost::bind(&LLScrollbar::onLineUpBtnPressed, this, _2));
	up_btn.tab_stop(false);
	up_btn.follows.flags = (mOrientation == VERTICAL ? (FOLLOWS_RIGHT | FOLLOWS_TOP) : (FOLLOWS_LEFT | FOLLOWS_BOTTOM));

	addChild(LLUICtrlFactory::create<LLButton>(up_btn));

	LLButton::Params down_btn(mOrientation == VERTICAL ? p.down_button : p.right_button);
	down_btn.name(std::string("Line Down"));
	down_btn.rect(line_down_rect);
	down_btn.follows.flags(FOLLOWS_RIGHT|FOLLOWS_BOTTOM);
	down_btn.click_callback.function(boost::bind(&LLScrollbar::onLineDownBtnPressed, this, _2));
	down_btn.mouse_held_callback.function(boost::bind(&LLScrollbar::onLineDownBtnPressed, this, _2));
	down_btn.tab_stop(false);

	addChild(LLUICtrlFactory::create<LLButton>(down_btn));
}
Example #2
0
	Keyboard::Keyboard(const ax::Rect& rect)
	{
		// Create window.
		win = ax::Window::Create(rect);
		win->event.OnPaint = ax::WBind<ax::GC>(this, &Keyboard::OnPaint);
		
		ax::Button::Info btn_info;
		btn_info.normal = ax::Color(0.7);
		btn_info.hover = btn_info.normal;
		btn_info.clicking = ax::Color(0.5);
		btn_info.selected = btn_info.normal;
		btn_info.contour = btn_info.normal;
		btn_info.font_color = ax::Color(0.0);
		btn_info.round_corner_radius = 0;
		
		const int key_delta = 5;
		const int key_width = 60;
		const int key_height = 60;
		
		const ax::Size tab_size(85, key_height);
		const ax::Size delete_size(85, key_height);
		const ax::Size caps_size(95, key_height);
		const ax::Size return_size(115, key_height);
		const ax::Size shift_size(125, key_height);
		const ax::Size cmd_size(80, key_height);
		const ax::Size space_size(390, key_height);
		
		const ax::Size letter_size(key_width, key_height);
		const ax::Point init_btn_pos(10, 10);
		
		ax::Button::Events btn_evts;
		ax::Point btn_pos(init_btn_pos);
		
		ax::StringVector first_row_letters = { "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=" };
		ax::StringVector second_row_letters
		= { "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[", "]", "\\" };
		
		ax::StringVector third_row_letters
		= { "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", "'"};
		
		ax::StringVector fourth_row_letters
		= { "Z", "X", "C", "V", "B", "N", "M", ",", ".", "/"};
		
		
		for (auto& letter : first_row_letters) {
			ax::Button::Ptr btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", letter));
			btn_pos = win->node.Add(btn)->dimension.GetRect().GetNextPosRight(key_delta);
		}
		
		ax::Button::Ptr delete_btn(new ax::Button(ax::Rect(btn_pos, delete_size), btn_evts, btn_info, "", "delete"));
		win->node.Add(delete_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		// Second row.
		btn_pos = ax::Point(init_btn_pos);
		btn_pos.y += (key_height + key_delta);
		
		ax::Button::Ptr tab_btn(new ax::Button(ax::Rect(btn_pos, tab_size), btn_evts, btn_info, "", "tab"));
		btn_pos = win->node.Add(tab_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		for (auto& letter : second_row_letters) {
			ax::Button::Ptr btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", letter));
			btn_pos = win->node.Add(btn)->dimension.GetRect().GetNextPosRight(key_delta);
		}
		
		// Third row.
		btn_pos = ax::Point(init_btn_pos);
		btn_pos.y += (2 * key_height + 2 * key_delta);
		
		ax::Button::Ptr caps_btn(new ax::Button(ax::Rect(btn_pos, caps_size), btn_evts, btn_info, "", "caps lock"));
		btn_pos = win->node.Add(caps_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		for (auto& letter : third_row_letters) {
			ax::Button::Ptr btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", letter));
			btn_pos = win->node.Add(btn)->dimension.GetRect().GetNextPosRight(key_delta);
		}
		
		// Return.
		ax::Button::Ptr return_btn(new ax::Button(ax::Rect(btn_pos, return_size), btn_evts, btn_info, "", "return"));
		win->node.Add(return_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		// Fourth row.
		btn_pos = ax::Point(init_btn_pos);
		btn_pos.y += (3 * key_height + 3 * key_delta);
		
		ax::Button::Ptr shift_btn(new ax::Button(ax::Rect(btn_pos, shift_size), btn_evts, btn_info, "", "shift"));
		btn_pos = win->node.Add(shift_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		for (auto& letter : fourth_row_letters) {
			ax::Button::Ptr btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", letter));
			btn_pos = win->node.Add(btn)->dimension.GetRect().GetNextPosRight(key_delta);
		}
		
		ax::Button::Ptr shift_right_btn(new ax::Button(ax::Rect(btn_pos + ax::Point(25, 0), letter_size), btn_evts, btn_info, "", "up"));
		btn_pos = win->node.Add(shift_right_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		// Fifth row.
		btn_pos = ax::Point(init_btn_pos);
		btn_pos.y += (4 * key_height + 4 * key_delta);
		
		ax::Button::Ptr func_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "fn"));
		btn_pos = win->node.Add(func_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr ctrl_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "ctrl"));
		btn_pos = win->node.Add(ctrl_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr alt_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "alt"));
		btn_pos = win->node.Add(alt_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr cmd_btn(new ax::Button(ax::Rect(btn_pos, cmd_size), btn_evts, btn_info, "", "cmd"));
		btn_pos = win->node.Add(cmd_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr space_btn(new ax::Button(ax::Rect(btn_pos, space_size), btn_evts, btn_info, "", ""));
		btn_pos = win->node.Add(space_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr opt_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "alt"));
		btn_pos = win->node.Add(opt_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr left_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "left"));
		btn_pos = win->node.Add(left_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr down_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "down"));
		btn_pos = win->node.Add(down_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		ax::Button::Ptr right_btn(new ax::Button(ax::Rect(btn_pos, letter_size), btn_evts, btn_info, "", "right"));
		btn_pos = win->node.Add(right_btn)->dimension.GetRect().GetNextPosRight(key_delta);
		
		//	Button(const ax::Rect& rect, const Button::Events& events,
		//		   const Button::Info& info, std::string img_path = "",
		//		   std::string label = "", ax::Flag flags = 0, std::string msg = "");
	}