diff --git a/Makefile.in b/Makefile.in
index 071a2e10d2..eb86c8899b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1883,7 +1883,8 @@ AUIDLL_OBJECTS = \
auidll_tabart.o \
auidll_xh_auinotbk.o \
auidll_xh_auitoolb.o \
- $(__AUI_GTK_SRC_OBJECTS_2)
+ $(__AUI_GTK_SRC_OBJECTS_2) \
+ $(__AUI_PLATFORM_SRC_OBJECTS_2)
AUIDLL_ODEP = $(_____pch_wxprec_auidll_wx_wxprec_h_gch___depname)
AUILIB_CXXFLAGS = $(__auilib_PCH_INC) -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -1900,7 +1901,8 @@ AUILIB_OBJECTS = \
auilib_tabart.o \
auilib_xh_auinotbk.o \
auilib_xh_auitoolb.o \
- $(__AUI_GTK_SRC_OBJECTS_3)
+ $(__AUI_GTK_SRC_OBJECTS_3) \
+ $(__AUI_PLATFORM_SRC_OBJECTS_3)
AUILIB_ODEP = $(_____pch_wxprec_auilib_wx_wxprec_h_gch___depname)
RIBBONDLL_CXXFLAGS = $(__ribbondll_PCH_INC) -D__WX$(TOOLKIT)__ \
$(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@@ -2226,6 +2228,7 @@ COND_TOOLKIT_MSW_WEBVIEW_HDR_PLATFORM = \
@COND_TOOLKIT_Qt@OPENGL_HDR_PLATFORM = wx/qt/glcanvas.h
@COND_TOOLKIT_X11@OPENGL_HDR_PLATFORM = wx/x11/glcanvas.h wx/unix/glx11.h
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@AUI_GTK_HDR = wx/aui/tabartgtk.h
+@COND_TOOLKIT_MSW@AUI_PLATFORM_HDR = wx/aui/tabartmsw.h
COND_TOOLKIT_OSX_CARBON_BASE_OSX_SRC = \
src/osx/core/mimetype.cpp \
src/osx/core/cfstring.cpp \
@@ -4247,6 +4250,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS = \
wx/xrc/xh_auinotbk.h \
wx/xrc/xh_auitoolb.h \
$(AUI_GTK_HDR) \
+ $(AUI_PLATFORM_HDR) \
wx/propgrid/advprops.h \
wx/propgrid/editors.h \
wx/propgrid/manager.h \
@@ -4554,6 +4558,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS = \
monodll_xh_auinotbk.o \
monodll_xh_auitoolb.o \
$(__AUI_GTK_SRC_OBJECTS) \
+ $(__AUI_PLATFORM_SRC_OBJECTS) \
monodll_advprops.o \
monodll_editors.o \
monodll_manager.o \
@@ -6505,6 +6510,7 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_1 = \
@COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS = monodll_webview_ie.o
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__AUI_GTK_SRC_OBJECTS \
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ = monodll_tabartgtk.o
+@COND_TOOLKIT_MSW@__AUI_PLATFORM_SRC_OBJECTS = monodll_tabartmsw.o
@COND_PLATFORM_UNIX_1_USE_PLUGINS_0@__PLUGIN_ADV_SRC_OBJECTS \
@COND_PLATFORM_UNIX_1_USE_PLUGINS_0@ = monodll_sound_sdl.o
@COND_PLATFORM_WIN32_1@__monodll___win32rc = monodll_version_rc.o
@@ -6716,6 +6722,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS_1 = \
monolib_xh_auinotbk.o \
monolib_xh_auitoolb.o \
$(__AUI_GTK_SRC_OBJECTS_1) \
+ $(__AUI_PLATFORM_SRC_OBJECTS_1) \
monolib_advprops.o \
monolib_editors.o \
monolib_manager.o \
@@ -8669,6 +8676,7 @@ COND_TOOLKIT_X11___ADVANCED_PLATFORM_SRC_OBJECTS_3 = \
@COND_TOOLKIT_MSW@__WEBVIEW_SRC_PLATFORM_OBJECTS_1 = monolib_webview_ie.o
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__AUI_GTK_SRC_OBJECTS_1 \
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ = monolib_tabartgtk.o
+@COND_TOOLKIT_MSW@__AUI_PLATFORM_SRC_OBJECTS_1 = monolib_tabartmsw.o
@COND_PLATFORM_UNIX_1_USE_PLUGINS_0@__PLUGIN_ADV_SRC_OBJECTS_1 \
@COND_PLATFORM_UNIX_1_USE_PLUGINS_0@ = monolib_sound_sdl.o
COND_MONOLITHIC_0_SHARED_1___basedll___depname = \
@@ -13565,6 +13573,7 @@ COND_USE_SOVERSOLARIS_1___auidll___so_symlinks_uninst_cmd = rm -f \
@COND_PLATFORM_WIN32_1@__auidll___win32rc = auidll_version_rc.o
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__AUI_GTK_SRC_OBJECTS_2 \
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ = auidll_tabartgtk.o
+@COND_TOOLKIT_MSW@__AUI_PLATFORM_SRC_OBJECTS_2 = auidll_tabartmsw.o
COND_MONOLITHIC_0_SHARED_0_USE_AUI_1___auilib___depname = \
$(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
@COND_MONOLITHIC_0_SHARED_0_USE_AUI_1@__auilib___depname = $(COND_MONOLITHIC_0_SHARED_0_USE_AUI_1___auilib___depname)
@@ -13579,6 +13588,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_AUI_1___auilib___depname = \
@COND_USE_PCH_1@ = ./.pch/wxprec_auilib/wx/wxprec.h.gch
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@__AUI_GTK_SRC_OBJECTS_3 \
@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2@ = auilib_tabartgtk.o
+@COND_TOOLKIT_MSW@__AUI_PLATFORM_SRC_OBJECTS_3 = auilib_tabartmsw.o
@COND_SHARED_1@____wxaui_namedll_DEP = $(__auidll___depname)
@COND_SHARED_0@____wxaui_namelib_DEP = $(__auilib___depname)
COND_MONOLITHIC_0_SHARED_1_USE_RIBBON_1___ribbondll___depname = \
@@ -18252,6 +18262,9 @@ monodll_xh_auitoolb.o: $(srcdir)/src/xrc/xh_auitoolb.cpp $(MONODLL_ODEP)
monodll_tabartgtk.o: $(srcdir)/src/aui/tabartgtk.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/aui/tabartgtk.cpp
+monodll_tabartmsw.o: $(srcdir)/src/aui/tabartmsw.cpp $(MONODLL_ODEP)
+ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/aui/tabartmsw.cpp
+
monodll_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
@@ -23766,6 +23779,9 @@ monolib_xh_auitoolb.o: $(srcdir)/src/xrc/xh_auitoolb.cpp $(MONOLIB_ODEP)
monolib_tabartgtk.o: $(srcdir)/src/aui/tabartgtk.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/aui/tabartgtk.cpp
+monolib_tabartmsw.o: $(srcdir)/src/aui/tabartmsw.cpp $(MONOLIB_ODEP)
+ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/aui/tabartmsw.cpp
+
monolib_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
@@ -38346,6 +38362,9 @@ auidll_xh_auitoolb.o: $(srcdir)/src/xrc/xh_auitoolb.cpp $(AUIDLL_ODEP)
auidll_tabartgtk.o: $(srcdir)/src/aui/tabartgtk.cpp $(AUIDLL_ODEP)
$(CXXC) -c -o $@ $(AUIDLL_CXXFLAGS) $(srcdir)/src/aui/tabartgtk.cpp
+auidll_tabartmsw.o: $(srcdir)/src/aui/tabartmsw.cpp $(AUIDLL_ODEP)
+ $(CXXC) -c -o $@ $(AUIDLL_CXXFLAGS) $(srcdir)/src/aui/tabartmsw.cpp
+
auilib_framemanager.o: $(srcdir)/src/aui/framemanager.cpp $(AUILIB_ODEP)
$(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/framemanager.cpp
@@ -38376,6 +38395,9 @@ auilib_xh_auitoolb.o: $(srcdir)/src/xrc/xh_auitoolb.cpp $(AUILIB_ODEP)
auilib_tabartgtk.o: $(srcdir)/src/aui/tabartgtk.cpp $(AUILIB_ODEP)
$(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/tabartgtk.cpp
+auilib_tabartmsw.o: $(srcdir)/src/aui/tabartmsw.cpp $(AUILIB_ODEP)
+ $(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/tabartmsw.cpp
+
ribbondll_version_rc.o: $(srcdir)/src/msw/version.rc $(RIBBONDLL_ODEP)
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_67) $(__DEBUG_DEFINE_p_66) $(__EXCEPTIONS_DEFINE_p_65) $(__RTTI_DEFINE_p_65) $(__THREAD_DEFINE_p_65) --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_ribbon$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_66) $(__INC_TIFF_p_66) $(__INC_JPEG_p_66) $(__INC_PNG_p_65) $(__INC_ZLIB_p_67) $(__INC_REGEX_p_65) $(__INC_EXPAT_p_65) --define WXUSINGDLL --define WXMAKINGDLL_RIBBON
diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl
index 1f6cb7479e..e21429e69b 100644
--- a/build/bakefiles/files.bkl
+++ b/build/bakefiles/files.bkl
@@ -3653,6 +3653,18 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/aui/tabartgtk.h
+
+ src/aui/tabartmsw.cpp
+
+
+ wx/aui/tabartmsw.h
+
+
+ $(AUI_MSW_SRC)
+
+
+ $(AUI_MSW_HDR)
+
src/aui/framemanager.cpp
src/aui/dockart.cpp
@@ -3667,6 +3679,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
$(AUI_CMN_SRC)
$(AUI_GTK_SRC)
+ $(AUI_PLATFORM_SRC)
wx/aui/framemanager.h
@@ -3683,6 +3696,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
$(AUI_CMN_HDR)
$(AUI_GTK_HDR)
+ $(AUI_PLATFORM_HDR)
diff --git a/build/files b/build/files
index af828a24a4..d0e40f2a17 100644
--- a/build/files
+++ b/build/files
@@ -3086,6 +3086,11 @@ AUI_CMN_HDR =
wx/xrc/xh_auinotbk.h
wx/xrc/xh_auitoolb.h
+AUI_MSW_HDR =
+ wx/aui/tabartmsw.h
+AUI_MSW_SRC =
+ src/aui/tabartmsw.cpp
+
# wxRibbon
RIBBON_SRC =
diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc
index 3bd0879673..c9b4aff18c 100644
--- a/build/msw/makefile.bcc
+++ b/build/msw/makefile.bcc
@@ -1354,7 +1354,8 @@ AUIDLL_OBJECTS = \
$(OBJS)\auidll_tabmdi.obj \
$(OBJS)\auidll_tabart.obj \
$(OBJS)\auidll_xh_auinotbk.obj \
- $(OBJS)\auidll_xh_auitoolb.obj
+ $(OBJS)\auidll_xh_auitoolb.obj \
+ $(OBJS)\auidll_tabartmsw.obj
AUILIB_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@@ -1373,7 +1374,8 @@ AUILIB_OBJECTS = \
$(OBJS)\auilib_tabmdi.obj \
$(OBJS)\auilib_tabart.obj \
$(OBJS)\auilib_xh_auinotbk.obj \
- $(OBJS)\auilib_xh_auitoolb.obj
+ $(OBJS)\auilib_xh_auitoolb.obj \
+ $(OBJS)\auilib_tabartmsw.obj
RIBBONDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@@ -1734,6 +1736,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_tabart.obj \
$(OBJS)\monodll_xh_auinotbk.obj \
$(OBJS)\monodll_xh_auitoolb.obj \
+ $(OBJS)\monodll_tabartmsw.obj \
$(OBJS)\monodll_advprops.obj \
$(OBJS)\monodll_editors.obj \
$(OBJS)\monodll_manager.obj \
@@ -2555,6 +2558,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_tabart.obj \
$(OBJS)\monolib_xh_auinotbk.obj \
$(OBJS)\monolib_xh_auitoolb.obj \
+ $(OBJS)\monolib_tabartmsw.obj \
$(OBJS)\monolib_advprops.obj \
$(OBJS)\monolib_editors.obj \
$(OBJS)\monolib_manager.obj \
@@ -7389,6 +7393,9 @@ $(OBJS)\monodll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monodll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\monodll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@@ -9896,6 +9903,9 @@ $(OBJS)\monolib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monolib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\monolib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@@ -16082,6 +16092,9 @@ $(OBJS)\auidll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auidll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\auidll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\auilib_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp
@@ -16112,6 +16125,9 @@ $(OBJS)\auilib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auilib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\auilib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\ribbondll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) -q -c -P -o$@ $(RIBBONDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc
index 513accb221..383bdf071d 100644
--- a/build/msw/makefile.gcc
+++ b/build/msw/makefile.gcc
@@ -1360,7 +1360,8 @@ AUIDLL_OBJECTS = \
$(OBJS)\auidll_tabmdi.o \
$(OBJS)\auidll_tabart.o \
$(OBJS)\auidll_xh_auinotbk.o \
- $(OBJS)\auidll_xh_auitoolb.o
+ $(OBJS)\auidll_xh_auitoolb.o \
+ $(OBJS)\auidll_tabartmsw.o
AUILIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) $(GCCFLAGS) \
-DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) \
$(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -1379,7 +1380,8 @@ AUILIB_OBJECTS = \
$(OBJS)\auilib_tabmdi.o \
$(OBJS)\auilib_tabart.o \
$(OBJS)\auilib_xh_auinotbk.o \
- $(OBJS)\auilib_xh_auitoolb.o
+ $(OBJS)\auilib_xh_auitoolb.o \
+ $(OBJS)\auilib_tabartmsw.o
RIBBONDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
$(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@@ -1752,6 +1754,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_tabart.o \
$(OBJS)\monodll_xh_auinotbk.o \
$(OBJS)\monodll_xh_auitoolb.o \
+ $(OBJS)\monodll_tabartmsw.o \
$(OBJS)\monodll_advprops.o \
$(OBJS)\monodll_editors.o \
$(OBJS)\monodll_manager.o \
@@ -2579,6 +2582,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_tabart.o \
$(OBJS)\monolib_xh_auinotbk.o \
$(OBJS)\monolib_xh_auitoolb.o \
+ $(OBJS)\monolib_tabartmsw.o \
$(OBJS)\monolib_advprops.o \
$(OBJS)\monolib_editors.o \
$(OBJS)\monolib_manager.o \
@@ -7564,6 +7568,9 @@ $(OBJS)\monodll_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\monodll_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\monodll_tabartmsw.o: ../../src/aui/tabartmsw.cpp
+ $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\monodll_advprops.o: ../../src/propgrid/advprops.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10071,6 +10078,9 @@ $(OBJS)\monolib_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\monolib_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\monolib_tabartmsw.o: ../../src/aui/tabartmsw.cpp
+ $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\monolib_advprops.o: ../../src/propgrid/advprops.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -16257,6 +16267,9 @@ $(OBJS)\auidll_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\auidll_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\auidll_tabartmsw.o: ../../src/aui/tabartmsw.cpp
+ $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\auilib_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
@@ -16287,6 +16300,9 @@ $(OBJS)\auilib_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\auilib_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\auilib_tabartmsw.o: ../../src/aui/tabartmsw.cpp
+ $(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\ribbondll_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(RIBBONDLL_CXXFLAGS) $(CPPDEPS) $<
diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc
index 75f9d71f29..a23c9e67dc 100644
--- a/build/msw/makefile.vc
+++ b/build/msw/makefile.vc
@@ -1498,7 +1498,8 @@ AUIDLL_OBJECTS = \
$(OBJS)\auidll_tabmdi.obj \
$(OBJS)\auidll_tabart.obj \
$(OBJS)\auidll_xh_auinotbk.obj \
- $(OBJS)\auidll_xh_auitoolb.obj
+ $(OBJS)\auidll_xh_auitoolb.obj \
+ $(OBJS)\auidll_tabartmsw.obj
AUIDLL_RESOURCES = \
$(OBJS)\auidll_version.res
AUILIB_CXXFLAGS = /M$(__RUNTIME_LIBS_472)$(__DEBUGRUNTIME) /DWIN32 \
@@ -1523,7 +1524,8 @@ AUILIB_OBJECTS = \
$(OBJS)\auilib_tabmdi.obj \
$(OBJS)\auilib_tabart.obj \
$(OBJS)\auilib_xh_auinotbk.obj \
- $(OBJS)\auilib_xh_auitoolb.obj
+ $(OBJS)\auilib_xh_auitoolb.obj \
+ $(OBJS)\auilib_tabartmsw.obj
RIBBONDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_488)$(__DEBUGRUNTIME) /DWIN32 \
$(__DEBUGINFO) \
/Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_ribbon$(WXCOMPILER)$(VENDORTAG).pdb \
@@ -2034,6 +2036,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_tabart.obj \
$(OBJS)\monodll_xh_auinotbk.obj \
$(OBJS)\monodll_xh_auitoolb.obj \
+ $(OBJS)\monodll_tabartmsw.obj \
$(OBJS)\monodll_advprops.obj \
$(OBJS)\monodll_editors.obj \
$(OBJS)\monodll_manager.obj \
@@ -2861,6 +2864,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_tabart.obj \
$(OBJS)\monolib_xh_auinotbk.obj \
$(OBJS)\monolib_xh_auitoolb.obj \
+ $(OBJS)\monolib_tabartmsw.obj \
$(OBJS)\monolib_advprops.obj \
$(OBJS)\monolib_editors.obj \
$(OBJS)\monolib_manager.obj \
@@ -8081,6 +8085,9 @@ $(OBJS)\monodll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monodll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\monodll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@@ -10588,6 +10595,9 @@ $(OBJS)\monolib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monolib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\monolib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@@ -16774,6 +16784,9 @@ $(OBJS)\auidll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auidll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\auidll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\auilib_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@@ -16804,6 +16817,9 @@ $(OBJS)\auilib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auilib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
+$(OBJS)\auilib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
+
$(OBJS)\ribbondll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(RIBBONDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
diff --git a/build/msw/wx_aui.vcxproj b/build/msw/wx_aui.vcxproj
index a719009f57..4ce0b31930 100644
--- a/build/msw/wx_aui.vcxproj
+++ b/build/msw/wx_aui.vcxproj
@@ -465,6 +465,7 @@
+
@@ -505,6 +506,7 @@
+
diff --git a/build/msw/wx_aui.vcxproj.filters b/build/msw/wx_aui.vcxproj.filters
index fb4f06b87a..f766dd0423 100644
--- a/build/msw/wx_aui.vcxproj.filters
+++ b/build/msw/wx_aui.vcxproj.filters
@@ -43,6 +43,9 @@
Source Files
+
+ Source Files
+
Source Files
@@ -80,6 +83,9 @@
Common Headers
+
+ Common Headers
+
Common Headers
diff --git a/build/msw/wx_vc7_aui.vcproj b/build/msw/wx_vc7_aui.vcproj
index 2b44650f7f..442b54de7d 100644
--- a/build/msw/wx_vc7_aui.vcproj
+++ b/build/msw/wx_vc7_aui.vcproj
@@ -434,6 +434,9 @@
+
+
@@ -466,6 +469,9 @@
+
+
diff --git a/build/msw/wx_vc7_core.vcproj b/build/msw/wx_vc7_core.vcproj
index c9e1dac5c3..c07148bb87 100644
--- a/build/msw/wx_vc7_core.vcproj
+++ b/build/msw/wx_vc7_core.vcproj
@@ -2594,6 +2594,9 @@
+
+
diff --git a/build/msw/wx_vc8_aui.vcproj b/build/msw/wx_vc8_aui.vcproj
index 9b8d55fa02..ecbebdccb6 100644
--- a/build/msw/wx_vc8_aui.vcproj
+++ b/build/msw/wx_vc8_aui.vcproj
@@ -1081,6 +1081,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
+
+
@@ -1123,6 +1127,10 @@
RelativePath="..\..\src\aui\tabart.cpp"
>
+
+
diff --git a/build/msw/wx_vc8_core.vcproj b/build/msw/wx_vc8_core.vcproj
index 113d6ba7e8..d4b862b4a1 100644
--- a/build/msw/wx_vc8_core.vcproj
+++ b/build/msw/wx_vc8_core.vcproj
@@ -3960,6 +3960,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
+
+
diff --git a/build/msw/wx_vc9_aui.vcproj b/build/msw/wx_vc9_aui.vcproj
index d75530bb43..5eaa4899e0 100644
--- a/build/msw/wx_vc9_aui.vcproj
+++ b/build/msw/wx_vc9_aui.vcproj
@@ -1077,6 +1077,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
+
+
@@ -1119,6 +1123,10 @@
RelativePath="..\..\src\aui\tabart.cpp"
>
+
+
diff --git a/build/msw/wx_vc9_core.vcproj b/build/msw/wx_vc9_core.vcproj
index 33f4ebe891..0ffe069944 100644
--- a/build/msw/wx_vc9_core.vcproj
+++ b/build/msw/wx_vc9_core.vcproj
@@ -3956,6 +3956,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
+
+
diff --git a/build/upmake b/build/upmake
index 86f1cc7b81..b199d6e231 100755
--- a/build/upmake
+++ b/build/upmake
@@ -1406,7 +1406,7 @@ if (!$only_bkl) {
# containing the files that should appear in them.
my %projects_vars = (
adv => [qw(ADVANCED_CMN ADVANCED_MSW ADVANCED_MSW_DESKTOP ADVANCED_MSW_NATIVE)],
- aui => [qw(AUI_CMN)],
+ aui => [qw(AUI_CMN AUI_MSW)],
base => [qw(BASE_CMN BASE_AND_GUI_CMN BASE_WIN32 BASE_AND_GUI_WIN32)],
core => [qw(BASE_AND_GUI_CMN BASE_AND_GUI_WIN32 MSW_LOWLEVEL MSW_DESKTOP_LOWLEVEL MSW MSW_DESKTOP GUI_CMN)],
gl => [qw(OPENGL_CMN OPENGL_MSW)],
diff --git a/docs/changes.txt b/docs/changes.txt
index e6381390db..dc315b10a5 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -140,6 +140,7 @@ wxGTK:
wxMSW:
- Make default wxSizer border DPI-aware.
+- Implement native tab art for wxAUI (Tobias Taschner).
- Improve wxMimeTypesManager open command detection (Eric Jensen).
- Make wxFILTER_INCLUDE_LIST in wxTextValidator actually usable.
- Fix handling crashes in wxEVT_PAINT event handlers.
diff --git a/include/wx/aui/tabart.h b/include/wx/aui/tabart.h
index 17e5992e8d..47efe359e3 100644
--- a/include/wx/aui/tabart.h
+++ b/include/wx/aui/tabart.h
@@ -312,6 +312,10 @@ protected:
#define wxHAS_NATIVE_TABART
#include "wx/aui/tabartgtk.h"
#define wxAuiDefaultTabArt wxAuiGtkTabArt
+ #elif defined(__WXMSW__)
+ #define wxHAS_NATIVE_TABART
+ #include "wx/aui/tabartmsw.h"
+ #define wxAuiDefaultTabArt wxAuiMSWTabArt
#endif
#endif // !__WXUNIVERSAL__
diff --git a/include/wx/aui/tabartmsw.h b/include/wx/aui/tabartmsw.h
new file mode 100644
index 0000000000..41a47b267f
--- /dev/null
+++ b/include/wx/aui/tabartmsw.h
@@ -0,0 +1,90 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/aui/tabartmsw.h
+// Purpose: wxAuiMSWTabArt declaration
+// Author: Tobias Taschner
+// Created: 2015-09-26
+// Copyright: (c) 2015 wxWidgets development team
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_AUI_TABARTMSW_H_
+#define _WX_AUI_TABARTMSW_H_
+
+class WXDLLIMPEXP_AUI wxAuiMSWTabArt : public wxAuiGenericTabArt
+{
+
+public:
+
+ wxAuiMSWTabArt();
+ virtual ~wxAuiMSWTabArt();
+
+ wxAuiTabArt* Clone() wxOVERRIDE;
+ void SetSizingInfo(const wxSize& tabCtrlSize,
+ size_t tabCount) wxOVERRIDE;
+
+ void DrawBorder(
+ wxDC& dc,
+ wxWindow* wnd,
+ const wxRect& rect) wxOVERRIDE;
+
+ void DrawBackground(
+ wxDC& dc,
+ wxWindow* wnd,
+ const wxRect& rect) wxOVERRIDE;
+
+ void DrawTab(wxDC& dc,
+ wxWindow* wnd,
+ const wxAuiNotebookPage& pane,
+ const wxRect& inRect,
+ int closeButtonState,
+ wxRect* outTabRect,
+ wxRect* outButtonRect,
+ int* xExtent) wxOVERRIDE;
+
+ void DrawButton(
+ wxDC& dc,
+ wxWindow* wnd,
+ const wxRect& inRect,
+ int bitmapId,
+ int buttonState,
+ int orientation,
+ wxRect* outRect) wxOVERRIDE;
+
+ int GetIndentSize() wxOVERRIDE;
+
+ int GetBorderWidth(
+ wxWindow* wnd) wxOVERRIDE;
+
+ int GetAdditionalBorderSpace(
+ wxWindow* wnd) wxOVERRIDE;
+
+ wxSize GetTabSize(
+ wxDC& dc,
+ wxWindow* wnd,
+ const wxString& caption,
+ const wxBitmap& bitmap,
+ bool active,
+ int closeButtonState,
+ int* xExtent) wxOVERRIDE;
+
+ int ShowDropDown(
+ wxWindow* wnd,
+ const wxAuiNotebookPageArray& items,
+ int activeIdx) wxOVERRIDE;
+
+ int GetBestTabCtrlSize(wxWindow* wnd,
+ const wxAuiNotebookPageArray& pages,
+ const wxSize& requiredBmpSize) wxOVERRIDE;
+
+private:
+ bool m_themed;
+ wxSize m_closeBtnSize;
+ wxSize m_tabSize;
+ int m_maxTabHeight;
+
+ void InitSizes(wxWindow* wnd, wxDC& dc);
+
+ bool IsThemed() const;
+};
+
+#endif // _WX_AUI_TABARTMSW_H_
diff --git a/src/aui/tabartmsw.cpp b/src/aui/tabartmsw.cpp
new file mode 100644
index 0000000000..e83a365145
--- /dev/null
+++ b/src/aui/tabartmsw.cpp
@@ -0,0 +1,497 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/aui/tabartmsw.h
+// Purpose: wxAuiMSWTabArt declaration
+// Author: Tobias Taschner
+// Created: 2015-09-26
+// Copyright: (c) 2015 wxWidgets development team
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#include "wx/aui/tabart.h"
+#include "wx/aui/auibook.h"
+#include "wx/msw/uxtheme.h"
+#include "wx/msw/private.h"
+#include "wx/renderer.h"
+
+#if wxUSE_AUI
+
+#ifndef CP_DROPDOWNBUTTON
+
+ #define TABP_TABITEM 1
+ #define TABP_TABITEMLEFTEDGE 2
+ #define TABP_TABITEMRIGHTEDGE 3
+ #define TABP_TABITEMBOTHEDGE 4
+ #define TABP_TOPTABITEM 5
+ #define TABP_TOPTABITEMLEFTEDGE 6
+ #define TABP_TOPTABITEMRIGHTEDGE 7
+ #define TABP_TOPTABITEMBOTHEDGE 8
+ #define TABP_PANE 9
+ #define TABP_BODY 10
+ #define TABP_AEROWIZARDBODY 11
+
+ #define TIS_NORMAL 1
+ #define TIS_HOT 2
+ #define TIS_SELECTED 3
+ #define TIS_DISABLED 4
+ #define TIS_FOCUSED 5
+
+ #define TTP_CLOSE 5
+
+ #define TTCS_NORMAL 1
+ #define TTCS_HOT 2
+ #define TTCS_PRESSED 3
+
+ #define SPNP_UPHORZ 3
+ #define SPNP_DOWNHORZ 4
+
+ #define CP_DROPDOWNBUTTON1 1
+
+ #define WP_CLOSEBUTTON 18
+#endif
+
+wxAuiMSWTabArt::wxAuiMSWTabArt()
+{
+ m_closeBtnSize = wxDefaultSize;
+ m_maxTabHeight = 0;
+
+ wxUxThemeEngine* te = wxUxThemeEngine::GetIfActive();
+ if ( te && te->IsAppThemed() )
+ {
+ m_themed = true;
+ }
+ else
+ m_themed = false;
+}
+
+wxAuiMSWTabArt::~wxAuiMSWTabArt()
+{
+}
+
+wxAuiTabArt* wxAuiMSWTabArt::Clone()
+{
+ return new wxAuiMSWTabArt(*this);
+}
+
+void wxAuiMSWTabArt::SetSizingInfo(const wxSize& tab_ctrl_size,
+ size_t tab_count)
+{
+ wxAuiGenericTabArt::SetSizingInfo(tab_ctrl_size, tab_count);
+}
+
+
+void wxAuiMSWTabArt::DrawBorder(wxDC& dc, wxWindow* wnd, const wxRect& rect)
+{
+ if ( !IsThemed() )
+ {
+ wxAuiGenericTabArt::DrawBorder(dc, wnd, rect);
+ return;
+ }
+
+ wxRect drawRect(rect);
+
+ drawRect.y += m_maxTabHeight + wnd->FromDIP(1);
+ drawRect.height -= m_maxTabHeight;
+
+ // Mask border not covered by native theme
+ wxRect topDrawRect(rect);
+ topDrawRect.height = drawRect.height;
+ dc.SetPen(wxPen(wnd->GetBackgroundColour(), GetBorderWidth(wnd)));
+ dc.DrawRectangle(topDrawRect);
+
+ RECT r;
+ wxCopyRectToRECT(drawRect, r);
+
+ wxUxThemeHandle hTheme(wnd, L"TAB");
+
+ wxUxThemeEngine::Get()->DrawThemeBackground(
+ hTheme,
+ GetHdcOf(dc.GetTempHDC()),
+ TABP_PANE,
+ 0,
+ &r,
+ NULL);
+}
+
+void wxAuiMSWTabArt::DrawBackground(wxDC& dc,
+ wxWindow* wnd,
+ const wxRect& rect)
+{
+ if ( !IsThemed() )
+ {
+ wxAuiGenericTabArt::DrawBackground(dc, wnd, rect);
+ return;
+ }
+
+ int borderHeight = 2;
+
+ wxRect drawRect = rect;
+ drawRect.height -= borderHeight;
+
+ // Draw background
+ dc.SetBrush(wxBrush(wnd->GetBackgroundColour()));
+ dc.SetPen(*wxTRANSPARENT_PEN);
+ dc.DrawRectangle(drawRect);
+
+ // Draw top border
+ drawRect.y = drawRect.height;
+ drawRect.height = borderHeight + 2;
+
+ drawRect.Inflate(1, 0);
+
+ RECT r;
+ wxCopyRectToRECT(drawRect, r);
+
+ wxUxThemeHandle hTheme(wnd, L"TAB");
+
+ wxUxThemeEngine::Get()->DrawThemeBackground(
+ hTheme,
+ GetHdcOf(dc.GetTempHDC()),
+ TABP_PANE,
+ 0,
+ &r,
+ NULL);
+}
+
+void wxAuiMSWTabArt::DrawTab(wxDC& dc,
+ wxWindow* wnd,
+ const wxAuiNotebookPage& page,
+ const wxRect& in_rect,
+ int close_button_state,
+ wxRect* out_tab_rect,
+ wxRect* out_button_rect,
+ int* x_extent)
+{
+ if ( !IsThemed() )
+ {
+ wxAuiGenericTabArt::DrawTab(dc, wnd, page, in_rect, close_button_state, out_tab_rect, out_button_rect, x_extent);
+ return;
+ }
+
+ if ( !m_closeBtnSize.IsFullySpecified() )
+ InitSizes(wnd, dc);
+
+ // figure out the size of the tab
+ wxSize tabSize = GetTabSize(dc,
+ wnd,
+ page.caption,
+ page.bitmap,
+ page.active,
+ close_button_state,
+ x_extent);
+
+ wxCoord tabHeight = tabSize.y;
+ wxCoord tabWidth = tabSize.x;
+ wxCoord tabX = in_rect.x;
+ wxCoord tabY = 0;
+
+ if (!page.active)
+ {
+ tabY += wnd->FromDIP(2);
+ tabHeight -= wnd->FromDIP(2);
+ }
+ else
+ {
+ tabX -= wnd->FromDIP(2);
+ tabWidth += wnd->FromDIP(4);
+ tabHeight += 2;
+ }
+
+ int clipWidth = tabWidth;
+ if ( tabX + clipWidth > in_rect.x + in_rect.width )
+ clipWidth = (in_rect.x + in_rect.width) - tabX;
+ dc.SetClippingRegion(tabX - wnd->FromDIP(2), tabY, clipWidth + wnd->FromDIP(4), tabHeight);
+
+
+ // draw tab
+ wxRect tabRect(tabX, tabY, tabWidth, tabHeight);
+
+ int tabState;
+ if ( page.active )
+ tabState = TIS_SELECTED;
+ else if ( page.hover )
+ tabState = TIS_HOT;
+ else
+ tabState = TIS_NORMAL;
+
+ wxUxThemeEngine* te = wxUxThemeEngine::Get();
+
+ wxUxThemeHandle hTabTheme(wnd, L"Tab");
+ RECT tabR;
+ wxCopyRectToRECT(tabRect, tabR);
+ te->DrawThemeBackground(hTabTheme, GetHdcOf(dc.GetTempHDC()), TABP_TABITEM,
+ tabState,
+ &tabR, NULL);
+
+ wxRect textRect = tabRect;
+ if ( !page.active )
+ textRect.Offset(0, wnd->FromDIP(1));
+ if ( close_button_state != wxAUI_BUTTON_STATE_HIDDEN )
+ textRect.width -= m_closeBtnSize.x + wnd->FromDIP(3);
+
+ dc.SetFont(wnd->GetFont());
+ dc.DrawLabel(page.caption, page.bitmap, textRect, wxALIGN_CENTRE);
+
+ // draw focus rectangle
+ if ( page.active && (wnd->FindFocus() == wnd) )
+ {
+ wxRect focusRect = tabRect;
+ focusRect.Deflate(wnd->FromDIP(2));
+
+ wxRendererNative::Get().DrawFocusRect(wnd, dc, focusRect, 0);
+ }
+
+ // draw close button
+ if ( close_button_state != wxAUI_BUTTON_STATE_HIDDEN )
+ {
+ wxUxThemeHandle hToolTipTheme(wnd, L"TOOLTIP");
+
+ int btnState;
+ if ( close_button_state == wxAUI_BUTTON_STATE_HOVER )
+ btnState = TTCS_HOT;
+ else if ( close_button_state == wxAUI_BUTTON_STATE_PRESSED )
+ btnState = TTCS_PRESSED;
+ else
+ btnState = TTCS_NORMAL;
+
+ int offsetY = tabY;
+ if ( wxGetWinVersion() < wxWinVersion_Vista )
+ offsetY++; // WinXP theme needs a little more padding
+
+ wxRect rect(tabX + tabWidth - m_closeBtnSize.x - wnd->FromDIP(4),
+ offsetY + (tabHeight / 2) - (m_closeBtnSize.y / 2),
+ m_closeBtnSize.x,
+ m_closeBtnSize.y);
+
+ RECT btnR;
+ wxCopyRectToRECT(rect, btnR);
+ te->DrawThemeBackground(hToolTipTheme, GetHdcOf(dc.GetTempHDC()), TTP_CLOSE, btnState, &btnR, NULL);
+
+ if ( out_button_rect )
+ *out_button_rect = rect;
+ }
+
+ *out_tab_rect = wxRect(tabX, tabY, tabWidth, tabHeight);
+
+ dc.DestroyClippingRegion();
+}
+
+int wxAuiMSWTabArt::GetIndentSize()
+{
+ if ( IsThemed() )
+ return 3; // This should be 1 but we can't draw into the border from DrawTab
+ else
+ return wxAuiGenericTabArt::GetIndentSize();
+}
+
+int wxAuiMSWTabArt::GetBorderWidth(wxWindow* wnd)
+{
+ return wxAuiGenericTabArt::GetBorderWidth(wnd);
+}
+
+int wxAuiMSWTabArt::GetAdditionalBorderSpace(wxWindow* wnd)
+{
+ if ( IsThemed() )
+ {
+ return 4;
+ }
+ else
+ return wxAuiGenericTabArt::GetAdditionalBorderSpace(wnd);
+}
+
+wxSize wxAuiMSWTabArt::GetTabSize(wxDC& dc,
+ wxWindow* wnd,
+ const wxString& caption,
+ const wxBitmap& bitmap,
+ bool active,
+ int close_button_state,
+ int* x_extent)
+{
+ if ( !IsThemed() )
+ return wxAuiGenericTabArt::GetTabSize(dc, wnd, caption, bitmap, active, close_button_state, x_extent);
+
+ if ( !m_closeBtnSize.IsFullySpecified() )
+ InitSizes(wnd, dc);
+
+ wxCoord textWidth, textHeight, tmp;
+
+ dc.SetFont(wnd->GetFont());
+ dc.GetTextExtent(caption, &textWidth, &tmp);
+ dc.GetTextExtent("ABCDEFXj", &tmp, &textHeight);
+
+ wxCoord tabWidth = wxMax(m_tabSize.x, textWidth);
+ wxCoord tabHeight = wxMax(m_tabSize.y, textHeight);
+
+ // if the close button is showing, add space for it
+ if ( close_button_state != wxAUI_BUTTON_STATE_HIDDEN )
+ {
+ tabWidth += m_closeBtnSize.x;
+ tabHeight = wxMax(tabHeight, m_closeBtnSize.y);
+ }
+
+ // if there's a bitmap, add space for it
+ if ( bitmap.IsOk() )
+ {
+ tabWidth += bitmap.GetWidth() + wnd->FromDIP(3); // bitmap padding
+ tabHeight = wxMax(tabHeight, bitmap.GetHeight() + wnd->FromDIP(2));
+ }
+
+ // add padding
+ tabWidth += wnd->FromDIP(12);
+ tabHeight += wnd->FromDIP(3);
+
+ if ( m_flags & wxAUI_NB_TAB_FIXED_WIDTH )
+ {
+ tabWidth = m_fixedTabWidth;
+ }
+ else
+ {
+ int minTabWidth = wnd->FromDIP(46);
+ if (tabWidth < minTabWidth)
+ tabWidth = minTabWidth;
+ }
+
+ *x_extent = tabWidth;
+
+ if (tabHeight > m_maxTabHeight)
+ m_maxTabHeight = tabHeight;
+
+ return wxSize(tabWidth, tabHeight);
+}
+
+
+void wxAuiMSWTabArt::DrawButton(wxDC& dc,
+ wxWindow* wnd,
+ const wxRect& in_rect,
+ int bitmap_id,
+ int button_state,
+ int orientation,
+ wxRect* out_rect)
+{
+ if ( !IsThemed() )
+ {
+ wxAuiGenericTabArt::DrawButton(dc, wnd, in_rect, bitmap_id, button_state, orientation, out_rect);
+ return;
+ }
+
+ wxUxThemeEngine* te = wxUxThemeEngine::Get();
+
+ wchar_t* themeId = NULL;
+ int part = 0;
+
+ switch (bitmap_id)
+ {
+ case wxAUI_BUTTON_CLOSE:
+ themeId = L"Window";
+ part = WP_CLOSEBUTTON;
+ break;
+ case wxAUI_BUTTON_LEFT:
+ themeId = L"Spin";
+ part = SPNP_DOWNHORZ;
+ break;
+ case wxAUI_BUTTON_RIGHT:
+ themeId = L"Spin";
+ part = SPNP_UPHORZ;
+ break;
+ case wxAUI_BUTTON_WINDOWLIST:
+ themeId = L"Combobox";
+ part = CP_DROPDOWNBUTTON1;
+ break;
+ }
+
+ wxRect rect = in_rect;
+
+ if ( orientation == wxLEFT )
+ {
+ rect.SetX(in_rect.x);
+ rect.SetY(((in_rect.y + in_rect.height) / 2) - (m_closeBtnSize.GetHeight() / 2));
+ rect.SetWidth(m_closeBtnSize.GetWidth());
+ rect.SetHeight(m_closeBtnSize.GetHeight());
+ }
+ else
+ {
+ rect = wxRect(in_rect.x + in_rect.width - m_closeBtnSize.GetWidth(),
+ ((in_rect.y + in_rect.height) / 2) - (m_closeBtnSize.GetHeight() / 2),
+ m_closeBtnSize.GetWidth(), m_closeBtnSize.GetHeight());
+ }
+
+ if ( bitmap_id == wxAUI_BUTTON_LEFT ||
+ bitmap_id == wxAUI_BUTTON_RIGHT )
+ {
+ rect.y = in_rect.y;
+ rect.height = in_rect.height - 7;
+ }
+
+ dc.SetPen(*wxTRANSPARENT_PEN);
+ dc.SetBrush(wxBrush(m_baseColour));
+ dc.DrawRectangle(rect);
+
+ int btnState;
+ if ( button_state == wxAUI_BUTTON_STATE_DISABLED )
+ btnState = TTCS_PRESSED + 1;
+ else if ( button_state == wxAUI_BUTTON_STATE_HOVER )
+ btnState = TTCS_HOT;
+ else if ( button_state == wxAUI_BUTTON_STATE_PRESSED )
+ btnState = TTCS_PRESSED;
+ else
+ btnState = TTCS_NORMAL;
+
+ wxUxThemeHandle hTheme(wnd, themeId);
+
+ wxRect btnRect(rect);
+ btnRect.width -= wnd->FromDIP(1);
+
+ RECT btnR;
+ wxCopyRectToRECT(btnRect, btnR);
+ te->DrawThemeBackground(hTheme, GetHdcOf(dc.GetTempHDC()), part, btnState, &btnR, NULL);
+
+ if ( out_rect )
+ *out_rect = rect;
+}
+
+int wxAuiMSWTabArt::ShowDropDown(wxWindow* wnd,
+ const wxAuiNotebookPageArray& pages,
+ int active_idx)
+{
+ return wxAuiGenericTabArt::ShowDropDown(wnd, pages, active_idx);
+}
+
+int wxAuiMSWTabArt::GetBestTabCtrlSize(wxWindow* wnd,
+ const wxAuiNotebookPageArray& pages,
+ const wxSize& requiredBmp_size)
+{
+ return wxAuiGenericTabArt::GetBestTabCtrlSize(wnd, pages, requiredBmp_size);
+}
+
+void wxAuiMSWTabArt::InitSizes(wxWindow* wnd, wxDC& dc)
+{
+ wxUxThemeEngine* te = wxUxThemeEngine::Get();
+ SIZE uxSize;
+
+ // Borrow close button from tooltip (best fit on various backgrounds)
+ wxUxThemeHandle hTooltipTheme(wnd, L"Tooltip");
+
+ te->GetThemePartSize(hTooltipTheme, GetHdcOf(dc.GetTempHDC()),
+ TTP_CLOSE, 0, NULL, TS_TRUE, &uxSize);
+ m_closeBtnSize.Set(uxSize.cx, uxSize.cy);
+
+ wxUxThemeHandle hTabTheme(wnd, L"Tab");
+ te->GetThemePartSize(hTabTheme, GetHdcOf(dc.GetTempHDC()),
+ TABP_TABITEM, 0, NULL, TS_TRUE, &uxSize);
+ m_tabSize.Set(uxSize.cx, uxSize.cy);
+}
+
+bool wxAuiMSWTabArt::IsThemed() const
+{
+ return
+ m_themed &&
+ !(m_flags & wxAUI_NB_BOTTOM); // Native theme does not support bottom tabs
+}
+
+
+#endif // wxUSE_AUI