Got window setup & basic text to window space debug.
This commit is contained in:
		
							
								
								
									
										4
									
								
								code/alias_raylib.odin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								code/alias_raylib.odin
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| package sectr | ||||
|  | ||||
| import rl "vendor:raylib" | ||||
|  | ||||
							
								
								
									
										8
									
								
								code/colors.odin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								code/colors.odin
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package sectr | ||||
|  | ||||
| import rl "vendor:raylib" | ||||
|  | ||||
| Color_BG           :: rl.Color {  41,  41,  45, 255 } | ||||
| Color_BG_TextBox   :: rl.Color {  32,  32,  32, 255 } | ||||
| Color_Frame_Hover  :: rl.Color { 122, 122, 125, 255 } | ||||
| Color_Frame_Select :: rl.Color { 188, 188, 188, 255 } | ||||
							
								
								
									
										51
									
								
								code/engine_loop.odin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								code/engine_loop.odin
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| package sectr | ||||
|  | ||||
| import "core:fmt" | ||||
|  | ||||
| import rl "vendor:raylib" | ||||
|  | ||||
| draw_text_y : f32 = 50 | ||||
|  | ||||
| run_cycle :: proc( running : ^b32 ) | ||||
| { | ||||
| 	for ; running^ ; | ||||
| 	{ | ||||
| 		if rl.WindowShouldClose() { | ||||
| 			running^ = false; | ||||
| 		} | ||||
|  | ||||
| 		// Logic Update | ||||
| 		{ | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		// Rendering | ||||
| 		{ | ||||
| 			rl.BeginDrawing() | ||||
| 			rl.ClearBackground( Color_BG ) | ||||
| 			defer { | ||||
| 				rl.DrawFPS( 0, 0 ) | ||||
| 				rl.EndDrawing() | ||||
| 				// Note(Ed) : Polls input as well. | ||||
| 			} | ||||
|  | ||||
| 			draw_text :: proc( format : string, args : ..any ) | ||||
| 			{ | ||||
| 			    @static draw_text_scratch : [65536]u8 | ||||
| 				if ( draw_text_y > 500 ) { | ||||
| 					draw_text_y = 50 | ||||
| 				} | ||||
| 				content := fmt.bprintf( draw_text_scratch[:], format, ..args ) | ||||
| 				debug_text( content, 25, draw_text_y ) | ||||
| 				draw_text_y += 16 | ||||
| 			} | ||||
|  | ||||
| 			draw_text( "Monitor      : %v", rl.GetMonitorName(0) ) | ||||
| 			draw_text( "Screen Width : %v", rl.GetScreenWidth() ) | ||||
| 			draw_text( "Screen Height: %v", rl.GetScreenHeight() ) | ||||
|  | ||||
|  | ||||
| 			draw_text_y = 50 | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										140
									
								
								code/launch.odin
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								code/launch.odin
									
									
									
									
									
								
							| @@ -1,49 +1,16 @@ | ||||
| package sectr | ||||
|  | ||||
| import      "core:io" | ||||
| import      "core:fmt" | ||||
| import      "core:mem" | ||||
| import      "core:mem/virtual" | ||||
| import      "core:strings" | ||||
| import      "core:unicode/utf8" | ||||
| import rl   "vendor:raylib" | ||||
| import "core:strings" | ||||
|  | ||||
| kilobytes :: proc ( kb : $integer_type ) -> integer_type { | ||||
| 	return kb * 1024 | ||||
| } | ||||
| megabytes :: proc ( kb : $integer_type ) -> integer_type { | ||||
| 	return kb * 1024 * 1024 | ||||
| } | ||||
|  | ||||
| Frame :: struct { | ||||
| 	bounds : rl.Rectangle | ||||
| 	// collision_bounds : rl.Rectangle, // Interaction space | ||||
| 	// nav_bounds       : rl.Rectangle  // Navigation space | ||||
| } | ||||
|  | ||||
| TextLine :: [dynamic]u8 | ||||
| TextBox  :: struct { | ||||
| 	using frame      : Frame, | ||||
| 		  text       : strings.Builder, | ||||
|  | ||||
| 		  // TODO(Ed) : Make use of the lines view, this will tell use when a line begins or ends | ||||
| 		  lines      : [dynamic]TextLine, | ||||
| 		  cursor_pos : i32 | ||||
| } | ||||
|  | ||||
| // TextBlob :: struct { | ||||
| // 	buffer : string | ||||
| // } | ||||
|  | ||||
| Null_Rune : rune = 0 | ||||
|  | ||||
| Color_BG           :: rl.Color {  41,  41,  45, 255 } | ||||
| Color_BG_TextBox   :: rl.Color {  32,  32,  32, 255 } | ||||
| Color_Frame_Hover  :: rl.Color { 122, 122, 125, 255 } | ||||
| Color_Frame_Select :: rl.Color { 188, 188, 188, 255 } | ||||
| import rl "vendor:raylib" | ||||
|  | ||||
| Path_Assets :: "../assets/" | ||||
|  | ||||
|  | ||||
| WindowState :: struct { | ||||
|  | ||||
| } | ||||
|  | ||||
| main :: proc() | ||||
| { | ||||
| 	// Rough setup of window with rl stuff | ||||
| @@ -59,96 +26,17 @@ main :: proc() | ||||
| 	monitor_refresh_rate := rl.GetMonitorRefreshRate( monitor_id ) | ||||
| 	rl.SetTargetFPS( monitor_refresh_rate ) | ||||
|  | ||||
| 	font_rec_mono_semicasual_reg     :  rl.Font; { | ||||
| 	// Basic Font Setup | ||||
| 	{ | ||||
| 		path_rec_mono_semicasual_reg := strings.concatenate( { Path_Assets, "RecMonoSemicasual-Regular-1.084.ttf" } ) | ||||
| 		cstr                         := strings.clone_to_cstring(path_rec_mono_semicasual_reg) | ||||
| 		font_rec_mono_semicasual_reg  = rl.LoadFontEx( cstr, 24, nil, 0 ) | ||||
| 		delete( cstr ) | ||||
|  | ||||
| 		rl.GuiSetFont( font_rec_mono_semicasual_reg ) // TODO(Ed) : Does this do anything? | ||||
| 		default_font = font_rec_mono_semicasual_reg | ||||
| 	} | ||||
|  | ||||
| 	hovered_frame : ^Frame = nil | ||||
| 	focused_frame : ^Frame = nil | ||||
| 	text_box      : TextBox | ||||
| 	{ | ||||
| 		builder, err := strings.builder_make_len_cap( 0, megabytes( cast(int) 1 ) / 4 ) | ||||
| 		if err != mem.Allocator_Error.None { | ||||
| 			fmt.println( "Failed to allocate text arena!" ) | ||||
| 			return | ||||
| 		} | ||||
| 		text_box.text = builder | ||||
| 	} | ||||
|  | ||||
| 	for ; ! rl.WindowShouldClose() ; | ||||
| 	{ | ||||
| 		mouse_pos := rl.GetMousePosition() | ||||
|  | ||||
| 		// Logic Update | ||||
| 		{ | ||||
| 			rect := &text_box.bounds | ||||
| 			rect.width  = 900 | ||||
| 			rect.height = 400 | ||||
| 			rect.x      = cast(f32) (screen_width  / 2) - rect.width / 2.0 | ||||
| 			rect.y      = cast(f32) (screen_height / 2) - rect.height | ||||
|  | ||||
| 			if rl.CheckCollisionPointRec( mouse_pos, rect^ ) { | ||||
| 				hovered_frame = & text_box | ||||
| 			} | ||||
| 			else { | ||||
| 				hovered_frame = nil | ||||
| 			} | ||||
|  | ||||
| 			if rl.IsMouseButtonPressed( rl.MouseButton.LEFT ) | ||||
| 			{ | ||||
| 				if hovered_frame != nil { | ||||
| 					focused_frame = hovered_frame | ||||
| 				} | ||||
| 				else { | ||||
| 					focused_frame = nil | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if focused_frame != nil { | ||||
| 				for code_point := rl.GetCharPressed(); | ||||
| 					code_point != Null_Rune; | ||||
| 				{ | ||||
| 					strings.write_rune( & text_box.text, code_point ); | ||||
| 					code_point = rl.GetCharPressed() | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// Rendering | ||||
| 		{ | ||||
| 			rl.BeginDrawing() | ||||
| 			rl.ClearBackground( Color_BG ) | ||||
|  | ||||
| 			// Text Box | ||||
| 			{ | ||||
| 				rl.DrawRectangleRec( text_box.bounds, Color_BG_TextBox ) | ||||
|  | ||||
| 				if focused_frame != nil { | ||||
| 					rl.DrawRectangleLinesEx( focused_frame.bounds, 2, Color_Frame_Select ) | ||||
| 				} | ||||
| 				else if hovered_frame != nil { | ||||
| 					rl.DrawRectangleLinesEx( hovered_frame.bounds, 2, Color_Frame_Hover ) | ||||
| 				} | ||||
|  | ||||
| 				txt_str := strings.to_string( text_box.text ) | ||||
| 				runes := utf8.string_to_runes(txt_str) | ||||
|  | ||||
| 				rl.GuiSetFont( font_rec_mono_semicasual_reg ) | ||||
| 				if len(txt_str) > 0 { | ||||
| 					rl.DrawTextCodepoints( font_rec_mono_semicasual_reg, raw_data( runes ), | ||||
| 						cast(i32) len(runes), | ||||
| 						rl.Vector2 { text_box.bounds.x + 10, text_box.bounds.y + 10 }, | ||||
| 						24.0, // font size | ||||
| 						0.0,  // font spacing | ||||
| 						rl.WHITE | ||||
| 					) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			rl.EndDrawing() | ||||
| 		} | ||||
| 	} | ||||
| 	running : b32 = true | ||||
| 	run_cycle( & running ) | ||||
| } | ||||
|   | ||||
							
								
								
									
										8
									
								
								code/memory.odin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								code/memory.odin
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package sectr | ||||
|  | ||||
| kilobytes :: proc ( kb : $integer_type ) -> integer_type { | ||||
| 	return kb * 1024 | ||||
| } | ||||
| megabytes :: proc ( kb : $integer_type ) -> integer_type { | ||||
| 	return kb * 1024 * 1024 | ||||
| } | ||||
| @@ -1,3 +0,0 @@ | ||||
| package sectr | ||||
|  | ||||
|  | ||||
							
								
								
									
										23
									
								
								code/text.odin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								code/text.odin
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| package sectr | ||||
|  | ||||
| import "core:unicode/utf8" | ||||
|  | ||||
| import rl "vendor:raylib" | ||||
|  | ||||
| font_rec_mono_semicasual_reg : rl.Font; | ||||
| default_font                 : rl.Font | ||||
|  | ||||
| debug_text :: proc( content : string, x, y : f32, size : f32 = 16.0, color : rl.Color = rl.WHITE, font : rl.Font = default_font ) | ||||
| { | ||||
| 	if len( content ) == 0 { | ||||
| 		return | ||||
| 	} | ||||
| 	runes := utf8.string_to_runes( content ) | ||||
|  | ||||
| 	rl.DrawTextCodepoints( font, | ||||
| 		raw_data(runes), cast(i32) len(runes), | ||||
| 		position = rl.Vector2 { x, y }, | ||||
| 		fontSize = size, | ||||
| 		spacing  = 0.0, | ||||
| 		tint     = color ); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user