SubDir TOP haiku-on-genode kits interface ;

SetupHeadersHoG ;
UsePrivateHeaders app interface shared print tracker ;  # find AppMisc.h, ColorConversion.h, AutoDeleter.h, pr_server.h
	# also find AutoLock.h ... (only in layer 7+, for Shelf.cpp) -- Shelf.cpp really should be fixed to rely on Autodeleter-styles classes in lower kits, rather than on a *Tracker* class in upper libtracker.so
SubDirHdrs $(TOP)/haiku-on-genode/headers/private ;  # find binary_compatibility/Interface.h
SubDirHdrs $(TOP)/haiku-on-genode/sys-icon ;  # find IconUtils.h for BAlert etc
SubDirHdrs $(TOP)/haiku-on-genode/kits/app-private ;  # find ServerReadOnlyMemory.h
SubDirHdrs $(TOP)/haiku-on-genode/kits/interface-private ;  # find ViewLayoutItem.h
SubDirHdrs $(TOP)/haiku-on-genode/kits/locale-private ;  # find SystemCatalog.h

SubDirC++Flags
	-Wno-missing-field-initializers
	;

SEARCH_SOURCE += $(SUBDIR)/layouter ;
SEARCH_SOURCE += $(SUBDIR)/textview_support ;


if $(GE_DECORATIONS_AND_WM) <= 0
{
	# DESCRIPTION:
	# If that switch is undefined (or set to 0) the below will set a #define
	# so that we won't use any 'server side' decorations, and instead
	# enable our own client-side window-manager and decorations painting.
	# On the other hand,
	# if you're building haiku.lib.so for SculptOS, you'll want to use
	# SculptOS/Genode-side decorations and WM, by setting var GE_DECORATIONS_AND_WM=1 .
	#
	# REBUILDING on changes:
	# If the environ variable "GE_DECORATIONS_AND_WM" is set initially and never changed again,
	# no problem. However, if you ever change its value back and forth after starting building,
	# either do a full rebuild ("jam -a .....") or trigger a rebuild of just the concerned files
	# by 'touching' the relevant header ("touch haiku-on-genode/kits/interface/_CanvasGenode.h" ).
	#
	SubDirC++Flags -DHAS_MICRO_WINDOW_MANAGER=1 ;
}
# else:
# Shell var "GE_DECORATIONS_AND_WM" is set, so do not activate our custom decorator, do not #define HAS_MICRO_WINDOW_MANAGER to 'true'
#SubDirC++Flags -DHAS_MICRO_WINDOW_MANAGER=0 ;


if $(LayerLevel) >= 5
{
	HaikuKit interface_kit.a :
		# HoG-private:
		_CanvasGenode.cpp
		_GeInput.cpp
		_WindowNitpickerPriv.cpp
		
		# original haiku jamfile follows:
		AbstractLayoutItem.cpp
		Alignment.cpp
		Bitmap.cpp
ColorConversion.cpp #++ move to interface-private/
		Control.cpp
		ControlLook.cpp
		Font.cpp
		Gradient.cpp
		GradientLinear.cpp
		GraphicsDefs.cpp
		HaikuControlLook.cpp
		InterfaceDefs.cpp
		Layout.cpp
		LayoutContext.cpp
		LayoutItem.cpp
		LayoutUtils.cpp
		Menu.cpp
		MenuBar.cpp
		MenuField.cpp
		MenuItem.cpp
		Point.cpp
		PopUpMenu.cpp
		Rect.cpp
		Region.cpp
		RegionSupport.cpp
		Screen.cpp
		ScrollBar.cpp
		SeparatorItem.cpp
		Shape.cpp
		TextView.cpp
		View.cpp
		Window.cpp
		
		# BTextView support
		InlineInput.cpp
		LineBuffer.cpp
		StyleBuffer.cpp
		TextGapBuffer.cpp
		UndoBuffer.cpp
		WidthBuffer.cpp
		;
	
	#///later: get rid of gnu++20 hacks once I update my GCC toolchain:
	ObjectC++Flags _CanvasGenode.cpp	: "-std=gnu++20" ;
	ObjectC++Flags _GeInput.cpp			: "-std=gnu++20" ;
	ObjectC++Flags _WindowNitpickerPriv.cpp : "-std=gnu++20" ;
	ObjectC++Flags Screen.cpp			: "-std=gnu++20" ;
	ObjectC++Flags Font.cpp				: "-std=gnu++20" ;
	ObjectC++Flags View.cpp				: "-std=gnu++20" ;
}

if $(LayerLevel) >= 6
{
	# BAlert is required by demos/Clock, which in turn requires BButton & layout:
	HaikuKit interface_kit.a :
		AbstractLayout.cpp
		AffineTransform.cpp
		Alert.cpp
		Box.cpp
		Button.cpp
		CardLayout.cpp
		CheckBox.cpp
		ColorControl.cpp
		Deskbar.cpp  # required by demos/Pulse
		Dragger.cpp
		GroupLayout.cpp
		GroupView.cpp  # required by pulse/mandel
		Polygon.cpp
		SpaceLayoutItem.cpp
		StringView.cpp  # required by pulse/mandel
		TabView.cpp  # required by demos/Pulse
		TwoDimensionalLayout.cpp
		
		# layouter
		CollapsingLayouter.cpp
		ComplexLayouter.cpp
		Layouter.cpp
		LayoutOptimizer.cpp
		OneElementLayouter.cpp
		RadioButton.cpp
		ScrollView.cpp
		SimpleLayouter.cpp
		TextControl.cpp
		;
}

if $(LayerLevel) >= 7
{
	HaikuKit interface_kit.a :
		GradientRadial.cpp
		OptionControl.cpp
		OptionPopUp.cpp
		Picture.cpp
		Slider.cpp
		SplitLayout.cpp
		SplitView.cpp
		StatusBar.cpp
		;
}

if $(LayerLevel) >= 8  #DONE***/// make that "8" ? Indeed these are not needed by AC, just by "extra layer" ArmyKnife... And for deskbar/tracker..
{
	HaikuKit interface_kit.a :
		# for AK (& AC ?):
		ListItem.cpp
		ListView.cpp
		StringItem.cpp
		
		# for Tracker/Deskbar:
		GridLayout.cpp
		GridLayoutBuilder.cpp
		GridView.cpp
		GroupLayoutBuilder.cpp
		SeparatorView.cpp
		Shelf.cpp
		;
}

if $(LayerLevel) >= 9
{
HaikuKit interface_kit.a :
	CardView.cpp
#	ChannelControl.cpp
#	ChannelSlider.cpp
#	ColorMenuItem.cpp
#	DecorInfo.cpp
#	GradientRadialFocus.cpp
#	GradientDiamond.cpp
#	GradientConic.cpp
#
#	Input.cpp
#
#
#
	OutlineListView.cpp
#	PictureButton.cpp
#	PictureDataWriter.cpp
#	PicturePlayer.cpp
#	PrintJob.cpp
#	PrivateScreen.cpp
#	Size.cpp
#	SplitLayoutBuilder.cpp
	#
#	TextInput.cpp
#	ToolTip.cpp
#	ToolTipManager.cpp
#
#	ViewPort.cpp
#

#	: <$(architecture)>libshared.a
	;
}


# find gems/chunky_texture.h :
ObjectHdrs _CanvasGenode.cpp :
	$(GenodeRepos)/gems/include
	;


#StaticLibrary [ MultiArchDefaultGristFiles libcolumnlistview.a ] :
#	ColumnListView.cpp
#	ColumnTypes.cpp
#	;

