]> git.saurik.com Git - wxWidgets.git/commitdiff
Refactor wxAUI: extract wxAuiTabArt in a separate file.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 25 Mar 2012 17:55:59 +0000 (17:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 25 Mar 2012 17:55:59 +0000 (17:55 +0000)
No real changes, just extract wxAuiTabArt into its own file. Also rename
wxAuiDefaultTabArt to wxAuiSimpleTabArt in preparation for having other tab
art classes as the default one.

See #14098.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

18 files changed:
Makefile.in
build/bakefiles/files.bkl
build/msw/makefile.bcc
build/msw/makefile.gcc
build/msw/makefile.vc
build/msw/makefile.wat
build/msw/wx_aui.dsp
build/msw/wx_core.dsp
build/msw/wx_vc7_aui.vcproj
build/msw/wx_vc7_core.vcproj
build/msw/wx_vc8_aui.vcproj
build/msw/wx_vc8_core.vcproj
build/msw/wx_vc9_aui.vcproj
build/msw/wx_vc9_core.vcproj
include/wx/aui/auibook.h
include/wx/aui/tabart.h [new file with mode: 0644]
src/aui/auibook.cpp
src/aui/tabart.cpp [new file with mode: 0644]

index 5761b9776675ecc98585889f94f0f3cde130a84f..c10f4f28d5f4129fc6cacc1df34fed66c43bda21 100644 (file)
@@ -1840,7 +1840,8 @@ AUIDLL_OBJECTS =  \
        auidll_floatpane.o \
        auidll_auibook.o \
        auidll_auibar.o \
-       auidll_tabmdi.o
+       auidll_tabmdi.o \
+       auidll_tabart.o
 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) \
@@ -1853,7 +1854,8 @@ AUILIB_OBJECTS =  \
        auilib_floatpane.o \
        auilib_auibook.o \
        auilib_auibar.o \
-       auilib_tabmdi.o
+       auilib_tabmdi.o \
+       auilib_tabart.o
 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) \
@@ -4198,6 +4200,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS =  \
        wx/aui/auibar.h \
        wx/aui/tabmdi.h \
        wx/aui/aui.h \
+       wx/aui/tabart.h \
        wx/propgrid/advprops.h \
        wx/propgrid/editors.h \
        wx/propgrid/manager.h \
@@ -4514,6 +4517,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS =  \
        monodll_auibook.o \
        monodll_auibar.o \
        monodll_tabmdi.o \
+       monodll_tabart.o \
        monodll_advprops.o \
        monodll_editors.o \
        monodll_manager.o \
@@ -6408,6 +6412,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS_1 =  \
        monolib_auibook.o \
        monolib_auibar.o \
        monolib_tabmdi.o \
+       monolib_tabart.o \
        monolib_advprops.o \
        monolib_editors.o \
        monolib_manager.o \
@@ -17403,6 +17408,9 @@ monodll_auibar.o: $(srcdir)/src/aui/auibar.cpp $(MONODLL_ODEP)
 monodll_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+monodll_tabart.o: $(srcdir)/src/aui/tabart.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/aui/tabart.cpp
+
 monodll_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
 
@@ -22701,6 +22709,9 @@ monolib_auibar.o: $(srcdir)/src/aui/auibar.cpp $(MONOLIB_ODEP)
 monolib_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+monolib_tabart.o: $(srcdir)/src/aui/tabart.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/aui/tabart.cpp
+
 monolib_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
 
