[Add] Added some vertical scrollbar stuff.
[Add] New font, forgot from last commit.
This commit is contained in:
		
							parent
							
								
									2a8d0f156e
								
							
						
					
					
						commit
						d7cd76510c
					
				
							
								
								
									
										
											BIN
										
									
								
								guifont.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								guifont.ttf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -10,11 +10,11 @@ include_HEADERS = body.h frame.h generic_system_view.h glfreetype.h gui_button.h | |||||||
| 		planet.h player.h dynamic_body.h sector.h sector_view.h ship_cpanel.h ship.h space.h star.h star_system.h system_info_view.h \
 | 		planet.h player.h dynamic_body.h sector.h sector_view.h ship_cpanel.h ship.h space.h star.h star_system.h system_info_view.h \
 | ||||||
| 		system_view.h vector3.h view.h world_view.h utils.h space_station.h space_station_view.h model_body.h gui_iselectable.h \
 | 		system_view.h vector3.h view.h world_view.h utils.h space_station.h space_station_view.h model_body.h gui_iselectable.h \
 | ||||||
| 		ship_type.h object.h info_view.h model_coll_mesh_data.h object_viewer_view.h fixed.h custom_starsystems.h gameconsts.h \
 | 		ship_type.h object.h info_view.h model_coll_mesh_data.h object_viewer_view.h fixed.h custom_starsystems.h gameconsts.h \
 | ||||||
| 		aabb.h serializer.h sfx.h | 		aabb.h serializer.h sfx.h gui_vscroll_bar.h | ||||||
| 
 | 
 | ||||||
| libgui_a_SOURCES = gui_button.cpp gui.cpp gui_fixed.cpp gui_screen.cpp gui_label.cpp gui_tooltip.cpp gui_toggle_button.cpp gui_radio_button.cpp \
 | libgui_a_SOURCES = gui_button.cpp gui.cpp gui_fixed.cpp gui_screen.cpp gui_label.cpp gui_tooltip.cpp gui_toggle_button.cpp gui_radio_button.cpp \
 | ||||||
| 									 gui_radio_group.cpp gui_image_button.cpp gui_image.cpp gui_image_radio_button.cpp gui_multi_state_image_button.cpp gui_widget.cpp \
 | 									 gui_radio_group.cpp gui_image_button.cpp gui_image.cpp gui_image_radio_button.cpp gui_multi_state_image_button.cpp gui_widget.cpp \
 | ||||||
| 									 gui_container.cpp | 									 gui_container.cpp gui_vscroll_bar.cpp | ||||||
| 
 | 
 | ||||||
| Lephisto3D_SOURCES	= main.cpp glfreetype.cpp body.cpp space.cpp ship.cpp player.cpp dynamic_body.cpp planet.cpp \
 | Lephisto3D_SOURCES	= main.cpp glfreetype.cpp body.cpp space.cpp ship.cpp player.cpp dynamic_body.cpp planet.cpp \
 | ||||||
| 											star.cpp frame.cpp ship_cpanel.cpp sector_view.cpp mtrand.cpp world_view.cpp system_view.cpp \
 | 											star.cpp frame.cpp ship_cpanel.cpp sector_view.cpp mtrand.cpp world_view.cpp system_view.cpp \
 | ||||||
|  | |||||||
							
								
								
									
										82
									
								
								src/gui_vscroll_bar.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								src/gui_vscroll_bar.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,82 @@ | |||||||
|  | #include "libs.h" | ||||||
|  | #include "gui.h" | ||||||
|  | 
 | ||||||
|  | #define SCROLLBAR_SIZE 12 | ||||||
|  | #define BORDER 2 | ||||||
|  | 
 | ||||||
|  | namespace Gui { | ||||||
|  | 
 | ||||||
|  | VScrollBar::VScrollBar(void) { | ||||||
|  |   m_isPressed = false; | ||||||
|  |   m_eventMask = EVENT_MOUSEDOWN; | ||||||
|  |   SetSize(SCROLLBAR_SIZE, SCROLLBAR_SIZE); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool VScrollBar::OnMouseDown(MouseButtonEvent* e) { | ||||||
|  |   float size[2]; | ||||||
|  |   GetSize[size]; | ||||||
|  |   if(e->button == 1) { | ||||||
|  |     m_isPRessed = true; | ||||||
|  |     m_adjustment->SetValue(e->y / (float)size[1]); | ||||||
|  |     _m_release = RawEvents::OnMouseUp.connect(sigc::mem_fun(this, &ScrollBar::OnRawMouseUp)); | ||||||
|  |     _m_motion = RawEvents::onMouseMotion.connect(sigc::mem_fun(this, &VScrollBar::OnRawMouseMotion)); | ||||||
|  |   } | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollBar::OnRawMouseUp(SDL_MouseButtonEvent* e) { | ||||||
|  |   if(e->button == 1) { | ||||||
|  |     m_isPressed = false; | ||||||
|  |     _m_released.disconnect(); | ||||||
|  |     _m_motion.disconnect(); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollBar::OnRawMouseMotion(SDL_MouseMotionEvent* e) { | ||||||
|  |   if(m_isPressed) { | ||||||
|  |     float pos[2]; | ||||||
|  |     GetAbsolutePosition(pos); | ||||||
|  |     float size[2]; | ||||||
|  |     GetSize[size]; | ||||||
|  |     m_adjustment->SetValue((e->y-pos[1]) / (float)size[1]); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollBar::Draw(void) { | ||||||
|  |   float size[2]; GetSize(size); | ||||||
|  |   glColor3f(1,1,0); | ||||||
|  |   glBegin(GL_QUADS); | ||||||
|  |     glColor3f(.6, .6, .6); | ||||||
|  |     glVertex2f(0, size[1]); | ||||||
|  |     glVertex2f(size[0], size[1]); | ||||||
|  |     glVertex2f(size[0], 0); | ||||||
|  |     glVertex2f(0, 0); | ||||||
|  | 
 | ||||||
|  |     glColor3fv(Color::bgShadow); | ||||||
|  |     glVertex2f(0, size[1]-BORDER); | ||||||
|  |     glVertex2f(size[0]-BORDER, size[1]-BORDER); | ||||||
|  |     glVertex2f(size[0]-BORDER, 0); | ||||||
|  |     glVertex2f(0, 0); | ||||||
|  | 
 | ||||||
|  |     glColor3fv(Color::bg); | ||||||
|  |     glVertex2f(BORDER, size[1]-BORDER); | ||||||
|  |     glVertex2f(size[0]-BORDER, size[1]-BORDER); | ||||||
|  |     glVertex2f(size[0]-BORDER, BORDER); | ||||||
|  |     glVertex2f(BORDER, BORDER); | ||||||
|  |   glEnd(); | ||||||
|  | 
 | ||||||
|  |   float pos = m_adjustment->GetValue(); | ||||||
|  |   glColor3f(1, 1, 1); | ||||||
|  |   glBegin(GL_LINES); | ||||||
|  |     glVertex2f(BORDER, BORDER+(size[1]-2*BORDER)*pos); | ||||||
|  |     glVertex2f(size[0]-BORDER, BORDER+(size[1]-2*BORDER)*pos); | ||||||
|  |   glEnd(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollBar::GetSizeRequested(float size[2]) { | ||||||
|  |   size[0] = SCROLLBAR_SIZE; | ||||||
|  |   /* Full Y size. */ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										27
									
								
								src/gui_vscroll_bar.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/gui_vscroll_bar.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "gui_widget.h" | ||||||
|  | 
 | ||||||
|  | namespace Gui { | ||||||
|  | 
 | ||||||
|  | class VScrollBar: public Widget { | ||||||
|  | public: | ||||||
|  |   VScrollBar(void); | ||||||
|  |   virtual ~VScrollBar(void) {} | ||||||
|  |   virtual bool OnMOuseDown(MouseButtonEvent* e); | ||||||
|  |   virtual bool GetSizeRequested(float size[2]); | ||||||
|  |   virtual void Draw(void); | ||||||
|  |   void SetAdjustment(Adjustment* adj) { | ||||||
|  |     m_adjustment = adj; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |   void OnRawMouseUp(SDL_MousebuttonEvent* e); | ||||||
|  |   void OnRawMOuseMotion(SDL_MouseMotionEvent* e); | ||||||
|  |   bool m_isPressed; | ||||||
|  |   sigc::connection m_release, _m_motion; | ||||||
|  |   Adjustment* m_sdjustment; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										59
									
								
								src/gui_vscroll_portal.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/gui_vscroll_portal.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | |||||||
|  | #include "libs.h" | ||||||
|  | #include "gui.h" | ||||||
|  | 
 | ||||||
|  | namespace Gui { | ||||||
|  | 
 | ||||||
|  | VScrollPortal::VScrollPortal(float w, float h): Container() { | ||||||
|  |   SetSize(w, h); | ||||||
|  |   m_child = 0; | ||||||
|  |   m_eventMask = EVENT_ALL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollPortal::GetSizeRequested(float size[2]) { | ||||||
|  |   GetSize(size); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void VScrollPortal::OnChildResizeRequest(Widget* child) { | ||||||
|  |   float size[2], rsize[2]; | ||||||
|  |   GetSize(size); | ||||||
|  |   rsize[0] = size[0]; | ||||||
|  |   rsize[1] = FLT_MAX; | ||||||
|  |   child->GetSizeRequested(rsize); | ||||||
|  |   rsize[0] = MIN(rsize[0], size[0]); | ||||||
|  |   m_childSizeY = rsize[1]; | ||||||
|  |   child->SEtSize(rsize[0], rsize[1]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollPortal::Add(Widget* child) { | ||||||
|  |   assert(m_child == 0); | ||||||
|  |   AppendChild(child, 0, 0); | ||||||
|  |   OnChildResizeRequest(child); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VScrollPortal::Remove(Widget* child) { | ||||||
|  |   assert(m_child= child); | ||||||
|  |   Container::RemoveChild(child); | ||||||
|  |   m_child = 0; | ||||||
|  |   m_childSizeY = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void VSrollPortal::Draw(void) { | ||||||
|  |   float size[2]; | ||||||
|  |   GetSize(size); | ||||||
|  |   SetClipping(size[0], size[1]); | ||||||
|  | 
 | ||||||
|  |   m_scrollY = vscrollAdjust.GetValue(); | ||||||
|  | 
 | ||||||
|  |   float toScroll = m_childSizeY - size[1]; | ||||||
|  |   if(toScroll < 0) toScroll = 0; | ||||||
|  | 
 | ||||||
|  |   glPushMatrix(); | ||||||
|  |   glTranslatef(0, -m_scrollY*toScroll, 0); | ||||||
|  |   Container::Draw(); | ||||||
|  |   glPopMatrix(); | ||||||
|  |   EndClipping(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										22
									
								
								src/gui_vscroll_portal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/gui_vscroll_portal.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | #pragma once | ||||||
|  | #include "gui_container.h" | ||||||
|  | 
 | ||||||
|  | namespace Gui { | ||||||
|  | class VScrollPortal: public Container { | ||||||
|  | public: | ||||||
|  |   VScrollPortal(float w, float h); | ||||||
|  |   void Add(Widget* child); | ||||||
|  |   void Remove(Widget* child); | ||||||
|  |   virtual void Draw(void); | ||||||
|  |   virtual void GetSizeRequested(float size[2]); | ||||||
|  |   virtual void OnChildResizeRequest(Widget*); | ||||||
|  |   void SetBgColor(float rgb[3]); | ||||||
|  |   void SetBgColor(float r, float g, float b); | ||||||
|  |   Adjustment vscrollAdjust; | ||||||
|  | private: | ||||||
|  |   void OnScroll(float); | ||||||
|  |   float m_scrollY, m_childSizeY; | ||||||
|  |   Widget* m_cild; | ||||||
|  | }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allanis
						Allanis