@@ -36462,6 +36473,9 @@ auidll_auibar.o: $(srcdir)/src/aui/auibar.cpp $(AUIDLL_ODEP)
 auidll_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(AUIDLL_ODEP)
        $(CXXC) -c -o $@ $(AUIDLL_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+auidll_tabart.o: $(srcdir)/src/aui/tabart.cpp $(AUIDLL_ODEP)
+       $(CXXC) -c -o $@ $(AUIDLL_CXXFLAGS) $(srcdir)/src/aui/tabart.cpp
+
 auilib_framemanager.o: $(srcdir)/src/aui/framemanager.cpp $(AUILIB_ODEP)
        $(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/framemanager.cpp
 
@@ -36480,6 +36494,9 @@ auilib_auibar.o: $(srcdir)/src/aui/auibar.cpp $(AUILIB_ODEP)
 auilib_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(AUILIB_ODEP)
        $(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+auilib_tabart.o: $(srcdir)/src/aui/tabart.cpp $(AUILIB_ODEP)
+       $(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/tabart.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
 
index 13ce7bb7f224230940cef8ee7b4060a68ad2999f..00ec5612cca031374fec93cc3476cf404f9bda30 100644 (file)
@@ -3555,6 +3555,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/aui/auibook.cpp
     src/aui/auibar.cpp
     src/aui/tabmdi.cpp
+    src/aui/tabart.cpp
 </set>
 <set var="AUI_HDR" hints="files">
     wx/aui/framemanager.h
@@ -3564,6 +3565,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     wx/aui/auibar.h
     wx/aui/tabmdi.h
     wx/aui/aui.h
+    wx/aui/tabart.h
 </set>
 
 <!-- ====================================================================== -->
index 5df0cea2a08c6d789b3e68badd9282508379e0d2..69d9335ecd395caa0fb0cacd45b947c2110ae34b 100644 (file)
@@ -1325,7 +1325,8 @@ AUIDLL_OBJECTS =  \
        $(OBJS)\auidll_floatpane.obj \\r
        $(OBJS)\auidll_auibook.obj \\r
        $(OBJS)\auidll_auibar.obj \\r
-       $(OBJS)\auidll_tabmdi.obj\r
+       $(OBJS)\auidll_tabmdi.obj \\r
+       $(OBJS)\auidll_tabart.obj\r
 AUILIB_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \\r
        $(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \\r
        $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \\r
@@ -1342,7 +1343,8 @@ AUILIB_OBJECTS =  \
        $(OBJS)\auilib_floatpane.obj \\r
        $(OBJS)\auilib_auibook.obj \\r
        $(OBJS)\auilib_auibar.obj \\r
-       $(OBJS)\auilib_tabmdi.obj\r
+       $(OBJS)\auilib_tabmdi.obj \\r
+       $(OBJS)\auilib_tabart.obj\r
 RIBBONDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \\r
        $(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \\r
        $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \\r
@@ -1688,6 +1690,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_auibook.obj \\r
        $(OBJS)\monodll_auibar.obj \\r
        $(OBJS)\monodll_tabmdi.obj \\r
+       $(OBJS)\monodll_tabart.obj \\r
        $(OBJS)\monodll_advprops.obj \\r
        $(OBJS)\monodll_editors.obj \\r
        $(OBJS)\monodll_manager.obj \\r
@@ -2471,6 +2474,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_auibook.obj \\r
        $(OBJS)\monolib_auibar.obj \\r
        $(OBJS)\monolib_tabmdi.obj \\r
+       $(OBJS)\monolib_tabart.obj \\r
        $(OBJS)\monolib_advprops.obj \\r
        $(OBJS)\monolib_editors.obj \\r
        $(OBJS)\monolib_manager.obj \\r
@@ -7072,6 +7076,9 @@ $(OBJS)\monodll_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monodll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\monodll_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp\r
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp\r
 \r
@@ -9477,6 +9484,9 @@ $(OBJS)\monolib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monolib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\monolib_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp\r
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp\r
 \r
@@ -15430,6 +15440,9 @@ $(OBJS)\auidll_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\auidll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\auidll_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\auilib_dummy.obj: ..\..\src\common\dummy.cpp\r
        $(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp\r
 \r
@@ -15451,6 +15464,9 @@ $(OBJS)\auilib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\auilib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\auilib_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\ribbondll_dummy.obj: ..\..\src\common\dummy.cpp\r
        $(CXX) -q -c -P -o$@ $(RIBBONDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp\r
 \r
index 0ead02dbc06ed12d67a95ddb9fd193a93bd3b4ab..22519d2b9eb49f144dd32145331a688579145ee0 100644 (file)
@@ -1324,7 +1324,8 @@ AUIDLL_OBJECTS =  \
        $(OBJS)\auidll_floatpane.o \\r
        $(OBJS)\auidll_auibook.o \\r
        $(OBJS)\auidll_auibar.o \\r
-       $(OBJS)\auidll_tabmdi.o\r
+       $(OBJS)\auidll_tabmdi.o \\r
+       $(OBJS)\auidll_tabart.o\r
 AUILIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) $(GCCFLAGS) \\r
        -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) \\r
        $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \\r
@@ -1340,7 +1341,8 @@ AUILIB_OBJECTS =  \
        $(OBJS)\auilib_floatpane.o \\r
        $(OBJS)\auilib_auibook.o \\r
        $(OBJS)\auilib_auibar.o \\r
-       $(OBJS)\auilib_tabmdi.o\r
+       $(OBJS)\auilib_tabmdi.o \\r
+       $(OBJS)\auilib_tabart.o\r
 RIBBONDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \\r
        $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \\r
        $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \\r
@@ -1699,6 +1701,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_auibook.o \\r
        $(OBJS)\monodll_auibar.o \\r
        $(OBJS)\monodll_tabmdi.o \\r
+       $(OBJS)\monodll_tabart.o \\r
        $(OBJS)\monodll_advprops.o \\r
        $(OBJS)\monodll_editors.o \\r
        $(OBJS)\monodll_manager.o \\r
@@ -2488,6 +2491,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_auibook.o \\r
        $(OBJS)\monolib_auibar.o \\r
        $(OBJS)\monolib_tabmdi.o \\r
+       $(OBJS)\monolib_tabart.o \\r
        $(OBJS)\monolib_advprops.o \\r
        $(OBJS)\monolib_editors.o \\r
        $(OBJS)\monolib_manager.o \\r
@@ -7240,6 +7244,9 @@ $(OBJS)\monodll_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\monodll_tabmdi.o: ../../src/aui/tabmdi.cpp\r
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<\r
 \r
+$(OBJS)\monodll_tabart.o: ../../src/aui/tabart.cpp\r
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<\r
+\r
 $(OBJS)\monodll_advprops.o: ../../src/propgrid/advprops.cpp\r
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<\r
 \r
@@ -9645,6 +9652,9 @@ $(OBJS)\monolib_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\monolib_tabmdi.o: ../../src/aui/tabmdi.cpp\r
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<\r
 \r
+$(OBJS)\monolib_tabart.o: ../../src/aui/tabart.cpp\r
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<\r
+\r
 $(OBJS)\monolib_advprops.o: ../../src/propgrid/advprops.cpp\r
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<\r
 \r
@@ -15598,6 +15608,9 @@ $(OBJS)\auidll_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\auidll_tabmdi.o: ../../src/aui/tabmdi.cpp\r
        $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<\r
 \r
+$(OBJS)\auidll_tabart.o: ../../src/aui/tabart.cpp\r
+       $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<\r
+\r
 $(OBJS)\auilib_dummy.o: ../../src/common/dummy.cpp\r
        $(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<\r
 \r
@@ -15619,6 +15632,9 @@ $(OBJS)\auilib_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\auilib_tabmdi.o: ../../src/aui/tabmdi.cpp\r
        $(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<\r
 \r
+$(OBJS)\auilib_tabart.o: ../../src/aui/tabart.cpp\r
+       $(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<\r
+\r
 $(OBJS)\ribbondll_dummy.o: ../../src/common/dummy.cpp\r
        $(CXX) -c -o $@ $(RIBBONDLL_CXXFLAGS) $(CPPDEPS) $<\r
 \r
index 03625d4586b6bbd88267de0d84b061fc71ba71ee..9dcb750aeb9d4b4ca4ab58e8d4af7117ef5f4e2b 100644 (file)
@@ -1463,7 +1463,8 @@ AUIDLL_OBJECTS =  \
        $(OBJS)\auidll_floatpane.obj \\r
        $(OBJS)\auidll_auibook.obj \\r
        $(OBJS)\auidll_auibar.obj \\r
-       $(OBJS)\auidll_tabmdi.obj\r
+       $(OBJS)\auidll_tabmdi.obj \\r
+       $(OBJS)\auidll_tabart.obj\r
 AUIDLL_RESOURCES =  \\r
        $(OBJS)\auidll_version.res\r
 AUILIB_CXXFLAGS = /M$(__RUNTIME_LIBS_472)$(__DEBUGRUNTIME) /DWIN32 \\r
@@ -1486,7 +1487,8 @@ AUILIB_OBJECTS =  \
        $(OBJS)\auilib_floatpane.obj \\r
        $(OBJS)\auilib_auibook.obj \\r
        $(OBJS)\auilib_auibar.obj \\r
-       $(OBJS)\auilib_tabmdi.obj\r
+       $(OBJS)\auilib_tabmdi.obj \\r
+       $(OBJS)\auilib_tabart.obj\r
 RIBBONDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_488)$(__DEBUGRUNTIME) /DWIN32 \\r
        $(__DEBUGINFO) \\r
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_ribbon_vc$(VENDORTAG).pdb \\r
@@ -1969,6 +1971,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_auibook.obj \\r
        $(OBJS)\monodll_auibar.obj \\r
        $(OBJS)\monodll_tabmdi.obj \\r
+       $(OBJS)\monodll_tabart.obj \\r
        $(OBJS)\monodll_advprops.obj \\r
        $(OBJS)\monodll_editors.obj \\r
        $(OBJS)\monodll_manager.obj \\r
@@ -2758,6 +2761,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_auibook.obj \\r
        $(OBJS)\monolib_auibar.obj \\r
        $(OBJS)\monolib_tabmdi.obj \\r
+       $(OBJS)\monolib_tabart.obj \\r
        $(OBJS)\monolib_advprops.obj \\r
        $(OBJS)\monolib_editors.obj \\r
        $(OBJS)\monolib_manager.obj \\r
@@ -7745,6 +7749,9 @@ $(OBJS)\monodll_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monodll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\monodll_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp\r
 \r
@@ -10150,6 +10157,9 @@ $(OBJS)\monolib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monolib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\monolib_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp\r
 \r
@@ -16103,6 +16113,9 @@ $(OBJS)\auidll_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\auidll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\auidll_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\auilib_dummy.obj: ..\..\src\common\dummy.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp\r
 \r
@@ -16124,6 +16137,9 @@ $(OBJS)\auilib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\auilib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp\r
 \r
+$(OBJS)\auilib_tabart.obj: ..\..\src\aui\tabart.cpp\r
+       $(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabart.cpp\r
+\r
 $(OBJS)\ribbondll_dummy.obj: ..\..\src\common\dummy.cpp\r
        $(CXX) /c /nologo /TP /Fo$@ $(RIBBONDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp\r
 \r
index 283c85f6835c75bb390ac2c730b5a911820978ea..780d09c6340e8fecb260f60327155da9a188037e 100644 (file)
@@ -211,6 +211,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  &
        $(OBJS)\monodll_auibook.obj &\r
        $(OBJS)\monodll_auibar.obj &\r
        $(OBJS)\monodll_tabmdi.obj &\r
+       $(OBJS)\monodll_tabart.obj &\r
        $(OBJS)\monodll_advprops.obj &\r
        $(OBJS)\monodll_editors.obj &\r
        $(OBJS)\monodll_manager.obj &\r
@@ -1005,6 +1006,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  &
        $(OBJS)\monolib_auibook.obj &\r
        $(OBJS)\monolib_auibar.obj &\r
        $(OBJS)\monolib_tabmdi.obj &\r
+       $(OBJS)\monolib_tabart.obj &\r
        $(OBJS)\monolib_advprops.obj &\r
        $(OBJS)\monolib_editors.obj &\r
        $(OBJS)\monolib_manager.obj &\r
@@ -4844,7 +4846,8 @@ AUIDLL_OBJECTS =  &
        $(OBJS)\auidll_floatpane.obj &\r
        $(OBJS)\auidll_auibook.obj &\r
        $(OBJS)\auidll_auibar.obj &\r
-       $(OBJS)\auidll_tabmdi.obj\r
+       $(OBJS)\auidll_tabmdi.obj &\r
+       $(OBJS)\auidll_tabart.obj\r
 AUILIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &\r
        $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &\r
        $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) &\r
@@ -4861,7 +4864,8 @@ AUILIB_OBJECTS =  &
        $(OBJS)\auilib_floatpane.obj &\r
        $(OBJS)\auilib_auibook.obj &\r
        $(OBJS)\auilib_auibar.obj &\r
-       $(OBJS)\auilib_tabmdi.obj\r
+       $(OBJS)\auilib_tabmdi.obj &\r
+       $(OBJS)\auilib_tabart.obj\r
 RIBBONDLL_CXXFLAGS = -bd $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &\r
        $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &\r
        $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) &\r
@@ -7511,6 +7515,9 @@ $(OBJS)\monodll_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\monodll_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<\r
 \r
+$(OBJS)\monodll_tabart.obj :  .AUTODEPEND ..\..\src\aui\tabart.cpp\r
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<\r
+\r
 $(OBJS)\monodll_advprops.obj :  .AUTODEPEND ..\..\src\propgrid\advprops.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<\r
 \r
@@ -9916,6 +9923,9 @@ $(OBJS)\monolib_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\monolib_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<\r
 \r
+$(OBJS)\monolib_tabart.obj :  .AUTODEPEND ..\..\src\aui\tabart.cpp\r
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<\r
+\r
 $(OBJS)\monolib_advprops.obj :  .AUTODEPEND ..\..\src\propgrid\advprops.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<\r
 \r
@@ -15869,6 +15879,9 @@ $(OBJS)\auidll_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\auidll_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(AUIDLL_CXXFLAGS) $<\r
 \r
+$(OBJS)\auidll_tabart.obj :  .AUTODEPEND ..\..\src\aui\tabart.cpp\r
+       $(CXX) -bt=nt -zq -fo=$^@ $(AUIDLL_CXXFLAGS) $<\r
+\r
 $(OBJS)\auilib_dummy.obj :  .AUTODEPEND ..\..\src\common\dummy.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(AUILIB_CXXFLAGS) $<\r
 \r
@@ -15890,6 +15903,9 @@ $(OBJS)\auilib_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\auilib_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(AUILIB_CXXFLAGS) $<\r
 \r
+$(OBJS)\auilib_tabart.obj :  .AUTODEPEND ..\..\src\aui\tabart.cpp\r
+       $(CXX) -bt=nt -zq -fo=$^@ $(AUILIB_CXXFLAGS) $<\r
+\r
 $(OBJS)\ribbondll_dummy.obj :  .AUTODEPEND ..\..\src\common\dummy.cpp\r
        $(CXX) -bt=nt -zq -fo=$^@ $(RIBBONDLL_CXXFLAGS) $<\r
 \r
index 286cf66a575b4005989ee5968c166e464223e967..dd2d7b56eba481fd45d65d2a27ae443592a2acdc 100644 (file)
@@ -554,6 +554,10 @@ SOURCE=..\..\include\wx\aui\framemanager.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\aui\tabart.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\aui\tabmdi.h\r
 # End Source File\r
 # End Group\r
@@ -582,6 +586,10 @@ SOURCE=..\..\src\aui\framemanager.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\src\aui\tabart.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\src\aui\tabmdi.cpp\r
 # End Source File\r
 # End Group\r
index b7734c7efed9c674e93b61bfdfd1bc53c55a30ba..14e9842bf45e1e927503002e792312c5dbe2303b 100644 (file)
@@ -6892,6 +6892,10 @@ SOURCE=..\..\include\wx\stc\stc.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\aui\tabart.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\aui\tabmdi.h\r
 # End Source File\r
 # Begin Source File\r
index fe10da9f2fe0a0e51a343cd3706a387edacbe3a9..2a8bcde44ca40f0ca75c256fdafff48a39ac9b3d 100644 (file)
                        <File\r
                                RelativePath="..\..\include\wx\aui\framemanager.h">\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\aui\tabart.h">\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\include\wx\aui\tabmdi.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\src\aui\framemanager.cpp">\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\src\aui\tabart.cpp">\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\src\aui\tabmdi.cpp">\r
                        </File>\r
index a8889153e8b5501b3291185db7dea3e0943c8dad..486e8976a94b9bff3564ff40a3f4a2fe5c01203b 100644 (file)
                        <File\r
                                RelativePath="..\..\include\wx\stc\stc.h">\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\aui\tabart.h">\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\include\wx\aui\tabmdi.h">\r
                        </File>\r
index 286cfc522c1f8cd6b197bfccd38fd92441e6c6c7..5f2a340317dba6c1a6411b249f75e1553b0b7a45 100644 (file)
                                RelativePath="..\..\include\wx\aui\framemanager.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\aui\tabart.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\include\wx\aui\tabmdi.h"\r
                                >\r
                                RelativePath="..\..\src\aui\framemanager.cpp"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\src\aui\tabart.cpp"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\src\aui\tabmdi.cpp"\r
                                >\r
index 85402b6a9f5364c67c5c95ef56a8f8e7e4c461bc..8fa02977e369a3ffa77629b2b468de5fe520ed79 100644 (file)
                                RelativePath="..\..\include\wx\stc\stc.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\aui\tabart.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\include\wx\aui\tabmdi.h"\r
                                >\r
index db13af0ff1b8719612a312d82cb8904e39840662..ae4a2e5240724ac03072db116f5da6ce63c31f8d 100644 (file)
                                RelativePath="..\..\include\wx\aui\framemanager.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\aui\tabart.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\include\wx\aui\tabmdi.h"\r
                                >\r
                                RelativePath="..\..\src\aui\framemanager.cpp"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\src\aui\tabart.cpp"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\src\aui\tabmdi.cpp"\r
                                >\r
index efca076487b75815bcb23c9b5bed76f29b27fe05..1091d8f940f72fb2fdef25c56f479878c7c9568b 100644 (file)
                                RelativePath="..\..\include\wx\stc\stc.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\aui\tabart.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\include\wx\aui\tabmdi.h"\r
                                >\r
index e8e4527ff625d81cee940785ef71cb139c10e3ae..290ae5ef3b524adfa76b3661c5f3ac2b5d3dd1b9 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        wx/aui/auibook.h
 // Purpose:     wxaui: wx advanced user interface - notebook
 // Author:      Benjamin I. Williams
-// Modified by:
+// Modified by: Jens Lody
 // Created:     2006-06-28
 // Copyright:   (C) Copyright 2006, Kirix Corporation, All Rights Reserved.
 // Licence:     wxWindows Library Licence, Version 3.1
@@ -21,9 +21,8 @@
 
 #if wxUSE_AUI
 
+#include "wx/aui/tabart.h"
 #include "wx/aui/framemanager.h"
-#include "wx/aui/dockart.h"
-#include "wx/aui/floatpane.h"
 #include "wx/bookctrl.h"
 
 
@@ -119,254 +118,6 @@ WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiTabContainerButton, wxAuiTabContainerButt
 #endif
 
 
-// tab art class
-
-class WXDLLIMPEXP_AUI wxAuiTabArt
-{
-public:
-
-    wxAuiTabArt() { }
-    virtual ~wxAuiTabArt() { }
-
-    virtual wxAuiTabArt* Clone() = 0;
-    virtual void SetFlags(unsigned int flags) = 0;
-
-    virtual void SetSizingInfo(const wxSize& tabCtrlSize,
-                               size_t tabCount) = 0;
-
-    virtual void SetNormalFont(const wxFont& font) = 0;
-    virtual void SetSelectedFont(const wxFont& font) = 0;
-    virtual void SetMeasuringFont(const wxFont& font) = 0;
-    virtual void SetColour(const wxColour& colour) = 0;
-    virtual void SetActiveColour(const wxColour& colour) = 0;
-
-    virtual void DrawBackground(
-                         wxDC& dc,
-                         wxWindow* wnd,
-                         const wxRect& rect) = 0;
-
-    virtual void DrawTab(wxDC& dc,
-                         wxWindow* wnd,
-                         const wxAuiNotebookPage& pane,
-                         const wxRect& inRect,
-                         int closeButtonState,
-                         wxRect* outTabRect,
-                         wxRect* outButtonRect,
-                         int* xExtent) = 0;
-
-    virtual void DrawButton(
-                         wxDC& dc,
-                         wxWindow* wnd,
-                         const wxRect& inRect,
-                         int bitmapId,
-                         int buttonState,
-                         int orientation,
-                         wxRect* outRect) = 0;
-
-    virtual wxSize GetTabSize(
-                         wxDC& dc,
-                         wxWindow* wnd,
-                         const wxString& caption,
-                         const wxBitmap& bitmap,
-                         bool active,
-                         int closeButtonState,
-                         int* xExtent) = 0;
-
-    virtual int ShowDropDown(
-                         wxWindow* wnd,
-                         const wxAuiNotebookPageArray& items,
-                         int activeIdx) = 0;
-
-    virtual int GetIndentSize() = 0;
-
-    virtual int GetBestTabCtrlSize(
-                         wxWindow* wnd,
-                         const wxAuiNotebookPageArray& pages,
-                         const wxSize& requiredBmpSize) = 0;
-};
-
-
-class WXDLLIMPEXP_AUI wxAuiDefaultTabArt : public wxAuiTabArt
-{
-
-public:
-
-    wxAuiDefaultTabArt();
-    virtual ~wxAuiDefaultTabArt();
-
-    wxAuiTabArt* Clone();
-    void SetFlags(unsigned int flags);
-    void SetSizingInfo(const wxSize& tabCtrlSize,
-                       size_t tabCount);
-
-    void SetNormalFont(const wxFont& font);
-    void SetSelectedFont(const wxFont& font);
-    void SetMeasuringFont(const wxFont& font);
-    void SetColour(const wxColour& colour);
-    void SetActiveColour(const wxColour& colour);
-
-    void DrawBackground(
-                 wxDC& dc,
-                 wxWindow* wnd,
-                 const wxRect& rect);
-
-    void DrawTab(wxDC& dc,
-                 wxWindow* wnd,
-                 const wxAuiNotebookPage& pane,
-                 const wxRect& inRect,
-                 int closeButtonState,
-                 wxRect* outTabRect,
-                 wxRect* outButtonRect,
-                 int* xExtent);
-
-    void DrawButton(
-                 wxDC& dc,
-                 wxWindow* wnd,
-                 const wxRect& inRect,
-                 int bitmapId,
-                 int buttonState,
-                 int orientation,
-                 wxRect* outRect);
-
-    int GetIndentSize();
-
-    wxSize GetTabSize(
-                 wxDC& dc,
-                 wxWindow* wnd,
-                 const wxString& caption,
-                 const wxBitmap& bitmap,
-                 bool active,
-                 int closeButtonState,
-                 int* xExtent);
-
-    int ShowDropDown(
-                 wxWindow* wnd,
-                 const wxAuiNotebookPageArray& items,
-                 int activeIdx);
-
-    int GetBestTabCtrlSize(wxWindow* wnd,
-                 const wxAuiNotebookPageArray& pages,
-                 const wxSize& requiredBmpSize);
-
-protected:
-
-    wxFont m_normalFont;
-    wxFont m_selectedFont;
-    wxFont m_measuringFont;
-    wxColour m_baseColour;
-    wxPen m_baseColourPen;
-    wxPen m_borderPen;
-    wxBrush m_baseColourBrush;
-    wxColour m_activeColour;
-    wxBitmap m_activeCloseBmp;
-    wxBitmap m_disabledCloseBmp;
-    wxBitmap m_activeLeftBmp;
-    wxBitmap m_disabledLeftBmp;
-    wxBitmap m_activeRightBmp;
-    wxBitmap m_disabledRightBmp;
-    wxBitmap m_activeWindowListBmp;
-    wxBitmap m_disabledWindowListBmp;
-
-    int m_fixedTabWidth;
-    int m_tabCtrlHeight;
-    unsigned int m_flags;
-};
-
-
-class WXDLLIMPEXP_AUI wxAuiSimpleTabArt : public wxAuiTabArt
-{
-
-public:
-
-    wxAuiSimpleTabArt();
-    virtual ~wxAuiSimpleTabArt();
-
-    wxAuiTabArt* Clone();
-    void SetFlags(unsigned int flags);
-
-    void SetSizingInfo(const wxSize& tabCtrlSize,
-                       size_t tabCount);
-
-    void SetNormalFont(const wxFont& font);
-    void SetSelectedFont(const wxFont& font);
-    void SetMeasuringFont(const wxFont& font);
-    void SetColour(const wxColour& colour);
-    void SetActiveColour(const wxColour& colour);
-
-    void DrawBackground(
-                 wxDC& dc,
-                 wxWindow* wnd,
-                 const wxRect& rect);
-
-    void DrawTab(wxDC& dc,
-                 wxWindow* wnd,
-                 const wxAuiNotebookPage& pane,
-                 const wxRect& inRect,
-                 int closeButtonState,
-                 wxRect* outTabRect,
-                 wxRect* outButtonRect,
-                 int* xExtent);
-
-    void DrawButton(
-                 wxDC& dc,
-                 wxWindow* wnd,
-                 const wxRect& inRect,
-                 int bitmapId,
-                 int buttonState,
-                 int orientation,
-                 wxRect* outRect);
-
-    int GetIndentSize();
-
-    wxSize GetTabSize(
-                 wxDC& dc,
-                 wxWindow* wnd,
-                 const wxString& caption,
-                 const wxBitmap& bitmap,
-                 bool active,
-                 int closeButtonState,
-                 int* xExtent);
-
-    int ShowDropDown(
-                 wxWindow* wnd,
-                 const wxAuiNotebookPageArray& items,
-                 int activeIdx);
-
-    int GetBestTabCtrlSize(wxWindow* wnd,
-                 const wxAuiNotebookPageArray& pages,
-                 const wxSize& requiredBmpSize);
-
-protected:
-
-    wxFont m_normalFont;
-    wxFont m_selectedFont;
-    wxFont m_measuringFont;
-    wxPen m_normalBkPen;
-    wxPen m_selectedBkPen;
-    wxBrush m_normalBkBrush;
-    wxBrush m_selectedBkBrush;
-    wxBrush m_bkBrush;
-    wxBitmap m_activeCloseBmp;
-    wxBitmap m_disabledCloseBmp;
-    wxBitmap m_activeLeftBmp;
-    wxBitmap m_disabledLeftBmp;
-    wxBitmap m_activeRightBmp;
-    wxBitmap m_disabledRightBmp;
-    wxBitmap m_activeWindowListBmp;
-    wxBitmap m_disabledWindowListBmp;
-
-    int m_fixedTabWidth;
-    unsigned int m_flags;
-};
-
-
-
-
-
-
-
-
-
 class WXDLLIMPEXP_AUI wxAuiTabContainer
 {
 public:
diff --git a/include/wx/aui/tabart.h b/include/wx/aui/tabart.h
new file mode 100644 (file)
index 0000000..e1418f2
--- /dev/null
@@ -0,0 +1,282 @@
+//////////////////////////////////////////////////////////////////////////////
+// Name:        wx/aui/tabart.h
+// Purpose:     wxaui: wx advanced user interface - notebook
+// Author:      Benjamin I. Williams
+// Modified by: Jens Lody (extracted from wx/aui/auibook.h)
+// Created:     2012-03-21
+// RCS-ID:      $Id:$
+// Copyright:   (C) Copyright 2006, Kirix Corporation, All Rights Reserved.
+// Licence:     wxWindows Library Licence, Version 3.1
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _WX_AUI_TABART_H_
+#define _WX_AUI_TABART_H_
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/defs.h"
+
+#if wxUSE_AUI
+
+#include "wx/colour.h"
+#include "wx/gdicmn.h"
+#include "wx/font.h"
+#include "wx/pen.h"
+#include "wx/brush.h"
+#include "wx/bitmap.h"
+
+
+class wxAuiNotebookPage;
+class wxAuiNotebookPageArray;
+class wxWindow;
+class wxDC;
+
+
+// tab art class
+
+class WXDLLIMPEXP_AUI wxAuiTabArt
+{
+public:
+
+    wxAuiTabArt() { }
+    virtual ~wxAuiTabArt() { }
+
+    virtual wxAuiTabArt* Clone() = 0;
+    virtual void SetFlags(unsigned int flags) = 0;
+
+    virtual void SetSizingInfo(const wxSize& tabCtrlSize,
+                               size_t tabCount) = 0;
+
+    virtual void SetNormalFont(const wxFont& font) = 0;
+    virtual void SetSelectedFont(const wxFont& font) = 0;
+    virtual void SetMeasuringFont(const wxFont& font) = 0;
+    virtual void SetColour(const wxColour& colour) = 0;
+    virtual void SetActiveColour(const wxColour& colour) = 0;
+
+    virtual void DrawBackground(
+                         wxDC& dc,
+                         wxWindow* wnd,
+                         const wxRect& rect) = 0;
+
+    virtual void DrawTab(wxDC& dc,
+                         wxWindow* wnd,
+                         const wxAuiNotebookPage& pane,
+                         const wxRect& inRect,
+                         int closeButtonState,
+                         wxRect* outTabRect,
+                         wxRect* outButtonRect,
+                         int* xExtent) = 0;
+
+    virtual void DrawButton(
+                         wxDC& dc,
+                         wxWindow* wnd,
+                         const wxRect& inRect,
+                         int bitmapId,
+                         int buttonState,
+                         int orientation,
+                         wxRect* outRect) = 0;
+
+    virtual wxSize GetTabSize(
+                         wxDC& dc,
+                         wxWindow* wnd,
+                         const wxString& caption,
+                         const wxBitmap& bitmap,
+                         bool active,
+                         int closeButtonState,
+                         int* xExtent) = 0;
+
+    virtual int ShowDropDown(
+                         wxWindow* wnd,
+                         const wxAuiNotebookPageArray& items,
+                         int activeIdx) = 0;
+
+    virtual int GetIndentSize() = 0;
+
+    virtual int GetBestTabCtrlSize(
+                         wxWindow* wnd,
+                         const wxAuiNotebookPageArray& pages,
+                         const wxSize& requiredBmpSize) = 0;
+};
+
+
+class WXDLLIMPEXP_AUI wxAuiGenericTabArt : public wxAuiTabArt
+{
+
+public:
+
+    wxAuiGenericTabArt();
+    virtual ~wxAuiGenericTabArt();
+
+    wxAuiTabArt* Clone();
+    void SetFlags(unsigned int flags);
+    void SetSizingInfo(const wxSize& tabCtrlSize,
+                       size_t tabCount);
+
+    void SetNormalFont(const wxFont& font);
+    void SetSelectedFont(const wxFont& font);
+    void SetMeasuringFont(const wxFont& font);
+    void SetColour(const wxColour& colour);
+    void SetActiveColour(const wxColour& colour);
+
+    void DrawBackground(
+                 wxDC& dc,
+                 wxWindow* wnd,
+                 const wxRect& rect);
+
+    void DrawTab(wxDC& dc,
+                 wxWindow* wnd,
+                 const wxAuiNotebookPage& pane,
+                 const wxRect& inRect,
+                 int closeButtonState,
+                 wxRect* outTabRect,
+                 wxRect* outButtonRect,
+                 int* xExtent);
+
+    void DrawButton(
+                 wxDC& dc,
+                 wxWindow* wnd,
+                 const wxRect& inRect,
+                 int bitmapId,
+                 int buttonState,
+                 int orientation,
+                 wxRect* outRect);
+
+    int GetIndentSize();
+
+    wxSize GetTabSize(
+                 wxDC& dc,
+                 wxWindow* wnd,
+                 const wxString& caption,
+                 const wxBitmap& bitmap,
+                 bool active,
+                 int closeButtonState,
+                 int* xExtent);
+
+    int ShowDropDown(
+                 wxWindow* wnd,
+                 const wxAuiNotebookPageArray& items,
+                 int activeIdx);
+
+    int GetBestTabCtrlSize(wxWindow* wnd,
+                 const wxAuiNotebookPageArray& pages,
+                 const wxSize& requiredBmpSize);
+
+protected:
+
+    wxFont m_normalFont;
+    wxFont m_selectedFont;
+    wxFont m_measuringFont;
+    wxColour m_baseColour;
+    wxPen m_baseColourPen;
+    wxPen m_borderPen;
+    wxBrush m_baseColourBrush;
+    wxColour m_activeColour;
+    wxBitmap m_activeCloseBmp;
+    wxBitmap m_disabledCloseBmp;
+    wxBitmap m_activeLeftBmp;
+    wxBitmap m_disabledLeftBmp;
+    wxBitmap m_activeRightBmp;
+    wxBitmap m_disabledRightBmp;
+    wxBitmap m_activeWindowListBmp;
+    wxBitmap m_disabledWindowListBmp;
+
+    int m_fixedTabWidth;
+    int m_tabCtrlHeight;
+    unsigned int m_flags;
+};
+
+
+class WXDLLIMPEXP_AUI wxAuiSimpleTabArt : public wxAuiTabArt
+{
+
+public:
+
+    wxAuiSimpleTabArt();
+    virtual ~wxAuiSimpleTabArt();
+
+    wxAuiTabArt* Clone();
+    void SetFlags(unsigned int flags);
+
+    void SetSizingInfo(const wxSize& tabCtrlSize,
+                       size_t tabCount);
+
+    void SetNormalFont(const wxFont& font);
+    void SetSelectedFont(const wxFont& font);
+    void SetMeasuringFont(const wxFont& font);
+    void SetColour(const wxColour& colour);
+    void SetActiveColour(const wxColour& colour);
+
+    void DrawBackground(
+                 wxDC& dc,
+                 wxWindow* wnd,
+                 const wxRect& rect);
+
+    void DrawTab(wxDC& dc,
+                 wxWindow* wnd,
+                 const wxAuiNotebookPage& pane,
+                 const wxRect& inRect,
+                 int closeButtonState,
+                 wxRect* outTabRect,
+                 wxRect* outButtonRect,
+                 int* xExtent);
+
+    void DrawButton(
+                 wxDC& dc,
+                 wxWindow* wnd,
+                 const wxRect& inRect,
+                 int bitmapId,
+                 int buttonState,
+                 int orientation,
+                 wxRect* outRect);
+
+    int GetIndentSize();
+
+    wxSize GetTabSize(
+                 wxDC& dc,
+                 wxWindow* wnd,
+                 const wxString& caption,
+                 const wxBitmap& bitmap,
+                 bool active,
+                 int closeButtonState,
+                 int* xExtent);
+
+    int ShowDropDown(
+                 wxWindow* wnd,
+                 const wxAuiNotebookPageArray& items,
+                 int activeIdx);
+
+    int GetBestTabCtrlSize(wxWindow* wnd,
+                 const wxAuiNotebookPageArray& pages,
+                 const wxSize& requiredBmpSize);
+
+protected:
+
+    wxFont m_normalFont;
+    wxFont m_selectedFont;
+    wxFont m_measuringFont;
+    wxPen m_normalBkPen;
+    wxPen m_selectedBkPen;
+    wxBrush m_normalBkBrush;
+    wxBrush m_selectedBkBrush;
+    wxBrush m_bkBrush;
+    wxBitmap m_activeCloseBmp;
+    wxBitmap m_disabledCloseBmp;
+    wxBitmap m_activeLeftBmp;
+    wxBitmap m_disabledLeftBmp;
+    wxBitmap m_activeRightBmp;
+    wxBitmap m_disabledRightBmp;
+    wxBitmap m_activeWindowListBmp;
+    wxBitmap m_disabledWindowListBmp;
+
+    int m_fixedTabWidth;
+    unsigned int m_flags;
+};
+
+#define wxAuiDefaultTabArt wxAuiGenericTabArt
+
+#endif  // wxUSE_AUI
+
+#endif  // _WX_AUI_TABART_H_
index f299944023979d58ee11b40b54a7ada40cff303e..3d423f25e68c51f035079e0d3091bfcbe3d4b676 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        src/aui/auibook.cpp
 // Purpose:     wxaui: wx advanced user interface - notebook
 // Author:      Benjamin I. Williams
-// Modified by:
+// Modified by: Jens Lody
 // Created:     2006-06-28
 // Copyright:   (C) Copyright 2006, Kirix Corporation, All Rights Reserved
 // Licence:     wxWindows Library Licence, Version 3.1
 
 #ifndef WX_PRECOMP
     #include "wx/settings.h"
-    #include "wx/image.h"
-    #include "wx/menu.h"
+    #include "wx/clientdc.h"
 #endif
 
 #include "wx/aui/tabmdi.h"
-#include "wx/dcbuffer.h"
-
-#include "wx/renderer.h"
 
 #ifdef __WXMAC__
 #include "wx/osx/private.h"
@@ -63,1234 +59,6 @@ IMPLEMENT_CLASS(wxAuiTabCtrl, wxControl)
 IMPLEMENT_DYNAMIC_CLASS(wxAuiNotebookEvent, wxBookCtrlEvent)
 
 
-
-
-
-// these functions live in dockart.cpp -- they'll eventually
-// be moved to a new utility cpp file
-
-wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h,
-                             const wxColour& color);
-
-wxString wxAuiChopText(wxDC& dc, const wxString& text, int max_size);
-
-static void DrawButtons(wxDC& dc,
-                        const wxRect& _rect,
-                        const wxBitmap& bmp,
-                        const wxColour& bkcolour,
-                        int button_state)
-{
-    wxRect rect = _rect;
-
-    if (button_state == wxAUI_BUTTON_STATE_PRESSED)
-    {
-        rect.x++;
-        rect.y++;
-    }
-
-    if (button_state == wxAUI_BUTTON_STATE_HOVER ||
-        button_state == wxAUI_BUTTON_STATE_PRESSED)
-    {
-        dc.SetBrush(wxBrush(bkcolour.ChangeLightness(120)));
-        dc.SetPen(wxPen(bkcolour.ChangeLightness(75)));
-
-        // draw the background behind the button
-        dc.DrawRectangle(rect.x, rect.y, 15, 15);
-    }
-
-    // draw the button itself
-    dc.DrawBitmap(bmp, rect.x, rect.y, true);
-}
-
-static void IndentPressedBitmap(wxRect* rect, int button_state)
-{
-    if (button_state == wxAUI_BUTTON_STATE_PRESSED)
-    {
-        rect->x++;
-        rect->y++;
-    }
-}
-
-
-
-// -- GUI helper classes and functions --
-
-class wxAuiCommandCapture : public wxEvtHandler
-{
-public:
-
-    wxAuiCommandCapture() { m_lastId = 0; }
-    int GetCommandId() const { return m_lastId; }
-
-    bool ProcessEvent(wxEvent& evt)
-    {
-        if (evt.GetEventType() == wxEVT_COMMAND_MENU_SELECTED)
-        {
-            m_lastId = evt.GetId();
-            return true;
-        }
-
-        if (GetNextHandler())
-            return GetNextHandler()->ProcessEvent(evt);
-
-        return false;
-    }
-
-private:
-    int m_lastId;
-};
-
-
-// -- bitmaps --
-
-#if defined( __WXMAC__ )
- static const unsigned char close_bits[]={
-     0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x03, 0xF8, 0x01, 0xF0, 0x19, 0xF3,
-     0xB8, 0xE3, 0xF0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE1, 0xB8, 0xE3, 0x19, 0xF3,
-     0x01, 0xF0, 0x03, 0xF8, 0x0F, 0xFE, 0xFF, 0xFF };
-#elif defined( __WXGTK__)
- static const unsigned char close_bits[]={
-     0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xfb, 0xef, 0xdb, 0xed, 0x8b, 0xe8,
-     0x1b, 0xec, 0x3b, 0xee, 0x1b, 0xec, 0x8b, 0xe8, 0xdb, 0xed, 0xfb, 0xef,
-     0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
-#else
- static const unsigned char close_bits[]={
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xcf, 0xf9,
-     0x9f, 0xfc, 0x3f, 0xfe, 0x3f, 0xfe, 0x9f, 0xfc, 0xcf, 0xf9, 0xe7, 0xf3,
-     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#endif
-
-static const unsigned char left_bits[] = {
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x3f, 0xfe,
-   0x1f, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x3f, 0xfe, 0x7f, 0xfe, 0xff, 0xfe,
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-static const unsigned char right_bits[] = {
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9f, 0xff, 0x1f, 0xff,
-   0x1f, 0xfe, 0x1f, 0xfc, 0x1f, 0xfe, 0x1f, 0xff, 0x9f, 0xff, 0xdf, 0xff,
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-static const unsigned char list_bits[] = {
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-   0x0f, 0xf8, 0xff, 0xff, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xff,
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-
-
-
-
-
-// -- wxAuiDefaultTabArt class implementation --
-
-wxAuiDefaultTabArt::wxAuiDefaultTabArt()
-{
-    m_normalFont = *wxNORMAL_FONT;
-    m_selectedFont = *wxNORMAL_FONT;
-    m_selectedFont.SetWeight(wxBOLD);
-    m_measuringFont = m_selectedFont;
-
-    m_fixedTabWidth = 100;
-    m_tabCtrlHeight = 0;
-
-#if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON
-    wxColor baseColour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground));
-#else
-    wxColor baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
-#endif
-
-    // the baseColour is too pale to use as our base colour,
-    // so darken it a bit --
-    if ((255-baseColour.Red()) +
-        (255-baseColour.Green()) +
-        (255-baseColour.Blue()) < 60)
-    {
-        baseColour = baseColour.ChangeLightness(92);
-    }
-
-    m_activeColour = baseColour;
-    m_baseColour = baseColour;
-    wxColor borderColour = baseColour.ChangeLightness(75);
-
-    m_borderPen = wxPen(borderColour);
-    m_baseColourPen = wxPen(m_baseColour);
-    m_baseColourBrush = wxBrush(m_baseColour);
-
-    m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK);
-    m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128));
-
-    m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK);
-    m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128));
-
-    m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK);
-    m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128));
-
-    m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK);
-    m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128));
-
-    m_flags = 0;
-}
-
-wxAuiDefaultTabArt::~wxAuiDefaultTabArt()
-{
-}
-
-wxAuiTabArt* wxAuiDefaultTabArt::Clone()
-{
-    return new wxAuiDefaultTabArt(*this);
-}
-
-void wxAuiDefaultTabArt::SetFlags(unsigned int flags)
-{
-    m_flags = flags;
-}
-
-void wxAuiDefaultTabArt::SetSizingInfo(const wxSize& tab_ctrl_size,
-                                       size_t tab_count)
-{
-    m_fixedTabWidth = 100;
-
-    int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4;
-
-    if (m_flags & wxAUI_NB_CLOSE_BUTTON)
-        tot_width -= m_activeCloseBmp.GetWidth();
-    if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON)
-        tot_width -= m_activeWindowListBmp.GetWidth();
-
-    if (tab_count > 0)
-    {
-        m_fixedTabWidth = tot_width/(int)tab_count;
-    }
-
-
-    if (m_fixedTabWidth < 100)
-        m_fixedTabWidth = 100;
-
-    if (m_fixedTabWidth > tot_width/2)
-        m_fixedTabWidth = tot_width/2;
-
-    if (m_fixedTabWidth > 220)
-        m_fixedTabWidth = 220;
-
-    m_tabCtrlHeight = tab_ctrl_size.y;
-}
-
-
-void wxAuiDefaultTabArt::DrawBackground(wxDC& dc,
-                                        wxWindow* WXUNUSED(wnd),
-                                        const wxRect& rect)
-{
-    // draw background
-
-    wxColor top_color       = m_baseColour.ChangeLightness(90);
-    wxColor bottom_color   = m_baseColour.ChangeLightness(170);
-    wxRect r;
-
-   if (m_flags &wxAUI_NB_BOTTOM)
-       r = wxRect(rect.x, rect.y, rect.width+2, rect.height);
-   // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
-   // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
-   else //for wxAUI_NB_TOP
-       r = wxRect(rect.x, rect.y, rect.width+2, rect.height-3);
-
-    dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH);
-
-
-   // draw base lines
-
-   dc.SetPen(m_borderPen);
-   int y = rect.GetHeight();
-   int w = rect.GetWidth();
-
-   if (m_flags &wxAUI_NB_BOTTOM)
-   {
-       dc.SetBrush(wxBrush(bottom_color));
-       dc.DrawRectangle(-1, 0, w+2, 4);
-   }
-   // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
-   // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
-   else //for wxAUI_NB_TOP
-   {
-       dc.SetBrush(m_baseColourBrush);
-       dc.DrawRectangle(-1, y-4, w+2, 4);
-   }
-}
-
-
-// DrawTab() draws an individual tab.
-//
-// dc       - output dc
-// in_rect  - rectangle the tab should be confined to
-// caption  - tab's caption
-// active   - whether or not the tab is active
-// out_rect - actual output rectangle
-// x_extent - the advance x; where the next tab should start
-
-void wxAuiDefaultTabArt::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)
-{
-    wxCoord normal_textx, normal_texty;
-    wxCoord selected_textx, selected_texty;
-    wxCoord texty;
-
-    // if the caption is empty, measure some temporary text
-    wxString caption = page.caption;
-    if (caption.empty())
-        caption = wxT("Xj");
-
-    dc.SetFont(m_selectedFont);
-    dc.GetTextExtent(caption, &selected_textx, &selected_texty);
-
-    dc.SetFont(m_normalFont);
-    dc.GetTextExtent(caption, &normal_textx, &normal_texty);
-
-    // figure out the size of the tab
-    wxSize tab_size = GetTabSize(dc,
-                                 wnd,
-                                 page.caption,
-                                 page.bitmap,
-                                 page.active,
-                                 close_button_state,
-                                 x_extent);
-
-    wxCoord tab_height = m_tabCtrlHeight - 3;
-    wxCoord tab_width = tab_size.x;
-    wxCoord tab_x = in_rect.x;
-    wxCoord tab_y = in_rect.y + in_rect.height - tab_height;
-
-
-    caption = page.caption;
-
-
-    // select pen, brush and font for the tab to be drawn
-
-    if (page.active)
-    {
-        dc.SetFont(m_selectedFont);
-        texty = selected_texty;
-    }
-    else
-    {
-        dc.SetFont(m_normalFont);
-        texty = normal_texty;
-    }
-
-
-    // create points that will make the tab outline
-
-    int clip_width = tab_width;
-    if (tab_x + clip_width > in_rect.x + in_rect.width)
-        clip_width = (in_rect.x + in_rect.width) - tab_x;
-
-/*
-    wxPoint clip_points[6];
-    clip_points[0] = wxPoint(tab_x,              tab_y+tab_height-3);
-    clip_points[1] = wxPoint(tab_x,              tab_y+2);
-    clip_points[2] = wxPoint(tab_x+2,            tab_y);
-    clip_points[3] = wxPoint(tab_x+clip_width-1, tab_y);
-    clip_points[4] = wxPoint(tab_x+clip_width+1, tab_y+2);
-    clip_points[5] = wxPoint(tab_x+clip_width+1, tab_y+tab_height-3);
-
-    // FIXME: these ports don't provide wxRegion ctor from array of points
-#if !defined(__WXDFB__) && !defined(__WXCOCOA__)
-    // set the clipping region for the tab --
-    wxRegion clipping_region(WXSIZEOF(clip_points), clip_points);
-    dc.SetClippingRegion(clipping_region);
-#endif // !wxDFB && !wxCocoa
-*/
-    // since the above code above doesn't play well with WXDFB or WXCOCOA,
-    // we'll just use a rectangle for the clipping region for now --
-    dc.SetClippingRegion(tab_x, tab_y, clip_width+1, tab_height-3);
-
-
-    wxPoint border_points[6];
-    if (m_flags &wxAUI_NB_BOTTOM)
-    {
-        border_points[0] = wxPoint(tab_x,             tab_y);
-        border_points[1] = wxPoint(tab_x,             tab_y+tab_height-6);
-        border_points[2] = wxPoint(tab_x+2,           tab_y+tab_height-4);
-        border_points[3] = wxPoint(tab_x+tab_width-2, tab_y+tab_height-4);
-        border_points[4] = wxPoint(tab_x+tab_width,   tab_y+tab_height-6);
-        border_points[5] = wxPoint(tab_x+tab_width,   tab_y);
-    }
-    else //if (m_flags & wxAUI_NB_TOP) {}
-    {
-        border_points[0] = wxPoint(tab_x,             tab_y+tab_height-4);
-        border_points[1] = wxPoint(tab_x,             tab_y+2);
-        border_points[2] = wxPoint(tab_x+2,           tab_y);
-        border_points[3] = wxPoint(tab_x+tab_width-2, tab_y);
-        border_points[4] = wxPoint(tab_x+tab_width,   tab_y+2);
-        border_points[5] = wxPoint(tab_x+tab_width,   tab_y+tab_height-4);
-    }
-    // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
-    // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
-
-    int drawn_tab_yoff = border_points[1].y;
-    int drawn_tab_height = border_points[0].y - border_points[1].y;
-
-
-    if (page.active)
-    {
-        // draw active tab
-
-        // draw base background color
-        wxRect r(tab_x, tab_y, tab_width, tab_height);
-        dc.SetPen(wxPen(m_activeColour));
-        dc.SetBrush(wxBrush(m_activeColour));
-        dc.DrawRectangle(r.x+1, r.y+1, r.width-1, r.height-4);
-
-        // this white helps fill out the gradient at the top of the tab
-        dc.SetPen(*wxWHITE_PEN);
-        dc.SetBrush(*wxWHITE_BRUSH);
-        dc.DrawRectangle(r.x+2, r.y+1, r.width-3, r.height-4);
-
-        // these two points help the rounded corners appear more antialiased
-        dc.SetPen(wxPen(m_activeColour));
-        dc.DrawPoint(r.x+2, r.y+1);
-        dc.DrawPoint(r.x+r.width-2, r.y+1);
-
-        // set rectangle down a bit for gradient drawing
-        r.SetHeight(r.GetHeight()/2);
-        r.x += 2;
-        r.width -= 3;
-        r.y += r.height;
-        r.y -= 2;
-
-        // draw gradient background
-        wxColor top_color = *wxWHITE;
-        wxColor bottom_color = m_activeColour;
-        dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH);
-    }
-    else
-    {
-        // draw inactive tab
-
-        wxRect r(tab_x, tab_y+1, tab_width, tab_height-3);
-
-        // start the gradent up a bit and leave the inside border inset
-        // by a pixel for a 3D look.  Only the top half of the inactive
-        // tab will have a slight gradient
-        r.x += 3;
-        r.y++;
-        r.width -= 4;
-        r.height /= 2;
-        r.height--;
-
-        // -- draw top gradient fill for glossy look
-        wxColor top_color = m_baseColour;
-        wxColor bottom_color = top_color.ChangeLightness(160);
-        dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH);
-
-        r.y += r.height;
-        r.y--;
-
-        // -- draw bottom fill for glossy look
-        top_color = m_baseColour;
-        bottom_color = m_baseColour;
-        dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH);
-    }
-
-    // draw tab outline
-    dc.SetPen(m_borderPen);
-    dc.SetBrush(*wxTRANSPARENT_BRUSH);
-    dc.DrawPolygon(WXSIZEOF(border_points), border_points);
-
-    // there are two horizontal grey lines at the bottom of the tab control,
-    // this gets rid of the top one of those lines in the tab control
-    if (page.active)
-    {
-        if (m_flags &wxAUI_NB_BOTTOM)
-            dc.SetPen(wxPen(m_baseColour.ChangeLightness(170)));
-        // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
-        // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
-        else //for wxAUI_NB_TOP
-            dc.SetPen(m_baseColourPen);
-        dc.DrawLine(border_points[0].x+1,
-                    border_points[0].y,
-                    border_points[5].x,
-                    border_points[5].y);
-    }
-
-
-    int text_offset = tab_x + 8;
-    int close_button_width = 0;
-    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
-    {
-        close_button_width = m_activeCloseBmp.GetWidth();
-    }
-
-    int bitmap_offset = 0;
-    if (page.bitmap.IsOk())
-    {
-        bitmap_offset = tab_x + 8;
-
-        // draw bitmap
-        dc.DrawBitmap(page.bitmap,
-                      bitmap_offset,
-                      drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2),
-                      true);
-
-        text_offset = bitmap_offset + page.bitmap.GetWidth();
-        text_offset += 3; // bitmap padding
-
-    }
-    else
-    {
-        text_offset = tab_x + 8;
-    }
-
-
-    wxString draw_text = wxAuiChopText(dc,
-                          caption,
-                          tab_width - (text_offset-tab_x) - close_button_width);
-
-    // draw tab text
-    dc.DrawText(draw_text,
-                text_offset,
-                drawn_tab_yoff + (drawn_tab_height)/2 - (texty/2) - 1);
-
-    // draw focus rectangle
-    if (page.active && (wnd->FindFocus() == wnd))
-    {
-        wxRect focusRectText(text_offset, (drawn_tab_yoff + (drawn_tab_height)/2 - (texty/2) - 1),
-            selected_textx, selected_texty);
-
-        wxRect focusRect;
-        wxRect focusRectBitmap;
-
-        if (page.bitmap.IsOk())
-            focusRectBitmap = wxRect(bitmap_offset, drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2),
-                                            page.bitmap.GetWidth(), page.bitmap.GetHeight());
-
-        if (page.bitmap.IsOk() && draw_text.IsEmpty())
-            focusRect = focusRectBitmap;
-        else if (!page.bitmap.IsOk() && !draw_text.IsEmpty())
-            focusRect = focusRectText;
-        else if (page.bitmap.IsOk() && !draw_text.IsEmpty())
-            focusRect = focusRectText.Union(focusRectBitmap);
-
-        focusRect.Inflate(2, 2);
-
-        wxRendererNative::Get().DrawFocusRect(wnd, dc, focusRect, 0);
-    }
-
-    // draw close button if necessary
-    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
-    {
-        wxBitmap bmp = m_disabledCloseBmp;
-
-        if (close_button_state == wxAUI_BUTTON_STATE_HOVER ||
-            close_button_state == wxAUI_BUTTON_STATE_PRESSED)
-        {
-            bmp = m_activeCloseBmp;
-        }
-
-        int offsetY = tab_y-1;
-        if (m_flags & wxAUI_NB_BOTTOM)
-            offsetY = 1;
-
-        wxRect rect(tab_x + tab_width - close_button_width - 1,
-                    offsetY + (tab_height/2) - (bmp.GetHeight()/2),
-                    close_button_width,
-                    tab_height);
-
-        IndentPressedBitmap(&rect, close_button_state);
-        dc.DrawBitmap(bmp, rect.x, rect.y, true);
-
-        *out_button_rect = rect;
-    }
-
-    *out_tab_rect = wxRect(tab_x, tab_y, tab_width, tab_height);
-
-    dc.DestroyClippingRegion();
-}
-
-int wxAuiDefaultTabArt::GetIndentSize()
-{
-    return 5;
-}
-
-wxSize wxAuiDefaultTabArt::GetTabSize(wxDC& dc,
-                                      wxWindow* WXUNUSED(wnd),
-                                      const wxString& caption,
-                                      const wxBitmap& bitmap,
-                                      bool WXUNUSED(active),
-                                      int close_button_state,
-                                      int* x_extent)
-{
-    wxCoord measured_textx, measured_texty, tmp;
-
-    dc.SetFont(m_measuringFont);
-    dc.GetTextExtent(caption, &measured_textx, &measured_texty);
-
-    dc.GetTextExtent(wxT("ABCDEFXj"), &tmp, &measured_texty);
-
-    // add padding around the text
-    wxCoord tab_width = measured_textx;
-    wxCoord tab_height = measured_texty;
-
-    // if the close button is showing, add space for it
-    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
-        tab_width += m_activeCloseBmp.GetWidth() + 3;
-
-    // if there's a bitmap, add space for it
-    if (bitmap.IsOk())
-    {
-        tab_width += bitmap.GetWidth();
-        tab_width += 3; // right side bitmap padding
-        tab_height = wxMax(tab_height, bitmap.GetHeight());
-    }
-
-    // add padding
-    tab_width += 16;
-    tab_height += 10;
-
-    if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH)
-    {
-        tab_width = m_fixedTabWidth;
-    }
-
-    *x_extent = tab_width;
-
-    return wxSize(tab_width, tab_height);
-}
-
-
-void wxAuiDefaultTabArt::DrawButton(wxDC& dc,
-                                    wxWindow* WXUNUSED(wnd),
-                                    const wxRect& in_rect,
-                                    int bitmap_id,
-                                    int button_state,
-                                    int orientation,
-                                    wxRect* out_rect)
-{
-    wxBitmap bmp;
-    wxRect rect;
-
-    switch (bitmap_id)
-    {
-        case wxAUI_BUTTON_CLOSE:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledCloseBmp;
-            else
-                bmp = m_activeCloseBmp;
-            break;
-        case wxAUI_BUTTON_LEFT:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledLeftBmp;
-            else
-                bmp = m_activeLeftBmp;
-            break;
-        case wxAUI_BUTTON_RIGHT:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledRightBmp;
-            else
-                bmp = m_activeRightBmp;
-            break;
-        case wxAUI_BUTTON_WINDOWLIST:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledWindowListBmp;
-            else
-                bmp = m_activeWindowListBmp;
-            break;
-    }
-
-
-    if (!bmp.IsOk())
-        return;
-
-    rect = in_rect;
-
-    if (orientation == wxLEFT)
-    {
-        rect.SetX(in_rect.x);
-        rect.SetY(((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2));
-        rect.SetWidth(bmp.GetWidth());
-        rect.SetHeight(bmp.GetHeight());
-    }
-    else
-    {
-        rect = wxRect(in_rect.x + in_rect.width - bmp.GetWidth(),
-                      ((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2),
-                      bmp.GetWidth(), bmp.GetHeight());
-    }
-
-    IndentPressedBitmap(&rect, button_state);
-    dc.DrawBitmap(bmp, rect.x, rect.y, true);
-
-    *out_rect = rect;
-}
-
-int wxAuiDefaultTabArt::ShowDropDown(wxWindow* wnd,
-                                     const wxAuiNotebookPageArray& pages,
-                                     int /*active_idx*/)
-{
-    wxMenu menuPopup;
-
-    size_t i, count = pages.GetCount();
-    for (i = 0; i < count; ++i)
-    {
-        const wxAuiNotebookPage& page = pages.Item(i);
-        wxString caption = page.caption;
-
-        // if there is no caption, make it a space.  This will prevent
-        // an assert in the menu code.
-        if (caption.IsEmpty())
-            caption = wxT(" ");
-
-        wxMenuItem* item = new wxMenuItem(NULL, 1000+i, caption);
-        if (page.bitmap.IsOk())
-            item->SetBitmap(page.bitmap);
-        menuPopup.Append(item);
-    }
-
-    // find out where to put the popup menu of window items
-    wxPoint pt = ::wxGetMousePosition();
-    pt = wnd->ScreenToClient(pt);
-
-    // find out the screen coordinate at the bottom of the tab ctrl
-    wxRect cli_rect = wnd->GetClientRect();
-    pt.y = cli_rect.y + cli_rect.height;
-
-    wxAuiCommandCapture* cc = new wxAuiCommandCapture;
-    wnd->PushEventHandler(cc);
-    wnd->PopupMenu(&menuPopup, pt);
-    int command = cc->GetCommandId();
-    wnd->PopEventHandler(true);
-
-    if (command >= 1000)
-        return command-1000;
-
-    return -1;
-}
-
-int wxAuiDefaultTabArt::GetBestTabCtrlSize(wxWindow* wnd,
-                                           const wxAuiNotebookPageArray& pages,
-                                           const wxSize& requiredBmp_size)
-{
-    wxClientDC dc(wnd);
-    dc.SetFont(m_measuringFont);
-
-    // sometimes a standard bitmap size needs to be enforced, especially
-    // if some tabs have bitmaps and others don't.  This is important because
-    // it prevents the tab control from resizing when tabs are added.
-    wxBitmap measureBmp;
-    if (requiredBmp_size.IsFullySpecified())
-    {
-        measureBmp.Create(requiredBmp_size.x,
-                           requiredBmp_size.y);
-    }
-
-
-    int max_y = 0;
-    size_t i, page_count = pages.GetCount();
-    for (i = 0; i < page_count; ++i)
-    {
-        wxAuiNotebookPage& page = pages.Item(i);
-
-        wxBitmap bmp;
-        if (measureBmp.IsOk())
-            bmp = measureBmp;
-        else
-            bmp = page.bitmap;
-
-        // we don't use the caption text because we don't
-        // want tab heights to be different in the case
-        // of a very short piece of text on one tab and a very
-        // tall piece of text on another tab
-        int x_ext = 0;
-        wxSize s = GetTabSize(dc,
-                              wnd,
-                              wxT("ABCDEFGHIj"),
-                              bmp,
-                              true,
-                              wxAUI_BUTTON_STATE_HIDDEN,
-                              &x_ext);
-
-        max_y = wxMax(max_y, s.y);
-    }
-
-    return max_y+2;
-}
-
-void wxAuiDefaultTabArt::SetNormalFont(const wxFont& font)
-{
-    m_normalFont = font;
-}
-
-void wxAuiDefaultTabArt::SetSelectedFont(const wxFont& font)
-{
-    m_selectedFont = font;
-}
-
-void wxAuiDefaultTabArt::SetMeasuringFont(const wxFont& font)
-{
-    m_measuringFont = font;
-}
-
-void wxAuiDefaultTabArt::SetColour(const wxColour& colour)
-{
-    m_baseColour = colour;
-    m_borderPen = wxPen(m_baseColour.ChangeLightness(75));
-    m_baseColourPen = wxPen(m_baseColour);
-    m_baseColourBrush = wxBrush(m_baseColour);
-}
-
-void wxAuiDefaultTabArt::SetActiveColour(const wxColour& colour)
-{
-    m_activeColour = colour;
-}
-
-// -- wxAuiSimpleTabArt class implementation --
-
-wxAuiSimpleTabArt::wxAuiSimpleTabArt()
-{
-    m_normalFont = *wxNORMAL_FONT;
-    m_selectedFont = *wxNORMAL_FONT;
-    m_selectedFont.SetWeight(wxBOLD);
-    m_measuringFont = m_selectedFont;
-
-    m_flags = 0;
-    m_fixedTabWidth = 100;
-
-    wxColour baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
-
-    wxColour backgroundColour = baseColour;
-    wxColour normaltabColour = baseColour;
-    wxColour selectedtabColour = *wxWHITE;
-
-    m_bkBrush = wxBrush(backgroundColour);
-    m_normalBkBrush = wxBrush(normaltabColour);
-    m_normalBkPen = wxPen(normaltabColour);
-    m_selectedBkBrush = wxBrush(selectedtabColour);
-    m_selectedBkPen = wxPen(selectedtabColour);
-
-    m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK);
-    m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128));
-
-    m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK);
-    m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128));
-
-    m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK);
-    m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128));
-
-    m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK);
-    m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128));
-
-}
-
-wxAuiSimpleTabArt::~wxAuiSimpleTabArt()
-{
-}
-
-wxAuiTabArt* wxAuiSimpleTabArt::Clone()
-{
-    return new wxAuiSimpleTabArt(*this);
-}
-
-void wxAuiSimpleTabArt::SetFlags(unsigned int flags)
-{
-    m_flags = flags;
-}
-
-void wxAuiSimpleTabArt::SetSizingInfo(const wxSize& tab_ctrl_size,
-                                      size_t tab_count)
-{
-    m_fixedTabWidth = 100;
-
-    int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4;
-
-    if (m_flags & wxAUI_NB_CLOSE_BUTTON)
-        tot_width -= m_activeCloseBmp.GetWidth();
-    if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON)
-        tot_width -= m_activeWindowListBmp.GetWidth();
-
-    if (tab_count > 0)
-    {
-        m_fixedTabWidth = tot_width/(int)tab_count;
-    }
-
-
-    if (m_fixedTabWidth < 100)
-        m_fixedTabWidth = 100;
-
-    if (m_fixedTabWidth > tot_width/2)
-        m_fixedTabWidth = tot_width/2;
-
-    if (m_fixedTabWidth > 220)
-        m_fixedTabWidth = 220;
-}
-
-void wxAuiSimpleTabArt::SetColour(const wxColour& colour)
-{
-    m_bkBrush = wxBrush(colour);
-    m_normalBkBrush = wxBrush(colour);
-    m_normalBkPen = wxPen(colour);
-}
-
-void wxAuiSimpleTabArt::SetActiveColour(const wxColour& colour)
-{
-    m_selectedBkBrush = wxBrush(colour);
-    m_selectedBkPen = wxPen(colour);
-}
-
-void wxAuiSimpleTabArt::DrawBackground(wxDC& dc,
-                                       wxWindow* WXUNUSED(wnd),
-                                       const wxRect& rect)
-{
-    // draw background
-    dc.SetBrush(m_bkBrush);
-    dc.SetPen(*wxTRANSPARENT_PEN);
-    dc.DrawRectangle(-1, -1, rect.GetWidth()+2, rect.GetHeight()+2);
-
-    // draw base line
-    dc.SetPen(*wxGREY_PEN);
-    dc.DrawLine(0, rect.GetHeight()-1, rect.GetWidth(), rect.GetHeight()-1);
-}
-
-
-// DrawTab() draws an individual tab.
-//
-// dc       - output dc
-// in_rect  - rectangle the tab should be confined to
-// caption  - tab's caption
-// active   - whether or not the tab is active
-// out_rect - actual output rectangle
-// x_extent - the advance x; where the next tab should start
-
-void wxAuiSimpleTabArt::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)
-{
-    wxCoord normal_textx, normal_texty;
-    wxCoord selected_textx, selected_texty;
-    wxCoord textx, texty;
-
-    // if the caption is empty, measure some temporary text
-    wxString caption = page.caption;
-    if (caption.empty())
-        caption = wxT("Xj");
-
-    dc.SetFont(m_selectedFont);
-    dc.GetTextExtent(caption, &selected_textx, &selected_texty);
-
-    dc.SetFont(m_normalFont);
-    dc.GetTextExtent(caption, &normal_textx, &normal_texty);
-
-    // figure out the size of the tab
-    wxSize tab_size = GetTabSize(dc,
-                                 wnd,
-                                 page.caption,
-                                 page.bitmap,
-                                 page.active,
-                                 close_button_state,
-                                 x_extent);
-
-    wxCoord tab_height = tab_size.y;
-    wxCoord tab_width = tab_size.x;
-    wxCoord tab_x = in_rect.x;
-    wxCoord tab_y = in_rect.y + in_rect.height - tab_height;
-
-    caption = page.caption;
-
-    // select pen, brush and font for the tab to be drawn
-
-    if (page.active)
-    {
-        dc.SetPen(m_selectedBkPen);
-        dc.SetBrush(m_selectedBkBrush);
-        dc.SetFont(m_selectedFont);
-        textx = selected_textx;
-        texty = selected_texty;
-    }
-    else
-    {
-        dc.SetPen(m_normalBkPen);
-        dc.SetBrush(m_normalBkBrush);
-        dc.SetFont(m_normalFont);
-        textx = normal_textx;
-        texty = normal_texty;
-    }
-
-
-    // -- draw line --
-
-    wxPoint points[7];
-    points[0].x = tab_x;
-    points[0].y = tab_y + tab_height - 1;
-    points[1].x = tab_x + tab_height - 3;
-    points[1].y = tab_y + 2;
-    points[2].x = tab_x + tab_height + 3;
-    points[2].y = tab_y;
-    points[3].x = tab_x + tab_width - 2;
-    points[3].y = tab_y;
-    points[4].x = tab_x + tab_width;
-    points[4].y = tab_y + 2;
-    points[5].x = tab_x + tab_width;
-    points[5].y = tab_y + tab_height - 1;
-    points[6] = points[0];
-
-    dc.SetClippingRegion(in_rect);
-
-    dc.DrawPolygon(WXSIZEOF(points) - 1, points);
-
-    dc.SetPen(*wxGREY_PEN);
-
-    //dc.DrawLines(active ? WXSIZEOF(points) - 1 : WXSIZEOF(points), points);
-    dc.DrawLines(WXSIZEOF(points), points);
-
-
-    int text_offset;
-
-    int close_button_width = 0;
-    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
-    {
-        close_button_width = m_activeCloseBmp.GetWidth();
-        text_offset = tab_x + (tab_height/2) + ((tab_width-close_button_width)/2) - (textx/2);
-    }
-    else
-    {
-        text_offset = tab_x + (tab_height/3) + (tab_width/2) - (textx/2);
-    }
-
-    // set minimum text offset
-    if (text_offset < tab_x + tab_height)
-        text_offset = tab_x + tab_height;
-
-    // chop text if necessary
-    wxString draw_text = wxAuiChopText(dc,
-                          caption,
-                          tab_width - (text_offset-tab_x) - close_button_width);
-
-    // draw tab text
-    dc.DrawText(draw_text,
-                 text_offset,
-                 (tab_y + tab_height)/2 - (texty/2) + 1);
-
-
-    // draw focus rectangle
-    if (page.active && (wnd->FindFocus() == wnd))
-    {
-        wxRect focusRect(text_offset, ((tab_y + tab_height)/2 - (texty/2) + 1),
-            selected_textx, selected_texty);
-
-        focusRect.Inflate(2, 2);
-
-        wxRendererNative::Get().DrawFocusRect(wnd, dc, focusRect, 0);
-    }
-
-    // draw close button if necessary
-    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
-    {
-        wxBitmap bmp;
-        if (page.active)
-            bmp = m_activeCloseBmp;
-        else
-            bmp = m_disabledCloseBmp;
-
-        wxRect rect(tab_x + tab_width - close_button_width - 1,
-                    tab_y + (tab_height/2) - (bmp.GetHeight()/2) + 1,
-                    close_button_width,
-                    tab_height - 1);
-        DrawButtons(dc, rect, bmp, *wxWHITE, close_button_state);
-
-        *out_button_rect = rect;
-    }
-
-
-    *out_tab_rect = wxRect(tab_x, tab_y, tab_width, tab_height);
-
-    dc.DestroyClippingRegion();
-}
-
-int wxAuiSimpleTabArt::GetIndentSize()
-{
-    return 0;
-}
-
-wxSize wxAuiSimpleTabArt::GetTabSize(wxDC& dc,
-                                     wxWindow* WXUNUSED(wnd),
-                                     const wxString& caption,
-                                     const wxBitmap& WXUNUSED(bitmap),
-                                     bool WXUNUSED(active),
-                                     int close_button_state,
-                                     int* x_extent)
-{
-    wxCoord measured_textx, measured_texty;
-
-    dc.SetFont(m_measuringFont);
-    dc.GetTextExtent(caption, &measured_textx, &measured_texty);
-
-    wxCoord tab_height = measured_texty + 4;
-    wxCoord tab_width = measured_textx + tab_height + 5;
-
-    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
-        tab_width += m_activeCloseBmp.GetWidth();
-
-    if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH)
-    {
-        tab_width = m_fixedTabWidth;
-    }
-
-    *x_extent = tab_width - (tab_height/2) - 1;
-
-    return wxSize(tab_width, tab_height);
-}
-
-
-void wxAuiSimpleTabArt::DrawButton(wxDC& dc,
-                                   wxWindow* WXUNUSED(wnd),
-                                   const wxRect& in_rect,
-                                   int bitmap_id,
-                                   int button_state,
-                                   int orientation,
-                                   wxRect* out_rect)
-{
-    wxBitmap bmp;
-    wxRect rect;
-
-    switch (bitmap_id)
-    {
-        case wxAUI_BUTTON_CLOSE:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledCloseBmp;
-            else
-                bmp = m_activeCloseBmp;
-            break;
-        case wxAUI_BUTTON_LEFT:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledLeftBmp;
-            else
-                bmp = m_activeLeftBmp;
-            break;
-        case wxAUI_BUTTON_RIGHT:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledRightBmp;
-            else
-                bmp = m_activeRightBmp;
-            break;
-        case wxAUI_BUTTON_WINDOWLIST:
-            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
-                bmp = m_disabledWindowListBmp;
-            else
-                bmp = m_activeWindowListBmp;
-            break;
-    }
-
-    if (!bmp.IsOk())
-        return;
-
-    rect = in_rect;
-
-    if (orientation == wxLEFT)
-    {
-        rect.SetX(in_rect.x);
-        rect.SetY(((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2));
-        rect.SetWidth(bmp.GetWidth());
-        rect.SetHeight(bmp.GetHeight());
-    }
-    else
-    {
-        rect = wxRect(in_rect.x + in_rect.width - bmp.GetWidth(),
-                      ((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2),
-                      bmp.GetWidth(), bmp.GetHeight());
-    }
-
-
-    DrawButtons(dc, rect, bmp, *wxWHITE, button_state);
-
-    *out_rect = rect;
-}
-
-int wxAuiSimpleTabArt::ShowDropDown(wxWindow* wnd,
-                                    const wxAuiNotebookPageArray& pages,
-                                    int active_idx)
-{
-    wxMenu menuPopup;
-
-    size_t i, count = pages.GetCount();
-    for (i = 0; i < count; ++i)
-    {
-        const wxAuiNotebookPage& page = pages.Item(i);
-        menuPopup.AppendCheckItem(1000+i, page.caption);
-    }
-
-    if (active_idx != -1)
-    {
-        menuPopup.Check(1000+active_idx, true);
-    }
-
-    // find out where to put the popup menu of window
-    // items.  Subtract 100 for now to center the menu
-    // a bit, until a better mechanism can be implemented
-    wxPoint pt = ::wxGetMousePosition();
-    pt = wnd->ScreenToClient(pt);
-    if (pt.x < 100)
-        pt.x = 0;
-    else
-        pt.x -= 100;
-
-    // find out the screen coordinate at the bottom of the tab ctrl
-    wxRect cli_rect = wnd->GetClientRect();
-    pt.y = cli_rect.y + cli_rect.height;
-
-    wxAuiCommandCapture* cc = new wxAuiCommandCapture;
-    wnd->PushEventHandler(cc);
-    wnd->PopupMenu(&menuPopup, pt);
-    int command = cc->GetCommandId();
-    wnd->PopEventHandler(true);
-
-    if (command >= 1000)
-        return command-1000;
-
-    return -1;
-}
-
-int wxAuiSimpleTabArt::GetBestTabCtrlSize(wxWindow* wnd,
-                                          const wxAuiNotebookPageArray& WXUNUSED(pages),
-                                          const wxSize& WXUNUSED(requiredBmp_size))
-{
-    wxClientDC dc(wnd);
-    dc.SetFont(m_measuringFont);
-    int x_ext = 0;
-    wxSize s = GetTabSize(dc,
-                          wnd,
-                          wxT("ABCDEFGHIj"),
-                          wxNullBitmap,
-                          true,
-                          wxAUI_BUTTON_STATE_HIDDEN,
-                          &x_ext);
-    return s.y+3;
-}
-
-void wxAuiSimpleTabArt::SetNormalFont(const wxFont& font)
-{
-    m_normalFont = font;
-}
-
-void wxAuiSimpleTabArt::SetSelectedFont(const wxFont& font)
-{
-    m_selectedFont = font;
-}
-
-void wxAuiSimpleTabArt::SetMeasuringFont(const wxFont& font)
-{
-    m_measuringFont = font;
-}
-
-
-
-
 // -- wxAuiTabContainer class implementation --
 
 
diff --git a/src/aui/tabart.cpp b/src/aui/tabart.cpp
new file mode 100644 (file)
index 0000000..068070d
--- /dev/null
@@ -0,0 +1,1260 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        src/aui/tabart.cpp
+// Purpose:     wxaui: wx advanced user interface - notebook-art
+// Author:      Benjamin I. Williams
+// Modified by: Jens Lody (moved from auibook.cpp in extra file)
+// Created:     2012-03-21
+// RCS-ID:      $Id:$
+// Copyright:   (C) Copyright 2006, Kirix Corporation, All Rights Reserved
+// Licence:     wxWindows Library Licence, Version 3.1
+///////////////////////////////////////////////////////////////////////////////
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_AUI
+
+#ifndef WX_PRECOMP
+    #include "wx/dc.h"
+    #include "wx/dcclient.h"
+    #include "wx/settings.h"
+    #include "wx/bitmap.h"
+    #include "wx/menu.h"
+#endif
+
+#include "wx/renderer.h"
+#include "wx/aui/auibook.h"
+
+#ifdef __WXMAC__
+#include "wx/osx/private.h"
+#endif
+
+
+// -- GUI helper classes and functions --
+
+class wxAuiCommandCapture : public wxEvtHandler
+{
+public:
+
+    wxAuiCommandCapture() { m_lastId = 0; }
+    int GetCommandId() const { return m_lastId; }
+
+    bool ProcessEvent(wxEvent& evt)
+    {
+        if (evt.GetEventType() == wxEVT_COMMAND_MENU_SELECTED)
+        {
+            m_lastId = evt.GetId();
+            return true;
+        }
+
+        if (GetNextHandler())
+            return GetNextHandler()->ProcessEvent(evt);
+
+        return false;
+    }
+
+private:
+    int m_lastId;
+};
+
+
+// these functions live in dockart.cpp -- they'll eventually
+// be moved to a new utility cpp file
+
+wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h,
+                             const wxColour& color);
+
+wxString wxAuiChopText(wxDC& dc, const wxString& text, int max_size);
+
+static void DrawButtons(wxDC& dc,
+                        const wxRect& _rect,
+                        const wxBitmap& bmp,
+                        const wxColour& bkcolour,
+                        int button_state)
+{
+    wxRect rect = _rect;
+
+    if (button_state == wxAUI_BUTTON_STATE_PRESSED)
+    {
+        rect.x++;
+        rect.y++;
+    }
+
+    if (button_state == wxAUI_BUTTON_STATE_HOVER ||
+        button_state == wxAUI_BUTTON_STATE_PRESSED)
+    {
+        dc.SetBrush(wxBrush(bkcolour.ChangeLightness(120)));
+        dc.SetPen(wxPen(bkcolour.ChangeLightness(75)));
+
+        // draw the background behind the button
+        dc.DrawRectangle(rect.x, rect.y, 15, 15);
+    }
+
+    // draw the button itself
+    dc.DrawBitmap(bmp, rect.x, rect.y, true);
+}
+
+static void IndentPressedBitmap(wxRect* rect, int button_state)
+{
+    if (button_state == wxAUI_BUTTON_STATE_PRESSED)
+    {
+        rect->x++;
+        rect->y++;
+    }
+}
+
+// -- bitmaps --
+
+#if defined( __WXMAC__ )
+ static const unsigned char close_bits[]={
+     0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x03, 0xF8, 0x01, 0xF0, 0x19, 0xF3,
+     0xB8, 0xE3, 0xF0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE1, 0xB8, 0xE3, 0x19, 0xF3,
+     0x01, 0xF0, 0x03, 0xF8, 0x0F, 0xFE, 0xFF, 0xFF };
+#elif defined( __WXGTK__)
+ static const unsigned char close_bits[]={
+     0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xfb, 0xef, 0xdb, 0xed, 0x8b, 0xe8,
+     0x1b, 0xec, 0x3b, 0xee, 0x1b, 0xec, 0x8b, 0xe8, 0xdb, 0xed, 0xfb, 0xef,
+     0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+#else
+ static const unsigned char close_bits[]={
+     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xcf, 0xf9,
+     0x9f, 0xfc, 0x3f, 0xfe, 0x3f, 0xfe, 0x9f, 0xfc, 0xcf, 0xf9, 0xe7, 0xf3,
+     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+#endif
+
+static const unsigned char left_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x3f, 0xfe,
+   0x1f, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x3f, 0xfe, 0x7f, 0xfe, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+static const unsigned char right_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9f, 0xff, 0x1f, 0xff,
+   0x1f, 0xfe, 0x1f, 0xfc, 0x1f, 0xfe, 0x1f, 0xff, 0x9f, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+static const unsigned char list_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x0f, 0xf8, 0xff, 0xff, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+
+
+
+
+
+// -- wxAuiGenericTabArt class implementation --
+
+wxAuiGenericTabArt::wxAuiGenericTabArt()
+{
+    m_normalFont = *wxNORMAL_FONT;
+    m_selectedFont = *wxNORMAL_FONT;
+    m_selectedFont.SetWeight(wxBOLD);
+    m_measuringFont = m_selectedFont;
+
+    m_fixedTabWidth = 100;
+    m_tabCtrlHeight = 0;
+
+#if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON
+    wxColor baseColour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground));
+#else
+    wxColor baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+#endif
+
+    // the baseColour is too pale to use as our base colour,
+    // so darken it a bit --
+    if ((255-baseColour.Red()) +
+        (255-baseColour.Green()) +
+        (255-baseColour.Blue()) < 60)
+    {
+        baseColour = baseColour.ChangeLightness(92);
+    }
+
+    m_activeColour = baseColour;
+    m_baseColour = baseColour;
+    wxColor borderColour = baseColour.ChangeLightness(75);
+
+    m_borderPen = wxPen(borderColour);
+    m_baseColourPen = wxPen(m_baseColour);
+    m_baseColourBrush = wxBrush(m_baseColour);
+
+    m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK);
+    m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128));
+
+    m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK);
+    m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128));
+
+    m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK);
+    m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128));
+
+    m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK);
+    m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128));
+
+    m_flags = 0;
+}
+
+wxAuiGenericTabArt::~wxAuiGenericTabArt()
+{
+}
+
+wxAuiTabArt* wxAuiGenericTabArt::Clone()
+{
+    return new wxAuiGenericTabArt(*this);
+}
+
+void wxAuiGenericTabArt::SetFlags(unsigned int flags)
+{
+    m_flags = flags;
+}
+
+void wxAuiGenericTabArt::SetSizingInfo(const wxSize& tab_ctrl_size,
+                                       size_t tab_count)
+{
+    m_fixedTabWidth = 100;
+
+    int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4;
+
+    if (m_flags & wxAUI_NB_CLOSE_BUTTON)
+        tot_width -= m_activeCloseBmp.GetWidth();
+    if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON)
+        tot_width -= m_activeWindowListBmp.GetWidth();
+
+    if (tab_count > 0)
+    {
+        m_fixedTabWidth = tot_width/(int)tab_count;
+    }
+
+
+    if (m_fixedTabWidth < 100)
+        m_fixedTabWidth = 100;
+
+    if (m_fixedTabWidth > tot_width/2)
+        m_fixedTabWidth = tot_width/2;
+
+    if (m_fixedTabWidth > 220)
+        m_fixedTabWidth = 220;
+
+    m_tabCtrlHeight = tab_ctrl_size.y;
+}
+
+
+void wxAuiGenericTabArt::DrawBackground(wxDC& dc,
+                                        wxWindow* WXUNUSED(wnd),
+                                        const wxRect& rect)
+{
+    // draw background
+
+    wxColor top_color       = m_baseColour.ChangeLightness(90);
+    wxColor bottom_color   = m_baseColour.ChangeLightness(170);
+    wxRect r;
+
+   if (m_flags &wxAUI_NB_BOTTOM)
+       r = wxRect(rect.x, rect.y, rect.width+2, rect.height);
+   // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
+   // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
+   else //for wxAUI_NB_TOP
+       r = wxRect(rect.x, rect.y, rect.width+2, rect.height-3);
+
+    dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH);
+
+
+   // draw base lines
+
+   dc.SetPen(m_borderPen);
+   int y = rect.GetHeight();
+   int w = rect.GetWidth();
+
+   if (m_flags &wxAUI_NB_BOTTOM)
+   {
+       dc.SetBrush(wxBrush(bottom_color));
+       dc.DrawRectangle(-1, 0, w+2, 4);
+   }
+   // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
+   // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
+   else //for wxAUI_NB_TOP
+   {
+       dc.SetBrush(m_baseColourBrush);
+       dc.DrawRectangle(-1, y-4, w+2, 4);
+   }
+}
+
+
+// DrawTab() draws an individual tab.
+//
+// dc       - output dc
+// in_rect  - rectangle the tab should be confined to
+// caption  - tab's caption
+// active   - whether or not the tab is active
+// out_rect - actual output rectangle
+// x_extent - the advance x; where the next tab should start
+
+void wxAuiGenericTabArt::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)
+{
+    wxCoord normal_textx, normal_texty;
+    wxCoord selected_textx, selected_texty;
+    wxCoord texty;
+
+    // if the caption is empty, measure some temporary text
+    wxString caption = page.caption;
+    if (caption.empty())
+        caption = wxT("Xj");
+
+    dc.SetFont(m_selectedFont);
+    dc.GetTextExtent(caption, &selected_textx, &selected_texty);
+
+    dc.SetFont(m_normalFont);
+    dc.GetTextExtent(caption, &normal_textx, &normal_texty);
+
+    // figure out the size of the tab
+    wxSize tab_size = GetTabSize(dc,
+                                 wnd,
+                                 page.caption,
+                                 page.bitmap,
+                                 page.active,
+                                 close_button_state,
+                                 x_extent);
+
+    wxCoord tab_height = m_tabCtrlHeight - 3;
+    wxCoord tab_width = tab_size.x;
+    wxCoord tab_x = in_rect.x;
+    wxCoord tab_y = in_rect.y + in_rect.height - tab_height;
+
+
+    caption = page.caption;
+
+
+    // select pen, brush and font for the tab to be drawn
+
+    if (page.active)
+    {
+        dc.SetFont(m_selectedFont);
+        texty = selected_texty;
+    }
+    else
+    {
+        dc.SetFont(m_normalFont);
+        texty = normal_texty;
+    }
+
+
+    // create points that will make the tab outline
+
+    int clip_width = tab_width;
+    if (tab_x + clip_width > in_rect.x + in_rect.width)
+        clip_width = (in_rect.x + in_rect.width) - tab_x;
+
+/*
+    wxPoint clip_points[6];
+    clip_points[0] = wxPoint(tab_x,              tab_y+tab_height-3);
+    clip_points[1] = wxPoint(tab_x,              tab_y+2);
+    clip_points[2] = wxPoint(tab_x+2,            tab_y);
+    clip_points[3] = wxPoint(tab_x+clip_width-1, tab_y);
+    clip_points[4] = wxPoint(tab_x+clip_width+1, tab_y+2);
+    clip_points[5] = wxPoint(tab_x+clip_width+1, tab_y+tab_height-3);
+
+    // FIXME: these ports don't provide wxRegion ctor from array of points
+#if !defined(__WXDFB__) && !defined(__WXCOCOA__)
+    // set the clipping region for the tab --
+    wxRegion clipping_region(WXSIZEOF(clip_points), clip_points);
+    dc.SetClippingRegion(clipping_region);
+#endif // !wxDFB && !wxCocoa
+*/
+    // since the above code above doesn't play well with WXDFB or WXCOCOA,
+    // we'll just use a rectangle for the clipping region for now --
+    dc.SetClippingRegion(tab_x, tab_y, clip_width+1, tab_height-3);
+
+
+    wxPoint border_points[6];
+    if (m_flags &wxAUI_NB_BOTTOM)
+    {
+        border_points[0] = wxPoint(tab_x,             tab_y);
+        border_points[1] = wxPoint(tab_x,             tab_y+tab_height-6);
+        border_points[2] = wxPoint(tab_x+2,           tab_y+tab_height-4);
+        border_points[3] = wxPoint(tab_x+tab_width-2, tab_y+tab_height-4);
+        border_points[4] = wxPoint(tab_x+tab_width,   tab_y+tab_height-6);
+        border_points[5] = wxPoint(tab_x+tab_width,   tab_y);
+    }
+    else //if (m_flags & wxAUI_NB_TOP) {}
+    {
+        border_points[0] = wxPoint(tab_x,             tab_y+tab_height-4);
+        border_points[1] = wxPoint(tab_x,             tab_y+2);
+        border_points[2] = wxPoint(tab_x+2,           tab_y);
+        border_points[3] = wxPoint(tab_x+tab_width-2, tab_y);
+        border_points[4] = wxPoint(tab_x+tab_width,   tab_y+2);
+        border_points[5] = wxPoint(tab_x+tab_width,   tab_y+tab_height-4);
+    }
+    // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
+    // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
+
+    int drawn_tab_yoff = border_points[1].y;
+    int drawn_tab_height = border_points[0].y - border_points[1].y;
+
+
+    if (page.active)
+    {
+        // draw active tab
+
+        // draw base background color
+        wxRect r(tab_x, tab_y, tab_width, tab_height);
+        dc.SetPen(wxPen(m_activeColour));
+        dc.SetBrush(wxBrush(m_activeColour));
+        dc.DrawRectangle(r.x+1, r.y+1, r.width-1, r.height-4);
+
+        // this white helps fill out the gradient at the top of the tab
+        dc.SetPen(*wxWHITE_PEN);
+        dc.SetBrush(*wxWHITE_BRUSH);
+        dc.DrawRectangle(r.x+2, r.y+1, r.width-3, r.height-4);
+
+        // these two points help the rounded corners appear more antialiased
+        dc.SetPen(wxPen(m_activeColour));
+        dc.DrawPoint(r.x+2, r.y+1);
+        dc.DrawPoint(r.x+r.width-2, r.y+1);
+
+        // set rectangle down a bit for gradient drawing
+        r.SetHeight(r.GetHeight()/2);
+        r.x += 2;
+        r.width -= 3;
+        r.y += r.height;
+        r.y -= 2;
+
+        // draw gradient background
+        wxColor top_color = *wxWHITE;
+        wxColor bottom_color = m_activeColour;
+        dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH);
+    }
+    else
+    {
+        // draw inactive tab
+
+        wxRect r(tab_x, tab_y+1, tab_width, tab_height-3);
+
+        // start the gradent up a bit and leave the inside border inset
+        // by a pixel for a 3D look.  Only the top half of the inactive
+        // tab will have a slight gradient
+        r.x += 3;
+        r.y++;
+        r.width -= 4;
+        r.height /= 2;
+        r.height--;
+
+        // -- draw top gradient fill for glossy look
+        wxColor top_color = m_baseColour;
+        wxColor bottom_color = top_color.ChangeLightness(160);
+        dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH);
+
+        r.y += r.height;
+        r.y--;
+
+        // -- draw bottom fill for glossy look
+        top_color = m_baseColour;
+        bottom_color = m_baseColour;
+        dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH);
+    }
+
+    // draw tab outline
+    dc.SetPen(m_borderPen);
+    dc.SetBrush(*wxTRANSPARENT_BRUSH);
+    dc.DrawPolygon(WXSIZEOF(border_points), border_points);
+
+    // there are two horizontal grey lines at the bottom of the tab control,
+    // this gets rid of the top one of those lines in the tab control
+    if (page.active)
+    {
+        if (m_flags &wxAUI_NB_BOTTOM)
+            dc.SetPen(wxPen(m_baseColour.ChangeLightness(170)));
+        // TODO: else if (m_flags &wxAUI_NB_LEFT) {}
+        // TODO: else if (m_flags &wxAUI_NB_RIGHT) {}
+        else //for wxAUI_NB_TOP
+            dc.SetPen(m_baseColourPen);
+        dc.DrawLine(border_points[0].x+1,
+                    border_points[0].y,
+                    border_points[5].x,
+                    border_points[5].y);
+    }
+
+
+    int text_offset = tab_x + 8;
+    int close_button_width = 0;
+    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
+    {
+        close_button_width = m_activeCloseBmp.GetWidth();
+    }
+
+    int bitmap_offset = 0;
+    if (page.bitmap.IsOk())
+    {
+        bitmap_offset = tab_x + 8;
+
+        // draw bitmap
+        dc.DrawBitmap(page.bitmap,
+                      bitmap_offset,
+                      drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2),
+                      true);
+
+        text_offset = bitmap_offset + page.bitmap.GetWidth();
+        text_offset += 3; // bitmap padding
+
+    }
+    else
+    {
+        text_offset = tab_x + 8;
+    }
+
+
+    wxString draw_text = wxAuiChopText(dc,
+                          caption,
+                          tab_width - (text_offset-tab_x) - close_button_width);
+
+    // draw tab text
+    dc.DrawText(draw_text,
+                text_offset,
+                drawn_tab_yoff + (drawn_tab_height)/2 - (texty/2) - 1);
+
+    // draw focus rectangle
+    if (page.active && (wnd->FindFocus() == wnd))
+    {
+        wxRect focusRectText(text_offset, (drawn_tab_yoff + (drawn_tab_height)/2 - (texty/2) - 1),
+            selected_textx, selected_texty);
+
+        wxRect focusRect;
+        wxRect focusRectBitmap;
+
+        if (page.bitmap.IsOk())
+            focusRectBitmap = wxRect(bitmap_offset, drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2),
+                                            page.bitmap.GetWidth(), page.bitmap.GetHeight());
+
+        if (page.bitmap.IsOk() && draw_text.IsEmpty())
+            focusRect = focusRectBitmap;
+        else if (!page.bitmap.IsOk() && !draw_text.IsEmpty())
+            focusRect = focusRectText;
+        else if (page.bitmap.IsOk() && !draw_text.IsEmpty())
+            focusRect = focusRectText.Union(focusRectBitmap);
+
+        focusRect.Inflate(2, 2);
+
+        wxRendererNative::Get().DrawFocusRect(wnd, dc, focusRect, 0);
+    }
+
+    // draw close button if necessary
+    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
+    {
+        wxBitmap bmp = m_disabledCloseBmp;
+
+        if (close_button_state == wxAUI_BUTTON_STATE_HOVER ||
+            close_button_state == wxAUI_BUTTON_STATE_PRESSED)
+        {
+            bmp = m_activeCloseBmp;
+        }
+
+        int offsetY = tab_y-1;
+        if (m_flags & wxAUI_NB_BOTTOM)
+            offsetY = 1;
+
+        wxRect rect(tab_x + tab_width - close_button_width - 1,
+                    offsetY + (tab_height/2) - (bmp.GetHeight()/2),
+                    close_button_width,
+                    tab_height);
+
+        IndentPressedBitmap(&rect, close_button_state);
+        dc.DrawBitmap(bmp, rect.x, rect.y, true);
+
+        *out_button_rect = rect;
+    }
+
+    *out_tab_rect = wxRect(tab_x, tab_y, tab_width, tab_height);
+
+    dc.DestroyClippingRegion();
+}
+
+int wxAuiGenericTabArt::GetIndentSize()
+{
+    return 5;
+}
+
+wxSize wxAuiGenericTabArt::GetTabSize(wxDC& dc,
+                                      wxWindow* WXUNUSED(wnd),
+                                      const wxString& caption,
+                                      const wxBitmap& bitmap,
+                                      bool WXUNUSED(active),
+                                      int close_button_state,
+                                      int* x_extent)
+{
+    wxCoord measured_textx, measured_texty, tmp;
+
+    dc.SetFont(m_measuringFont);
+    dc.GetTextExtent(caption, &measured_textx, &measured_texty);
+
+    dc.GetTextExtent(wxT("ABCDEFXj"), &tmp, &measured_texty);
+
+    // add padding around the text
+    wxCoord tab_width = measured_textx;
+    wxCoord tab_height = measured_texty;
+
+    // if the close button is showing, add space for it
+    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
+        tab_width += m_activeCloseBmp.GetWidth() + 3;
+
+    // if there's a bitmap, add space for it
+    if (bitmap.IsOk())
+    {
+        tab_width += bitmap.GetWidth();
+        tab_width += 3; // right side bitmap padding
+        tab_height = wxMax(tab_height, bitmap.GetHeight());
+    }
+
+    // add padding
+    tab_width += 16;
+    tab_height += 10;
+
+    if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH)
+    {
+        tab_width = m_fixedTabWidth;
+    }
+
+    *x_extent = tab_width;
+
+    return wxSize(tab_width, tab_height);
+}
+
+
+void wxAuiGenericTabArt::DrawButton(wxDC& dc,
+                                    wxWindow* WXUNUSED(wnd),
+                                    const wxRect& in_rect,
+                                    int bitmap_id,
+                                    int button_state,
+                                    int orientation,
+                                    wxRect* out_rect)
+{
+    wxBitmap bmp;
+    wxRect rect;
+
+    switch (bitmap_id)
+    {
+        case wxAUI_BUTTON_CLOSE:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledCloseBmp;
+            else
+                bmp = m_activeCloseBmp;
+            break;
+        case wxAUI_BUTTON_LEFT:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledLeftBmp;
+            else
+                bmp = m_activeLeftBmp;
+            break;
+        case wxAUI_BUTTON_RIGHT:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledRightBmp;
+            else
+                bmp = m_activeRightBmp;
+            break;
+        case wxAUI_BUTTON_WINDOWLIST:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledWindowListBmp;
+            else
+                bmp = m_activeWindowListBmp;
+            break;
+    }
+
+
+    if (!bmp.IsOk())
+        return;
+
+    rect = in_rect;
+
+    if (orientation == wxLEFT)
+    {
+        rect.SetX(in_rect.x);
+        rect.SetY(((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2));
+        rect.SetWidth(bmp.GetWidth());
+        rect.SetHeight(bmp.GetHeight());
+    }
+    else
+    {
+        rect = wxRect(in_rect.x + in_rect.width - bmp.GetWidth(),
+                      ((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2),
+                      bmp.GetWidth(), bmp.GetHeight());
+    }
+
+    IndentPressedBitmap(&rect, button_state);
+    dc.DrawBitmap(bmp, rect.x, rect.y, true);
+
+    *out_rect = rect;
+}
+
+int wxAuiGenericTabArt::ShowDropDown(wxWindow* wnd,
+                                     const wxAuiNotebookPageArray& pages,
+                                     int /*active_idx*/)
+{
+    wxMenu menuPopup;
+
+    size_t i, count = pages.GetCount();
+    for (i = 0; i < count; ++i)
+    {
+        const wxAuiNotebookPage& page = pages.Item(i);
+        wxString caption = page.caption;
+
+        // if there is no caption, make it a space.  This will prevent
+        // an assert in the menu code.
+        if (caption.IsEmpty())
+            caption = wxT(" ");
+
+        wxMenuItem* item = new wxMenuItem(NULL, 1000+i, caption);
+        if (page.bitmap.IsOk())
+            item->SetBitmap(page.bitmap);
+        menuPopup.Append(item);
+    }
+
+    // find out where to put the popup menu of window items
+    wxPoint pt = ::wxGetMousePosition();
+    pt = wnd->ScreenToClient(pt);
+
+    // find out the screen coordinate at the bottom of the tab ctrl
+    wxRect cli_rect = wnd->GetClientRect();
+    pt.y = cli_rect.y + cli_rect.height;
+
+    wxAuiCommandCapture* cc = new wxAuiCommandCapture;
+    wnd->PushEventHandler(cc);
+    wnd->PopupMenu(&menuPopup, pt);
+    int command = cc->GetCommandId();
+    wnd->PopEventHandler(true);
+
+    if (command >= 1000)
+        return command-1000;
+
+    return -1;
+}
+
+int wxAuiGenericTabArt::GetBestTabCtrlSize(wxWindow* wnd,
+                                           const wxAuiNotebookPageArray& pages,
+                                           const wxSize& requiredBmp_size)
+{
+    wxClientDC dc(wnd);
+    dc.SetFont(m_measuringFont);
+
+    // sometimes a standard bitmap size needs to be enforced, especially
+    // if some tabs have bitmaps and others don't.  This is important because
+    // it prevents the tab control from resizing when tabs are added.
+    wxBitmap measureBmp;
+    if (requiredBmp_size.IsFullySpecified())
+    {
+        measureBmp.Create(requiredBmp_size.x,
+                           requiredBmp_size.y);
+    }
+
+
+    int max_y = 0;
+    size_t i, page_count = pages.GetCount();
+    for (i = 0; i < page_count; ++i)
+    {
+        wxAuiNotebookPage& page = pages.Item(i);
+
+        wxBitmap bmp;
+        if (measureBmp.IsOk())
+            bmp = measureBmp;
+        else
+            bmp = page.bitmap;
+
+        // we don't use the caption text because we don't
+        // want tab heights to be different in the case
+        // of a very short piece of text on one tab and a very
+        // tall piece of text on another tab
+        int x_ext = 0;
+        wxSize s = GetTabSize(dc,
+                              wnd,
+                              wxT("ABCDEFGHIj"),
+                              bmp,
+                              true,
+                              wxAUI_BUTTON_STATE_HIDDEN,
+                              &x_ext);
+
+        max_y = wxMax(max_y, s.y);
+    }
+
+    return max_y+2;
+}
+
+void wxAuiGenericTabArt::SetNormalFont(const wxFont& font)
+{
+    m_normalFont = font;
+}
+
+void wxAuiGenericTabArt::SetSelectedFont(const wxFont& font)
+{
+    m_selectedFont = font;
+}
+
+void wxAuiGenericTabArt::SetMeasuringFont(const wxFont& font)
+{
+    m_measuringFont = font;
+}
+
+void wxAuiGenericTabArt::SetColour(const wxColour& colour)
+{
+    m_baseColour = colour;
+    m_borderPen = wxPen(m_baseColour.ChangeLightness(75));
+    m_baseColourPen = wxPen(m_baseColour);
+    m_baseColourBrush = wxBrush(m_baseColour);
+}
+
+void wxAuiGenericTabArt::SetActiveColour(const wxColour& colour)
+{
+    m_activeColour = colour;
+}
+
+// -- wxAuiSimpleTabArt class implementation --
+
+wxAuiSimpleTabArt::wxAuiSimpleTabArt()
+{
+    m_normalFont = *wxNORMAL_FONT;
+    m_selectedFont = *wxNORMAL_FONT;
+    m_selectedFont.SetWeight(wxBOLD);
+    m_measuringFont = m_selectedFont;
+
+    m_flags = 0;
+    m_fixedTabWidth = 100;
+
+    wxColour baseColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+
+    wxColour backgroundColour = baseColour;
+    wxColour normaltabColour = baseColour;
+    wxColour selectedtabColour = *wxWHITE;
+
+    m_bkBrush = wxBrush(backgroundColour);
+    m_normalBkBrush = wxBrush(normaltabColour);
+    m_normalBkPen = wxPen(normaltabColour);
+    m_selectedBkBrush = wxBrush(selectedtabColour);
+    m_selectedBkPen = wxPen(selectedtabColour);
+
+    m_activeCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK);
+    m_disabledCloseBmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128));
+
+    m_activeLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK);
+    m_disabledLeftBmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128));
+
+    m_activeRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK);
+    m_disabledRightBmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128));
+
+    m_activeWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK);
+    m_disabledWindowListBmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128));
+
+}
+
+wxAuiSimpleTabArt::~wxAuiSimpleTabArt()
+{
+}
+
+wxAuiTabArt* wxAuiSimpleTabArt::Clone()
+{
+    return new wxAuiSimpleTabArt(*this);
+}
+
+void wxAuiSimpleTabArt::SetFlags(unsigned int flags)
+{
+    m_flags = flags;
+}
+
+void wxAuiSimpleTabArt::SetSizingInfo(const wxSize& tab_ctrl_size,
+                                      size_t tab_count)
+{
+    m_fixedTabWidth = 100;
+
+    int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4;
+
+    if (m_flags & wxAUI_NB_CLOSE_BUTTON)
+        tot_width -= m_activeCloseBmp.GetWidth();
+    if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON)
+        tot_width -= m_activeWindowListBmp.GetWidth();
+
+    if (tab_count > 0)
+    {
+        m_fixedTabWidth = tot_width/(int)tab_count;
+    }
+
+
+    if (m_fixedTabWidth < 100)
+        m_fixedTabWidth = 100;
+
+    if (m_fixedTabWidth > tot_width/2)
+        m_fixedTabWidth = tot_width/2;
+
+    if (m_fixedTabWidth > 220)
+        m_fixedTabWidth = 220;
+}
+
+void wxAuiSimpleTabArt::SetColour(const wxColour& colour)
+{
+    m_bkBrush = wxBrush(colour);
+    m_normalBkBrush = wxBrush(colour);
+    m_normalBkPen = wxPen(colour);
+}
+
+void wxAuiSimpleTabArt::SetActiveColour(const wxColour& colour)
+{
+    m_selectedBkBrush = wxBrush(colour);
+    m_selectedBkPen = wxPen(colour);
+}
+
+void wxAuiSimpleTabArt::DrawBackground(wxDC& dc,
+                                       wxWindow* WXUNUSED(wnd),
+                                       const wxRect& rect)
+{
+    // draw background
+    dc.SetBrush(m_bkBrush);
+    dc.SetPen(*wxTRANSPARENT_PEN);
+    dc.DrawRectangle(-1, -1, rect.GetWidth()+2, rect.GetHeight()+2);
+
+    // draw base line
+    dc.SetPen(*wxGREY_PEN);
+    dc.DrawLine(0, rect.GetHeight()-1, rect.GetWidth(), rect.GetHeight()-1);
+}
+
+
+// DrawTab() draws an individual tab.
+//
+// dc       - output dc
+// in_rect  - rectangle the tab should be confined to
+// caption  - tab's caption
+// active   - whether or not the tab is active
+// out_rect - actual output rectangle
+// x_extent - the advance x; where the next tab should start
+
+void wxAuiSimpleTabArt::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)
+{
+    wxCoord normal_textx, normal_texty;
+    wxCoord selected_textx, selected_texty;
+    wxCoord textx, texty;
+
+    // if the caption is empty, measure some temporary text
+    wxString caption = page.caption;
+    if (caption.empty())
+        caption = wxT("Xj");
+
+    dc.SetFont(m_selectedFont);
+    dc.GetTextExtent(caption, &selected_textx, &selected_texty);
+
+    dc.SetFont(m_normalFont);
+    dc.GetTextExtent(caption, &normal_textx, &normal_texty);
+
+    // figure out the size of the tab
+    wxSize tab_size = GetTabSize(dc,
+                                 wnd,
+                                 page.caption,
+                                 page.bitmap,
+                                 page.active,
+                                 close_button_state,
+                                 x_extent);
+
+    wxCoord tab_height = tab_size.y;
+    wxCoord tab_width = tab_size.x;
+    wxCoord tab_x = in_rect.x;
+    wxCoord tab_y = in_rect.y + in_rect.height - tab_height;
+
+    caption = page.caption;
+
+    // select pen, brush and font for the tab to be drawn
+
+    if (page.active)
+    {
+        dc.SetPen(m_selectedBkPen);
+        dc.SetBrush(m_selectedBkBrush);
+        dc.SetFont(m_selectedFont);
+        textx = selected_textx;
+        texty = selected_texty;
+    }
+    else
+    {
+        dc.SetPen(m_normalBkPen);
+        dc.SetBrush(m_normalBkBrush);
+        dc.SetFont(m_normalFont);
+        textx = normal_textx;
+        texty = normal_texty;
+    }
+
+
+    // -- draw line --
+
+    wxPoint points[7];
+    points[0].x = tab_x;
+    points[0].y = tab_y + tab_height - 1;
+    points[1].x = tab_x + tab_height - 3;
+    points[1].y = tab_y + 2;
+    points[2].x = tab_x + tab_height + 3;
+    points[2].y = tab_y;
+    points[3].x = tab_x + tab_width - 2;
+    points[3].y = tab_y;
+    points[4].x = tab_x + tab_width;
+    points[4].y = tab_y + 2;
+    points[5].x = tab_x + tab_width;
+    points[5].y = tab_y + tab_height - 1;
+    points[6] = points[0];
+
+    dc.SetClippingRegion(in_rect);
+
+    dc.DrawPolygon(WXSIZEOF(points) - 1, points);
+
+    dc.SetPen(*wxGREY_PEN);
+
+    //dc.DrawLines(active ? WXSIZEOF(points) - 1 : WXSIZEOF(points), points);
+    dc.DrawLines(WXSIZEOF(points), points);
+
+
+    int text_offset;
+
+    int close_button_width = 0;
+    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
+    {
+        close_button_width = m_activeCloseBmp.GetWidth();
+        text_offset = tab_x + (tab_height/2) + ((tab_width-close_button_width)/2) - (textx/2);
+    }
+    else
+    {
+        text_offset = tab_x + (tab_height/3) + (tab_width/2) - (textx/2);
+    }
+
+    // set minimum text offset
+    if (text_offset < tab_x + tab_height)
+        text_offset = tab_x + tab_height;
+
+    // chop text if necessary
+    wxString draw_text = wxAuiChopText(dc,
+                          caption,
+                          tab_width - (text_offset-tab_x) - close_button_width);
+
+    // draw tab text
+    dc.DrawText(draw_text,
+                 text_offset,
+                 (tab_y + tab_height)/2 - (texty/2) + 1);
+
+
+    // draw focus rectangle
+    if (page.active && (wnd->FindFocus() == wnd))
+    {
+        wxRect focusRect(text_offset, ((tab_y + tab_height)/2 - (texty/2) + 1),
+            selected_textx, selected_texty);
+
+        focusRect.Inflate(2, 2);
+
+        wxRendererNative::Get().DrawFocusRect(wnd, dc, focusRect, 0);
+    }
+
+    // draw close button if necessary
+    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
+    {
+        wxBitmap bmp;
+        if (page.active)
+            bmp = m_activeCloseBmp;
+        else
+            bmp = m_disabledCloseBmp;
+
+        wxRect rect(tab_x + tab_width - close_button_width - 1,
+                    tab_y + (tab_height/2) - (bmp.GetHeight()/2) + 1,
+                    close_button_width,
+                    tab_height - 1);
+        DrawButtons(dc, rect, bmp, *wxWHITE, close_button_state);
+
+        *out_button_rect = rect;
+    }
+
+
+    *out_tab_rect = wxRect(tab_x, tab_y, tab_width, tab_height);
+
+    dc.DestroyClippingRegion();
+}
+
+int wxAuiSimpleTabArt::GetIndentSize()
+{
+    return 0;
+}
+
+wxSize wxAuiSimpleTabArt::GetTabSize(wxDC& dc,
+                                     wxWindow* WXUNUSED(wnd),
+                                     const wxString& caption,
+                                     const wxBitmap& WXUNUSED(bitmap),
+                                     bool WXUNUSED(active),
+                                     int close_button_state,
+                                     int* x_extent)
+{
+    wxCoord measured_textx, measured_texty;
+
+    dc.SetFont(m_measuringFont);
+    dc.GetTextExtent(caption, &measured_textx, &measured_texty);
+
+    wxCoord tab_height = measured_texty + 4;
+    wxCoord tab_width = measured_textx + tab_height + 5;
+
+    if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
+        tab_width += m_activeCloseBmp.GetWidth();
+
+    if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH)
+    {
+        tab_width = m_fixedTabWidth;
+    }
+
+    *x_extent = tab_width - (tab_height/2) - 1;
+
+    return wxSize(tab_width, tab_height);
+}
+
+
+void wxAuiSimpleTabArt::DrawButton(wxDC& dc,
+                                   wxWindow* WXUNUSED(wnd),
+                                   const wxRect& in_rect,
+                                   int bitmap_id,
+                                   int button_state,
+                                   int orientation,
+                                   wxRect* out_rect)
+{
+    wxBitmap bmp;
+    wxRect rect;
+
+    switch (bitmap_id)
+    {
+        case wxAUI_BUTTON_CLOSE:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledCloseBmp;
+            else
+                bmp = m_activeCloseBmp;
+            break;
+        case wxAUI_BUTTON_LEFT:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledLeftBmp;
+            else
+                bmp = m_activeLeftBmp;
+            break;
+        case wxAUI_BUTTON_RIGHT:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledRightBmp;
+            else
+                bmp = m_activeRightBmp;
+            break;
+        case wxAUI_BUTTON_WINDOWLIST:
+            if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+                bmp = m_disabledWindowListBmp;
+            else
+                bmp = m_activeWindowListBmp;
+            break;
+    }
+
+    if (!bmp.IsOk())
+        return;
+
+    rect = in_rect;
+
+    if (orientation == wxLEFT)
+    {
+        rect.SetX(in_rect.x);
+        rect.SetY(((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2));
+        rect.SetWidth(bmp.GetWidth());
+        rect.SetHeight(bmp.GetHeight());
+    }
+    else
+    {
+        rect = wxRect(in_rect.x + in_rect.width - bmp.GetWidth(),
+                      ((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2),
+                      bmp.GetWidth(), bmp.GetHeight());
+    }
+
+
+    DrawButtons(dc, rect, bmp, *wxWHITE, button_state);
+
+    *out_rect = rect;
+}
+
+int wxAuiSimpleTabArt::ShowDropDown(wxWindow* wnd,
+                                    const wxAuiNotebookPageArray& pages,
+                                    int active_idx)
+{
+    wxMenu menuPopup;
+
+    size_t i, count = pages.GetCount();
+    for (i = 0; i < count; ++i)
+    {
+        const wxAuiNotebookPage& page = pages.Item(i);
+        menuPopup.AppendCheckItem(1000+i, page.caption);
+    }
+
+    if (active_idx != -1)
+    {
+        menuPopup.Check(1000+active_idx, true);
+    }
+
+    // find out where to put the popup menu of window
+    // items.  Subtract 100 for now to center the menu
+    // a bit, until a better mechanism can be implemented
+    wxPoint pt = ::wxGetMousePosition();
+    pt = wnd->ScreenToClient(pt);
+    if (pt.x < 100)
+        pt.x = 0;
+    else
+        pt.x -= 100;
+
+    // find out the screen coordinate at the bottom of the tab ctrl
+    wxRect cli_rect = wnd->GetClientRect();
+    pt.y = cli_rect.y + cli_rect.height;
+
+    wxAuiCommandCapture* cc = new wxAuiCommandCapture;
+    wnd->PushEventHandler(cc);
+    wnd->PopupMenu(&menuPopup, pt);
+    int command = cc->GetCommandId();
+    wnd->PopEventHandler(true);
+
+    if (command >= 1000)
+        return command-1000;
+
+    return -1;
+}
+
+int wxAuiSimpleTabArt::GetBestTabCtrlSize(wxWindow* wnd,
+                                          const wxAuiNotebookPageArray& WXUNUSED(pages),
+                                          const wxSize& WXUNUSED(requiredBmp_size))
+{
+    wxClientDC dc(wnd);
+    dc.SetFont(m_measuringFont);
+    int x_ext = 0;
+    wxSize s = GetTabSize(dc,
+                          wnd,
+                          wxT("ABCDEFGHIj"),
+                          wxNullBitmap,
+                          true,
+                          wxAUI_BUTTON_STATE_HIDDEN,
+                          &x_ext);
+    return s.y+3;
+}
+
+void wxAuiSimpleTabArt::SetNormalFont(const wxFont& font)
+{
+    m_normalFont = font;
+}
+
+void wxAuiSimpleTabArt::SetSelectedFont(const wxFont& font)
+{
+    m_selectedFont = font;
+}
+
+void wxAuiSimpleTabArt::SetMeasuringFont(const wxFont& font)
+{
+    m_measuringFont = font;
+}
+
+#endif // wxUSE_AUI