Merge branch 'master' into sam460ex
This commit is contained in:
@@ -23,9 +23,9 @@ if [ IsOptionalHaikuImagePackageAdded OpenSSL ] {
|
||||
}
|
||||
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-x86-gcc4-2012-06-19.zip ;
|
||||
HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-r1a4-x86-gcc4-2012-08-29.zip ;
|
||||
} else {
|
||||
HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-x86-gcc2-2012-06-19.zip ;
|
||||
HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-r1a4-x86-gcc2-2012-08-26.zip ;
|
||||
}
|
||||
|
||||
HAIKU_OPENSSL_URL = $(baseURL)/$(HAIKU_OPENSSL_PACKAGE) ;
|
||||
@@ -382,7 +382,7 @@ if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 {
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
HAIKU_FREETYPE_FILE = freetype-2.4.9-x86-gcc4-2012-06-15.zip ;
|
||||
} else {
|
||||
HAIKU_FREETYPE_FILE = freetype-2.4.9-x86-gcc2-2012-06-19.zip ;
|
||||
HAIKU_FREETYPE_FILE = freetype-2.4.9-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
|
||||
local freetypeZipFile = [ DownloadFile $(HAIKU_FREETYPE_FILE)
|
||||
@@ -467,7 +467,7 @@ if [ IsOptionalHaikuImagePackageAdded WebPositive ] {
|
||||
HAIKU_BUILD_FEATURE_WEBKIT = 1 ;
|
||||
}
|
||||
|
||||
HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-07-20-1.zip ;
|
||||
HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-08-31a.zip ;
|
||||
|
||||
if $(HAIKU_BUILD_FEATURE_WEBKIT) {
|
||||
if $(TARGET_ARCH) != x86 {
|
||||
@@ -535,7 +535,7 @@ if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 {
|
||||
: extracted-libpng ] ;
|
||||
Depends $(HAIKU_LIBPNG_LIB) $(HAIKU_LIBPNG_CURRENT_LIB) : $(HAIKU_LIBPNG_HEADERS_DEPENDENCY) ;
|
||||
|
||||
HAIKU_LIBPNG_CURRENT_LINK = libpng.so.15 ;
|
||||
HAIKU_LIBPNG_CURRENT_LINK = libpng15.so.15 ;
|
||||
|
||||
HAIKU_LIBPNG_HEADERS = [ FDirName $(HAIKU_LIBPNG_DIR) common include ] ;
|
||||
} else {
|
||||
|
||||
+204
-203
@@ -28,7 +28,7 @@ if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
|
||||
# Bluetooth - experimental Haiku components for Bluetooth
|
||||
# BurnItNow - CD burning app
|
||||
# Bzip - file archiving utility
|
||||
# Caya - a multiprotocol im client
|
||||
# Caya - a multiprotocol im client
|
||||
# CCache - fast compiler cache
|
||||
# CDRecord - the command line CD writing tools
|
||||
# Clang - the LLVM C and C++ compiler (llvm, libs, headers)
|
||||
@@ -126,13 +126,13 @@ if [ IsOptionalHaikuImagePackageAdded APR ] {
|
||||
Echo "No optional package APR available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
apr-1.4.6-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/apr-1.4.6-x86-gcc4-2012-06-19.zip
|
||||
apr-1.4.6-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/apr-1.4.6-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
apr-1.4.6-x86-gcc2-2012-06-19.zip
|
||||
: $(baseURL)/apr-1.4.6-x86-gcc2-2012-06-19.zip
|
||||
apr-1.4.6-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/apr-1.4.6-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -144,13 +144,13 @@ if [ IsOptionalHaikuImagePackageAdded APR-util ] {
|
||||
Echo "No optional package APR-util available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
apr-util-1.4.1-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/apr-util-1.4.1-x86-gcc4-2012-06-19.zip
|
||||
apr-util-1.4.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/apr-util-1.4.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
apr-util-1.4.1-x86-gcc2-2012-06-19.zip
|
||||
: $(baseURL)/apr-util-1.4.1-x86-gcc2-2012-06-19.zip
|
||||
apr-util-1.4.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/apr-util-1.4.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -164,8 +164,8 @@ if [ IsOptionalHaikuImagePackageAdded ArmyKnife ] {
|
||||
Echo "No optional package ArmyKnife for gcc4" ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
armyknife-63-r1a3-x86-gcc2-2011-06-04.zip
|
||||
: $(baseURL)/armyknife-63-r1a3-x86-gcc2-2011-06-04.zip ;
|
||||
armyknife-63-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/armyknife-63-r1a4-x86-gcc2-2012-08-30.zip ;
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/ArmyKnife/ArmyKnife ;
|
||||
}
|
||||
@@ -177,11 +177,11 @@ if [ IsOptionalHaikuImagePackageAdded Bazaar ] {
|
||||
if $(TARGET_ARCH) != x86 {
|
||||
Echo "No optional package Bazaar available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage bzr-2.5.1-x86-gcc4-2012-06-22.zip
|
||||
: $(baseURL)/bzr-2.5.1-x86-gcc4-2012-06-22.zip ;
|
||||
InstallOptionalHaikuImagePackage bzr-2.6b1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/bzr-2.6b1-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage bzr-2.5.1-x86-gcc2-2012-06-22.zip
|
||||
: $(baseURL)/bzr-2.5.1-x86-gcc2-2012-06-22.zip ;
|
||||
InstallOptionalHaikuImagePackage bzr-2.5.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/bzr-2.5.1-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,12 +193,12 @@ if [ IsOptionalHaikuImagePackageAdded BeAE ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
beae-22-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/beae-22-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
beae-22-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/beae-22-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
beae-22-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/beae-22-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
beae-22-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/beae-22-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/BeAE/BeAE ;
|
||||
@@ -217,8 +217,8 @@ if [ IsOptionalHaikuImagePackageAdded Beam ] {
|
||||
: $(baseURL)/beam-1.2alpha-x86-gcc4-2012-08-11.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
Beam-1.2alpha-x86-gcc2-2012-06-04.zip
|
||||
: $(baseURL)/Beam-1.2alpha-x86-gcc2-2012-06-04.zip ;
|
||||
beam-1.2alpha-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/beam-1.2alpha-r1a4-x86-gcc2-2012-08-29.zip ;
|
||||
}
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/Beam/Beam ;
|
||||
@@ -280,8 +280,8 @@ if [ IsOptionalHaikuImagePackageAdded BePDF ] {
|
||||
: $(baseURL)/bepdf-1.1.1b4-x86-gcc4-2012-08-11.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
bepdf-1.1.1b4-r1a3-x86-gcc2-2011-05-30.zip
|
||||
: $(baseURL)/bepdf-1.1.1b4-r1a3-x86-gcc2-2011-05-30.zip ;
|
||||
bepdf-1.1.1b4-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/bepdf-1.1.1b4-r1a4-x86-gcc2-2012-08-30.zip ;
|
||||
}
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/BePDF/BePDF ;
|
||||
@@ -338,12 +338,12 @@ if [ IsOptionalHaikuImagePackageAdded BurnItNow ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
burnitnow-39-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/burnitnow-39-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
burnitnow-39-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/burnitnow-39-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
burnitnow-39-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/burnitnow-39-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
burnitnow-39-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/burnitnow-39-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/BurnItNow/BurnItNow ;
|
||||
@@ -357,13 +357,13 @@ if [ IsOptionalHaikuImagePackageAdded Bzip ] {
|
||||
Echo "No optional package Bzip available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
bzip2-1.0.6-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/bzip2-1.0.6-r1a3-x86-gcc4-2011-05-24.zip
|
||||
bzip2-1.0.6-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/bzip2-1.0.6-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
bzip2-1.0.6-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/bzip2-1.0.6-r1a3-x86-gcc2-2011-05-17.zip
|
||||
bzip2-1.0.6-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/bzip2-1.0.6-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -405,12 +405,12 @@ if [ IsOptionalHaikuImagePackageAdded CCache ] {
|
||||
Echo "No optional package CCache available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
ccache-3.0.1-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/ccache-3.0.1-r1a3-x86-gcc4-2011-05-23.zip ;
|
||||
ccache-3.0.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/ccache-3.0.1-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
ccache-3.0.1-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/ccache-3.0.1-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
ccache-3.0.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/ccache-3.0.1-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -421,12 +421,12 @@ if [ IsOptionalHaikuImagePackageAdded CDRecord ] {
|
||||
Echo "No optional package CDRecord available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
cdrtools-3.01a07-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/cdrtools-3.01a07-x86-gcc4-2012-07-19.zip ;
|
||||
cdrtools-3.01a07-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/cdrtools-3.01a07-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
cdrtools-3.01a07-x86-gcc2-2012-07-19-r2.zip
|
||||
: $(baseURL)/cdrtools-3.01a07-x86-gcc2-2012-07-19-r2.zip ;
|
||||
cdrtools-3.01a07-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/cdrtools-3.01a07-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -487,13 +487,13 @@ if [ IsOptionalHaikuImagePackageAdded CMake ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
cmake-2.8.5-x86-gcc4-2012-07-18.zip
|
||||
: $(baseURL)/cmake-2.8.5-x86-gcc4-2012-07-18.zip
|
||||
cmake-2.8.5-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/cmake-2.8.5-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
cmake-2.8.5-x86-gcc2-2012-07-16.zip
|
||||
: $(baseURL)/cmake-2.8.5-x86-gcc2-2012-07-16.zip
|
||||
cmake-2.8.5-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/cmake-2.8.5-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -545,11 +545,11 @@ if [ IsOptionalHaikuImagePackageAdded Curl ] {
|
||||
if $(TARGET_ARCH) != x86 {
|
||||
Echo "No optional package Curl available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage curl-7.26.0-x86-gcc4-2012-06-20.zip
|
||||
: $(baseURL)/curl-7.26.0-x86-gcc4-2012-06-20.zip ;
|
||||
InstallOptionalHaikuImagePackage curl-7.26.0-r1a4-x86-gcc4-2012-08-29.zip
|
||||
: $(baseURL)/curl-7.26.0-r1a4-x86-gcc4-2012-08-29.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage curl-7.26.0-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/curl-7.26.0-x86-gcc2-2012-06-21.zip ;
|
||||
InstallOptionalHaikuImagePackage curl-7.26.0-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/curl-7.26.0-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,13 +561,13 @@ if [ IsOptionalHaikuImagePackageAdded CVS ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
cvs-1.12.13.1-x86-gcc4-2012-06-22.zip
|
||||
: $(baseURL)/cvs-1.12.13.1-x86-gcc4-2012-06-22.zip
|
||||
cvs-1.12.13.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/cvs-1.12.13.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
cvs-1.12.13.1-x86-gcc2-2012-06-20.zip
|
||||
: $(baseURL)/cvs-1.12.13.1-x86-gcc2-2012-06-20.zip
|
||||
cvs-1.12.13.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/cvs-1.12.13.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -614,37 +614,37 @@ if [ IsOptionalHaikuImagePackageAdded Development ] && $(TARGET_ARCH) = x86 {
|
||||
# autotools
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
autoconf-2.68-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/autoconf-2.68-r1a3-x86-gcc4-2011-05-23.zip
|
||||
autoconf-2.68-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/autoconf-2.68-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: : true ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
automake-1.11.1-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/automake-1.11.1-r1a3-x86-gcc4-2011-05-23.zip
|
||||
automake-1.11.1-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/automake-1.11.1-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: : true ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
libtool-2.4-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/libtool-2.4-r1a3-x86-gcc4-2011-05-23.zip
|
||||
libtool-2.4-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/libtool-2.4-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: : true ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
texinfo-4.13a-x86-gcc4-2012-03-31.zip
|
||||
: $(baseURL)/texinfo-4.13a-x86-gcc4-2012-03-31.zip
|
||||
texinfo-4.13a-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/texinfo-4.13a-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
autoconf-2.68-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/autoconf-2.68-r1a3-x86-gcc2-2011-05-17.zip
|
||||
autoconf-2.68-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/autoconf-2.68-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: : true ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
automake-1.11.1-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/automake-1.11.1-r1a3-x86-gcc2-2011-05-17.zip
|
||||
automake-1.11.1-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/automake-1.11.1-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: : true ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
libtool-2.4-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/libtool-2.4-r1a3-x86-gcc2-2011-05-17.zip
|
||||
libtool-2.4-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/libtool-2.4-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: : true ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
texinfo-4.13a-x86-gcc2-2012-03-31.zip
|
||||
: $(baseURL)/texinfo-4.13a-x86-gcc2-2012-03-31.zip
|
||||
texinfo-4.13a-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/texinfo-4.13a-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -690,42 +690,42 @@ if [ IsOptionalHaikuImagePackageAdded DevelopmentBase ]
|
||||
# other commonly used tools
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
bison-2.4.3-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/bison-2.4.3-r1a3-x86-gcc4-2011-05-23.zip ;
|
||||
bison-2.4.3-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/bison-2.4.3-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
m4-1.4.16-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/m4-1.4.16-r1a3-x86-gcc4-2011-05-23.zip ;
|
||||
m4-1.4.16-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/m4-1.4.16-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
flex-2.5.35-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/flex-2.5.35-r1a3-x86-gcc4-2011-05-23.zip ;
|
||||
flex-2.5.35-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/flex-2.5.35-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
jam-2.5-x86-gcc4-2011-12-26.zip
|
||||
: $(baseURL)/jam-2.5-x86-gcc4-2011-12-26.zip ;
|
||||
jam-2.5-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/jam-2.5-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
mkdepend-1.7-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/mkdepend-1.7-r1a3-x86-gcc4-2011-05-23.zip ;
|
||||
mkdepend-1.7-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/mkdepend-1.7-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
make-3.82-r1a3-x86-gcc4-2011-05-23.zip
|
||||
: $(baseURL)/make-3.82-r1a3-x86-gcc4-2011-05-23.zip ;
|
||||
make-3.82-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/make-3.82-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
bison-2.4.3-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/bison-2.4.3-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
bison-2.4.3-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/bison-2.4.3-r1a4-x86-gcc2-2012-08-26.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
m4-1.4.16-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/m4-1.4.16-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
m4-1.4.16-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/m4-1.4.16-r1a4-x86-gcc2-2012-08-26.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
flex-2.5.35-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/flex-2.5.35-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
flex-2.5.35-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/flex-2.5.35-r1a4-x86-gcc2-2012-08-26.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
jam-2.5-x86-gcc2-2011-12-26.zip
|
||||
: $(baseURL)/jam-2.5-x86-gcc2-2011-12-26.zip ;
|
||||
jam-2.5-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/jam-2.5-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
mkdepend-1.7-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/mkdepend-1.7-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
mkdepend-1.7-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/mkdepend-1.7-r1a4-x86-gcc2-2012-08-26.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
make-3.82-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/make-3.82-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
make-3.82-r1a4-x86-gcc2-2012-08-26.zip
|
||||
: $(baseURL)/make-3.82-r1a4-x86-gcc2-2012-08-26.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -918,13 +918,13 @@ if [ IsOptionalHaikuImagePackageAdded Expat ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
expat-2.0.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/expat-2.0.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
expat-2.0.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/expat-2.0.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
expat-2.0.1-x86-gcc2-2012-06-20.zip
|
||||
: $(baseURL)/expat-2.0.1-x86-gcc2-2012-06-20.zip
|
||||
expat-2.0.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/expat-2.0.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -937,12 +937,12 @@ if [ IsOptionalHaikuImagePackageAdded Fastdep ] {
|
||||
Echo "No optional package Fastdep available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
fastdep-0.16-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/fastdep-0.16-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
fastdep-0.16-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/fastdep-0.16-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
fastdep-0.16-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/fastdep-0.16-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
fastdep-0.16-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/fastdep-0.16-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -958,8 +958,8 @@ if [ IsOptionalHaikuImagePackageAdded friss ] {
|
||||
: $(baseURL)/friss-24-r1a3-x86-gcc4-2011-05-31.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
friss-24-r1a3-x86-gcc2-2011-05-31.zip
|
||||
: $(baseURL)/friss-24-r1a3-x86-gcc2-2011-05-31.zip ;
|
||||
friss-29-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/friss-29-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
# AddSymlinkToHaikuImage home config settings deskbar Desktop\ applets
|
||||
# : /boot/apps/FRiSS/FRiSS ;
|
||||
@@ -974,13 +974,13 @@ if [ IsOptionalHaikuImagePackageAdded GetText ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
gettext-0.18.1.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/gettext-0.18.1.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
gettext-0.18.1.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/gettext-0.18.1.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
gettext-0.18.1.1-x86-gcc2-2011-02-07.zip
|
||||
: $(baseURL)/gettext-0.18.1.1-x86-gcc2-2011-02-07.zip
|
||||
gettext-0.18.1.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/gettext-0.18.1.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -994,13 +994,13 @@ if [ IsOptionalHaikuImagePackageAdded Git ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
git-1.7.10.2-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/git-1.7.10.2-x86-gcc4-2012-06-19.zip
|
||||
git-1.7.10.2-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/git-1.7.10.2-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
git-1.7.10.2-x86-gcc2-2012-06-20.zip
|
||||
: $(baseURL)/git-1.7.10.2-x86-gcc2-2012-06-20.zip
|
||||
git-1.7.10.2-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/git-1.7.10.2-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1019,8 +1019,8 @@ if [ IsOptionalHaikuImagePackageAdded GitDoc ] {
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
gitdoc-1.7.10.2-x86-gcc2-2012-06-20.zip
|
||||
: $(baseURL)/gitdoc-1.7.10.2-x86-gcc2-2012-06-20.zip
|
||||
gitdoc-1.7.10.2-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/gitdoc-1.7.10.2-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1034,13 +1034,13 @@ if [ IsOptionalHaikuImagePackageAdded GPerf ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
gperf-3.0.4-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/gperf-3.0.4-r1a3-x86-gcc4-2011-05-24.zip
|
||||
gperf-3.0.4-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/gperf-3.0.4-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
gperf-3.0.4-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/gperf-3.0.4-r1a3-x86-gcc2-2011-05-18.zip
|
||||
gperf-3.0.4-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/gperf-3.0.4-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1054,13 +1054,13 @@ if [ IsOptionalHaikuImagePackageAdded Groff ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
groff-1.20.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/groff-1.20.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
groff-1.20.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/groff-1.20.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
groff-1.20.1-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/groff-1.20.1-r1a3-x86-gcc2-2011-05-18.zip
|
||||
groff-1.20.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/groff-1.20.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1173,13 +1173,13 @@ if [ IsOptionalHaikuImagePackageAdded LibEvent ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libevent-2.0.10-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/lib/libevent-2.0.10-r1a3-x86-gcc4-2011-05-24.zip
|
||||
libevent-2.0.10-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/lib/libevent-2.0.10-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libevent-2.0.10-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/lib/libevent-2.0.10-r1a3-x86-gcc2-2011-05-18.zip
|
||||
libevent-2.0.10-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/lib/libevent-2.0.10-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1193,12 +1193,12 @@ if [ IsOptionalHaikuImagePackageAdded LibIconv ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libiconv-1.13.1-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/libiconv-1.13.1-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
libiconv-1.13.1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/libiconv-1.13.1-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libiconv-1.13.1-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/libiconv-1.13.1-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
libiconv-1.13.1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/libiconv-1.13.1-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1209,11 +1209,11 @@ if [ IsOptionalHaikuImagePackageAdded LibLayout ] {
|
||||
if $(TARGET_ARCH) != x86 {
|
||||
Echo "No optional package LibLayout available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage liblayout-1.4.1-gcc4-2012-08-11.zip
|
||||
: $(baseURL)/liblayout-1.4.1-gcc4-2012-08-11.zip ;
|
||||
InstallOptionalHaikuImagePackage liblayout-1.4.1-r1a4-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/liblayout-1.4.1-r1a4-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage liblayout-1.4.0-gcc2-2009-03-08.zip
|
||||
: $(baseURL)/liblayout-1.4.0-gcc2-2009-03-08.zip ;
|
||||
InstallOptionalHaikuImagePackage liblayout-1.4.1-r1a4-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/liblayout-1.4.1-r1a4-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1228,8 +1228,8 @@ if [ IsOptionalHaikuImagePackageAdded Libmng ] {
|
||||
: $(baseURL)/lib/libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libmng-1.0.10-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/lib/libmng-1.0.10-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1241,12 +1241,12 @@ if [ IsOptionalHaikuImagePackageAdded LibXML2 ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libxml2-2.8.0-x86-gcc4-2012-07-18.zip
|
||||
: $(baseURL)/libxml2-2.8.0-x86-gcc4-2012-07-18.zip ;
|
||||
libxml2-2.8.0-r1a4-x86-gcc4-2012-08-28.zip
|
||||
: $(baseURL)/libxml2-2.8.0-r1a4-x86-gcc4-2012-08-28.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libxml2-2.8.0-x86-gcc2-2012-07-17.zip
|
||||
: $(baseURL)/libxml2-2.8.0-x86-gcc2-2012-07-17.zip ;
|
||||
libxml2-2.8.0-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/libxml2-2.8.0-r1a4-x86-gcc2-2012-08-30.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1258,12 +1258,12 @@ if [ IsOptionalHaikuImagePackageAdded LibXSLT ] {
|
||||
Echo "No optional package LibXSLT available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libxslt-1.1.26-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/libxslt-1.1.26-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
libxslt-1.1.26-r1a4-x86-gcc4-2012-08-29.zip
|
||||
: $(baseURL)/libxslt-1.1.26-r1a4-x86-gcc4-2012-08-29.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libxslt-1.1.26-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/libxslt-1.1.26-r1a3-x86-gcc2-2011-05-18.zip
|
||||
libxslt-1.1.26-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/libxslt-1.1.26-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1276,8 +1276,9 @@ if [ IsOptionalHaikuImagePackageAdded Links ] {
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 && ! $(isHybridBuild) {
|
||||
Echo "No optional package Links available for gcc4" ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage Links.zip
|
||||
: $(baseURL)/links-x86-gcc2-2008-05-03.zip ;
|
||||
InstallOptionalHaikuImagePackage
|
||||
links-2.3pre2-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/links-2.3pre2-r1a4-x86-gcc2-2012-08-30.zip ;
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/home/config/bin/links ;
|
||||
}
|
||||
@@ -1296,8 +1297,8 @@ if [ IsOptionalHaikuImagePackageAdded Lua ] {
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
lua-5.1.4-3-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/lua-5.1.4-3-r1a3-x86-gcc2-2011-05-18.zip
|
||||
lua-5.1.4-3-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/lua-5.1.4-3-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1310,12 +1311,12 @@ if [ IsOptionalHaikuImagePackageAdded Man ] {
|
||||
Echo "No optional package Man available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
man-1.6g-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/man-1.6g-x86-gcc4-2012-06-19.zip ;
|
||||
man-1.6g-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/man-1.6g-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
man-1.6g-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/man-1.6g-x86-gcc2-2012-06-21.zip ;
|
||||
man-1.6g-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/man-1.6g-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1333,13 +1334,13 @@ if [ IsOptionalHaikuImagePackageAdded Mercurial ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
mercurial-2.2.2-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/mercurial-2.2.2-x86-gcc4-2012-06-19.zip
|
||||
mercurial-2.2.2-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/mercurial-2.2.2-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
mercurial-2.2.2-x86-gcc2-2012-06-20.zip
|
||||
: $(baseURL)/mercurial-2.2.2-x86-gcc2-2012-06-20.zip
|
||||
mercurial-2.2.2-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/mercurial-2.2.2-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1353,12 +1354,12 @@ if [ IsOptionalHaikuImagePackageAdded Nano ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
nano-2.2.6-r1a3-x86-gcc4-2011-05-24.zip
|
||||
: $(baseURL)/nano-2.2.6-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
nano-2.2.6-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/nano-2.2.6-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
nano-2.2.6-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/nano-2.2.6-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
nano-2.2.6-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/nano-2.2.6-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1371,12 +1372,12 @@ if [ IsOptionalHaikuImagePackageAdded Neon ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
neon-0.29.6-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/neon-0.29.6-x86-gcc4-2012-06-19.zip ;
|
||||
neon-0.29.6-r1a4-x86-gcc4-2012-08-29.zip
|
||||
: $(baseURL)/neon-0.29.6-r1a4-x86-gcc4-2012-08-29.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
neon-0.29.6-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/neon-0.29.6-x86-gcc2-2012-06-21.zip ;
|
||||
neon-0.29.6-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/neon-0.29.6-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1468,12 +1469,12 @@ if [ IsOptionalHaikuImagePackageAdded OpenSSH ] {
|
||||
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
openssh-6.0p1-x86-gcc4-2012-06-20.zip
|
||||
: $(baseURL)/openssh-6.0p1-x86-gcc4-2012-06-20.zip ;
|
||||
openssh-6.0p1-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/openssh-6.0p1-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
openssh-6.0p1-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/openssh-6.0p1-x86-gcc2-2012-06-21.zip ;
|
||||
openssh-6.0p1-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/openssh-6.0p1-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
|
||||
AddUserToHaikuImage sshd : 1001 : 100 : /var/empty : /bin/true
|
||||
@@ -1509,8 +1510,8 @@ if [ IsOptionalHaikuImagePackageAdded P7zip ] {
|
||||
: $(baseURL)/p7zip-9.20.1-x86-gcc4-2012-06-19.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
p7zip-9.20.1-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/p7zip-9.20.1-x86-gcc2-2012-06-21.zip ;
|
||||
p7zip-9.20.1-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/p7zip-9.20.1-r1a4-x86-gcc2-2012-08-29.zip ;
|
||||
}
|
||||
AddExpanderRuleToHaikuImage "application/x-7z-compressed" : .7z
|
||||
: "7za l \\0045s"
|
||||
@@ -1555,8 +1556,8 @@ if [ IsOptionalHaikuImagePackageAdded PCRE ] {
|
||||
: $(baseURL)/libpcre-8.12-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
libpcre-8.12-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/libpcre-8.12-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
libpcre-8.21-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/libpcre-8.21-r1a4-x86-gcc2-2012-08-28.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1573,8 +1574,8 @@ if [ IsOptionalHaikuImagePackageAdded Pe ] {
|
||||
: $(baseURL)/pe-2.4.3-600-x86-gcc4-2011-12-18.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
pe-2.4.3-600-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/pe-2.4.3-600-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
pe-2.4.3-hg-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/pe-2.4.3-hg-r1a4-x86-gcc2-2012-08-29.zip ;
|
||||
}
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/Pe/Pe ;
|
||||
@@ -1596,8 +1597,8 @@ if [ IsOptionalHaikuImagePackageAdded Perl ] {
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
perl-5.10.1-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/perl-5.10.1-r1a3-x86-gcc2-2011-05-17.zip
|
||||
perl-5.10.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/perl-5.10.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1632,8 +1633,8 @@ if [ IsOptionalHaikuImagePackageAdded Python ] {
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
python-2.6.7-x86-gcc2-2011-06-24.zip
|
||||
: $(baseURL)/python-2.6.7-x86-gcc2-2011-06-24.zip
|
||||
python-2.6.8-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/python-2.6.8-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1652,8 +1653,8 @@ if [ IsOptionalHaikuImagePackageAdded Rsync ] {
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
rsync-3.0.7-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/rsync-3.0.7-r1a3-x86-gcc2-2011-05-18.zip
|
||||
rsync-3.0.7-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/rsync-3.0.7-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1670,8 +1671,8 @@ if [ IsOptionalHaikuImagePackageAdded Ruby ] {
|
||||
: $(baseURL)/ruby-1.9.1-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
ruby-1.9.1-r1a3-x86-gcc2-2011-05-31.zip
|
||||
: $(baseURL)/ruby-1.9.1-r1a3-x86-gcc2-2011-06-01.zip ;
|
||||
ruby-1.9.1-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/ruby-1.9.1-r1a4-x86-gcc2-2012-08-29.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1686,8 +1687,8 @@ if [ IsOptionalHaikuImagePackageAdded Sed ] {
|
||||
: $(baseURL)/sed-4.2.1-r1a3-x86-gcc4-2011-05-24.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
sed-4.2.1-r1a3-x86-gcc2-2011-05-17.zip
|
||||
: $(baseURL)/sed-4.2.1-r1a3-x86-gcc2-2011-05-17.zip ;
|
||||
sed-4.2.1-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/sed-4.2.1-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1699,12 +1700,12 @@ if [ IsOptionalHaikuImagePackageAdded SQLite ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
sqlite-3.7.13-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/sqlite-3.7.13-x86-gcc4-2012-06-19.zip ;
|
||||
sqlite-3.7.13-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/sqlite-3.7.13-r1a4-x86-gcc4-2012-08-30.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
sqlite-3.7.13-x86-gcc2-2012-06-20.zip
|
||||
: $(baseURL)/sqlite-3.7.13-x86-gcc2-2012-06-20.zip ;
|
||||
sqlite-3.7.13-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/sqlite-3.7.13-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1717,13 +1718,13 @@ if [ IsOptionalHaikuImagePackageAdded Subversion ] {
|
||||
} else {
|
||||
if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
subversion-1.6.18-x86-gcc4-2012-06-19.zip
|
||||
: $(baseURL)/subversion-1.6.18-x86-gcc4-2012-06-19.zip
|
||||
subversion-1.6.18-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: $(baseURL)/subversion-1.6.18-r1a4-x86-gcc4-2012-08-30.zip
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
subversion-1.6.18-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/subversion-1.6.18-x86-gcc2-2012-06-21.zip
|
||||
subversion-1.6.18-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: $(baseURL)/subversion-1.6.18-r1a4-x86-gcc2-2012-08-28.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1740,8 +1741,8 @@ if [ IsOptionalHaikuImagePackageAdded TagLib ] {
|
||||
: $(baseURL)/taglib-1.6.3-r1r3-x86-gcc4-2011-05-24.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
taglib-1.6.3-r1a3-x86-gcc2-2011-05-20.zip
|
||||
: $(baseURL)/taglib-1.6.3-r1a3-x86-gcc2-2011-05-20.zip ;
|
||||
taglib-1.7.2-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/taglib-1.7.2-r1a4-x86-gcc2-2012-08-30.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1757,8 +1758,8 @@ if [ IsOptionalHaikuImagePackageAdded Tar ] {
|
||||
: $(baseURL)/tar-1.26-x86-gcc4-2012-06-19.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
tar-1.26-x86-gcc2-2012-06-21.zip
|
||||
: $(baseURL)/tar-1.26-x86-gcc2-2012-06-21.zip ;
|
||||
tar-1.26-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/tar-1.26-r1a4-x86-gcc2-2012-08-29.zip ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1792,8 +1793,8 @@ if [ IsOptionalHaikuImagePackageAdded Transmission ] {
|
||||
: : true ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
transmission-2.21-r1a3-x86-gcc2-2011-05-27.zip
|
||||
: $(baseURL)/transmission-2.21-r1a3-x86-gcc2-2011-05-27.zip
|
||||
transmission-2.21-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: $(baseURL)/transmission-2.21-r1a4-x86-gcc2-2012-08-30.zip
|
||||
: : true ;
|
||||
}
|
||||
}
|
||||
@@ -1885,8 +1886,8 @@ if [ IsOptionalHaikuImagePackageAdded Vision ] {
|
||||
: $(baseURL)/vision-908-x86-gcc4-2012-02-26.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
vision-908-x86-gcc2-2012-02-26.zip
|
||||
: $(baseURL)/vision-908-x86-gcc2-2012-02-26.zip ;
|
||||
vision-908-r1a4-x86-gcc2-2012-08-29.zip
|
||||
: $(baseURL)/vision-908-r1a4-x86-gcc2-2012-08-29.zip ;
|
||||
}
|
||||
AddSymlinkToHaikuImage home config settings deskbar Applications
|
||||
: /boot/apps/Vision/Vision ;
|
||||
@@ -2032,8 +2033,8 @@ if [ IsOptionalHaikuImagePackageAdded wpa_supplicant ] {
|
||||
# WQY-MicroHei
|
||||
if [ IsOptionalHaikuImagePackageAdded WQY-MicroHei ] {
|
||||
InstallOptionalHaikuImagePackage
|
||||
wqy-microhei-0.2.0-beta-r1a3-x86-gcc2-2011-05-18.zip
|
||||
: $(baseURL)/wqy-microhei-0.2.0-beta-r1a3-x86-gcc2-2011-05-18.zip ;
|
||||
wqy-microhei-0.2.0-beta-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/wqy-microhei-0.2.0-beta-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
|
||||
|
||||
@@ -2067,11 +2068,11 @@ if [ IsOptionalHaikuImagePackageAdded Yasm ] {
|
||||
Echo "No optional package Yasm available for $(TARGET_ARCH)" ;
|
||||
} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
|
||||
InstallOptionalHaikuImagePackage
|
||||
yasm-1.2.0-x86-gcc4-2012-06-18.zip
|
||||
: $(baseURL)/yasm-1.2.0-x86-gcc4-2012-06-18.zip ;
|
||||
yasm-1.2.0-r1a4-x86-gcc4-2012-08-29.zip
|
||||
: $(baseURL)/yasm-1.2.0-r1a4-x86-gcc4-2012-08-29.zip ;
|
||||
} else {
|
||||
InstallOptionalHaikuImagePackage
|
||||
yasm-1.2.0-x86-gcc2-2012-06-19.zip
|
||||
: $(baseURL)/yasm-1.2.0-x86-gcc2-2012-06-19.zip ;
|
||||
yasm-1.2.0-r1a4-x86-gcc2-2012-08-27.zip
|
||||
: $(baseURL)/yasm-1.2.0-r1a4-x86-gcc2-2012-08-27.zip ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
class BView;
|
||||
class BLayoutItem;
|
||||
class Constraint;
|
||||
|
||||
|
||||
namespace BPrivate {
|
||||
class SharedSolver;
|
||||
@@ -53,10 +55,41 @@ public:
|
||||
XTab* XTabAt(int32 index) const;
|
||||
YTab* YTabAt(int32 index, bool ordered = false);
|
||||
YTab* YTabAt(int32 index) const;
|
||||
const XTabList GetXTabs() const;
|
||||
const YTabList GetYTabs() const;
|
||||
|
||||
int32 IndexOf(XTab* tab, bool ordered = false);
|
||||
int32 IndexOf(YTab* tab, bool ordered = false);
|
||||
|
||||
int32 CountConstraints() const;
|
||||
Constraint* ConstraintAt(int32 index) const;
|
||||
bool AddConstraint(Constraint* constraint);
|
||||
bool RemoveConstraint(Constraint* constraint,
|
||||
bool deleteConstraint = true);
|
||||
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
|
||||
Row* AddRow(YTab* top, YTab* bottom);
|
||||
Column* AddColumn(XTab* left, XTab* right);
|
||||
|
||||
@@ -66,6 +99,7 @@ public:
|
||||
YTab* Bottom() const;
|
||||
|
||||
LinearProgramming::LinearSpec* Solver() const;
|
||||
LinearProgramming::ResultType ValidateLayout();
|
||||
|
||||
void SetInsets(float insets);
|
||||
void SetInsets(float x, float y);
|
||||
@@ -106,9 +140,7 @@ public:
|
||||
YTab* bottom = NULL);
|
||||
virtual Area* AddItem(BLayoutItem* item, Row* row,
|
||||
Column* column);
|
||||
|
||||
bool SaveLayout(BMessage* archive) const;
|
||||
bool RestoreLayout(const BMessage* archive);
|
||||
|
||||
struct BadLayoutPolicy;
|
||||
|
||||
void SetBadLayoutPolicy(BadLayoutPolicy* policy);
|
||||
@@ -192,6 +224,9 @@ private:
|
||||
friend class YTab;
|
||||
friend class Area;
|
||||
|
||||
class BALMLayoutSpecListener;
|
||||
friend class BALMLayoutSpecListener;
|
||||
|
||||
float InsetForTab(XTab* tab) const;
|
||||
float InsetForTab(YTab* tab) const;
|
||||
|
||||
@@ -208,6 +243,7 @@ private:
|
||||
void _SetSolver(BPrivate::SharedSolver* solver);
|
||||
|
||||
BPrivate::SharedSolver* fSolver;
|
||||
BALMLayoutSpecListener* fSpecListener;
|
||||
|
||||
BReference<XTab> fLeft;
|
||||
BReference<XTab> fRight;
|
||||
@@ -231,9 +267,12 @@ private:
|
||||
YTabList fYTabList;
|
||||
bool fYTabsSorted;
|
||||
|
||||
BObjectList<Constraint> fConstraints;
|
||||
|
||||
RowColumnManager* fRowColumnManager;
|
||||
|
||||
BadLayoutPolicy* fBadLayoutPolicy;
|
||||
|
||||
uint32 _reserved[5];
|
||||
};
|
||||
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
#ifndef CONSTRAINT_H
|
||||
#define CONSTRAINT_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include <File.h>
|
||||
#include <ObjectList.h>
|
||||
#include <String.h>
|
||||
#include <SupportDefs.h>
|
||||
@@ -28,20 +25,26 @@ class LinearSpec;
|
||||
*/
|
||||
class Constraint {
|
||||
public:
|
||||
Constraint();
|
||||
/*! Creates a soft copy of the constraint which is not connected
|
||||
to the solver. Variables are not copied or cloned but the soft copy
|
||||
has its own summand list with summands. */
|
||||
Constraint(Constraint* constraint);
|
||||
|
||||
int32 Index() const;
|
||||
|
||||
SummandList* LeftSide();
|
||||
/*! This just overwrites the current list. The caller has to take
|
||||
care about the old left side, i.e. delete it. */
|
||||
void SetLeftSide(SummandList* summands);
|
||||
|
||||
bool SetLeftSide(SummandList* summands,
|
||||
bool deleteOldSummands);
|
||||
|
||||
void SetLeftSide(double coeff1, Variable* var1);
|
||||
void SetLeftSide(double coeff1, Variable* var1,
|
||||
bool SetLeftSide(double coeff1, Variable* var1);
|
||||
bool SetLeftSide(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2);
|
||||
void SetLeftSide(double coeff1, Variable* var1,
|
||||
bool SetLeftSide(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3);
|
||||
void SetLeftSide(double coeff1, Variable* var1,
|
||||
bool SetLeftSide(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4);
|
||||
@@ -58,11 +61,6 @@ public:
|
||||
const char* Label();
|
||||
void SetLabel(const char* label);
|
||||
|
||||
Variable* DNeg() const;
|
||||
Variable* DPos() const;
|
||||
|
||||
bool IsSoft() const;
|
||||
|
||||
bool IsValid();
|
||||
void Invalidate();
|
||||
|
||||
@@ -86,16 +84,10 @@ private:
|
||||
|
||||
double fPenaltyNeg;
|
||||
double fPenaltyPos;
|
||||
Summand* fDNegObjSummand;
|
||||
Summand* fDPosObjSummand;
|
||||
BString fLabel;
|
||||
|
||||
bool fIsValid;
|
||||
|
||||
public:
|
||||
friend class LinearSpec;
|
||||
friend class LPSolveInterface;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
#ifndef LINEAR_SPEC_H
|
||||
#define LINEAR_SPEC_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include <List.h>
|
||||
#include <ObjectList.h>
|
||||
#include <OS.h>
|
||||
#include <Referenceable.h>
|
||||
#include <Size.h>
|
||||
@@ -36,7 +34,7 @@ class SolverInterface {
|
||||
public:
|
||||
SolverInterface(LinearSpec* linSpec);
|
||||
|
||||
virtual ~SolverInterface() {}
|
||||
virtual ~SolverInterface();
|
||||
|
||||
virtual ResultType Solve() = 0;
|
||||
|
||||
@@ -49,12 +47,10 @@ public:
|
||||
virtual bool LeftSideChanged(Constraint* constraint) = 0;
|
||||
virtual bool RightSideChanged(Constraint* constraint) = 0;
|
||||
virtual bool OperatorChanged(Constraint* constraint) = 0;
|
||||
virtual bool PenaltiesChanged(Constraint* constraint) = 0;
|
||||
|
||||
virtual bool SaveModel(const char* fileName) = 0;
|
||||
|
||||
virtual BSize MinSize(Variable* width, Variable* height) = 0;
|
||||
virtual BSize MaxSize(Variable* width, Variable* height) = 0;
|
||||
|
||||
virtual ResultType FindMins(const VariableList* variables) = 0;
|
||||
virtual ResultType FindMaxs(const VariableList* variables) = 0;
|
||||
|
||||
@@ -63,10 +59,26 @@ public:
|
||||
const Constraint** _max) const = 0;
|
||||
|
||||
protected:
|
||||
bool AddConstraint(Constraint* constraint,
|
||||
bool notifyListener);
|
||||
bool RemoveConstraint(Constraint* constraint,
|
||||
bool deleteConstraint, bool notifyListener);
|
||||
|
||||
LinearSpec* fLinearSpec;
|
||||
};
|
||||
|
||||
|
||||
class SpecificationListener {
|
||||
public:
|
||||
virtual ~SpecificationListener();
|
||||
|
||||
virtual void VariableAdded(Variable* variable);
|
||||
virtual void VariableRemoved(Variable* variable);
|
||||
virtual void ConstraintAdded(Constraint* constraint);
|
||||
virtual void ConstraintRemoved(Constraint* constraint);
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
* Specification of a linear programming problem.
|
||||
*/
|
||||
@@ -75,6 +87,10 @@ public:
|
||||
LinearSpec();
|
||||
virtual ~LinearSpec();
|
||||
|
||||
/*! Does not takes ownership of the listener. */
|
||||
bool AddListener(SpecificationListener* listener);
|
||||
bool RemoveListener(SpecificationListener* listener);
|
||||
|
||||
Variable* AddVariable();
|
||||
bool AddVariable(Variable* variable);
|
||||
bool RemoveVariable(Variable* variable,
|
||||
@@ -87,47 +103,32 @@ public:
|
||||
bool RemoveConstraint(Constraint* constraint,
|
||||
bool deleteConstraint = true);
|
||||
|
||||
Constraint* AddConstraint(SummandList* summands,
|
||||
OperatorType op, double rightSide);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
OperatorType op, double rightSide);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
OperatorType op, double rightSide);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4,
|
||||
OperatorType op, double rightSide);
|
||||
|
||||
Constraint* AddConstraint(SummandList* summands,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
|
||||
BSize MinSize(Variable* width, Variable* height);
|
||||
BSize MaxSize(Variable* width, Variable* height);
|
||||
double penaltyNeg = -1,
|
||||
double penaltyPos = -1);
|
||||
|
||||
ResultType FindMins(const VariableList* variables);
|
||||
ResultType FindMaxs(const VariableList* variables);
|
||||
@@ -151,9 +152,18 @@ public:
|
||||
|
||||
protected:
|
||||
friend class Constraint;
|
||||
bool UpdateLeftSide(Constraint* constraint);
|
||||
friend class SolverInterface;
|
||||
|
||||
bool UpdateLeftSide(Constraint* constraint,
|
||||
const SummandList* oldSummands);
|
||||
bool UpdateRightSide(Constraint* constraint);
|
||||
bool UpdateOperator(Constraint* constraint);
|
||||
bool UpdatePenalties(Constraint* constraint);
|
||||
|
||||
bool AddConstraint(Constraint* constraint,
|
||||
bool notifyListener);
|
||||
bool RemoveConstraint(Constraint* constraint,
|
||||
bool deleteConstraint, bool notifyListener);
|
||||
private:
|
||||
/*! Check if all entries != NULL otherwise delete the list and its
|
||||
entries. */
|
||||
@@ -162,6 +172,9 @@ private:
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
|
||||
void _AddConstraintRef(Variable* var);
|
||||
void _RemoveConstraintRef(Variable* var);
|
||||
|
||||
VariableList fVariables;
|
||||
VariableList fUsedVariables;
|
||||
ConstraintList fConstraints;
|
||||
@@ -169,6 +182,8 @@ private:
|
||||
bigtime_t fSolvingTime;
|
||||
|
||||
SolverInterface* fSolver;
|
||||
|
||||
BObjectList<SpecificationListener> fListeners;
|
||||
};
|
||||
|
||||
} // namespace LinearProgramming
|
||||
|
||||
@@ -19,6 +19,7 @@ class Variable;
|
||||
*/
|
||||
class Summand {
|
||||
public:
|
||||
Summand(Summand* summand);
|
||||
Summand(double coeff, Variable* var);
|
||||
~Summand();
|
||||
|
||||
@@ -31,7 +32,6 @@ public:
|
||||
private:
|
||||
double fCoeff;
|
||||
Variable* fVar;
|
||||
bool fUsedInPenaltyFunction; //not set yet
|
||||
};
|
||||
|
||||
typedef BObjectList<Summand> SummandList;
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#define IA32_MSR_SYSENTER_CS 0x174
|
||||
#define IA32_MSR_SYSENTER_ESP 0x175
|
||||
#define IA32_MSR_SYSENTER_EIP 0x176
|
||||
#define IA32_MSR_ENERGY_PERF_BIAS 0x1b0
|
||||
#define IA32_MSR_MTRR_DEFAULT_TYPE 0x2ff
|
||||
#define IA32_MSR_MTRR_PHYSICAL_BASE_0 0x200
|
||||
#define IA32_MSR_MTRR_PHYSICAL_MASK_0 0x201
|
||||
|
||||
@@ -159,6 +159,7 @@ dump_widget_audio_capabilities(uint32 capabilities)
|
||||
uint32 flag;
|
||||
const char* name;
|
||||
} kFlags[] = {
|
||||
{AUDIO_CAP_CP_CAPS, "CP caps"},
|
||||
{AUDIO_CAP_LEFT_RIGHT_SWAP, "L-R swap"},
|
||||
{AUDIO_CAP_POWER_CONTROL, "Power"},
|
||||
{AUDIO_CAP_DIGITAL, "Digital"},
|
||||
@@ -897,7 +898,8 @@ hda_widget_find_input_path(hda_audio_group* audioGroup, hda_widget* widget,
|
||||
switch (widget->type) {
|
||||
case WT_PIN_COMPLEX:
|
||||
// already used
|
||||
if (widget->flags & WIDGET_FLAG_INPUT_PATH)
|
||||
if ((widget->flags & (WIDGET_FLAG_INPUT_PATH
|
||||
| WIDGET_FLAG_OUTPUT_PATH)) != 0)
|
||||
return false;
|
||||
|
||||
if (PIN_CAP_IS_INPUT(widget->d.pin.capabilities)) {
|
||||
@@ -917,7 +919,8 @@ TRACE(" %*sinput: added input widget %ld\n", (int)depth * 2, "", widget->no
|
||||
case WT_AUDIO_SELECTOR:
|
||||
{
|
||||
// already used
|
||||
if (widget->flags & WIDGET_FLAG_INPUT_PATH)
|
||||
if ((widget->flags & (WIDGET_FLAG_INPUT_PATH
|
||||
| WIDGET_FLAG_OUTPUT_PATH)) != 0)
|
||||
return false;
|
||||
|
||||
// search for pin complex in this path
|
||||
|
||||
@@ -125,6 +125,21 @@ enum pin_dev_type {
|
||||
#define VID_GET_STRIPE_CONTROL 0xf2400
|
||||
#define VID_SET_STRIPE_CONTROL 0x72000
|
||||
#define VID_FUNCTION_RESET 0x7ff00
|
||||
/* later specification updates */
|
||||
#define VID_GET_EDID_LIKE_DATA 0xf2f00
|
||||
#define VID_GET_CONVERTER_CHANNEL_COUNT 0xf2d00
|
||||
#define VID_SET_CONVERTER_CHANNEL_COUNT 0x72d00
|
||||
#define VID_GET_DATA_ISLAND_PACKET_SIZE 0xf2e00
|
||||
#define VID_GET_DATA_ISLAND_PACKET_INDEX 0xf3000
|
||||
#define VID_SET_DATA_ISLAND_PACKET_INDEX 0x73000
|
||||
#define VID_GET_DATA_ISLAND_PACKET_DATA 0xf3100
|
||||
#define VID_SET_DATA_ISLAND_PACKET_DATA 0x73100
|
||||
#define VID_GET_DATA_ISLAND_PACKET_XMITCTRL 0xf3200
|
||||
#define VID_SET_DATA_ISLAND_PACKET_XMITCTRL 0x73200
|
||||
#define VID_GET_CONTENT_PROTECTION_CONTROL 0xf3300
|
||||
#define VID_SET_CONTENT_PROTECTION_CONTROL 0x73300
|
||||
#define VID_GET_ASP_CHANNEL_MAPPING 0xf3400
|
||||
#define VID_SET_ASP_CHANNEL_MAPPING 0x73400
|
||||
|
||||
/* Parameter IDs */
|
||||
#define PID_VENDOR_ID 0x00
|
||||
@@ -179,6 +194,8 @@ enum pin_dev_type {
|
||||
|
||||
|
||||
/* Audio widget capabilities */
|
||||
#define AUDIO_CAP_CHANNEL_COUNT_MASK 0x0000e000
|
||||
#define AUDIO_CAP_CHANNEL_COUNT_SHIFT 13
|
||||
#define AUDIO_CAP_DELAY_MASK 0x000f0000
|
||||
#define AUDIO_CAP_DELAY_SHIFT 16
|
||||
#define AUDIO_CAP_TYPE_MASK 0x00f00000
|
||||
@@ -196,6 +213,11 @@ enum pin_dev_type {
|
||||
#define AUDIO_CAP_DIGITAL (1L << 9)
|
||||
#define AUDIO_CAP_POWER_CONTROL (1L << 10)
|
||||
#define AUDIO_CAP_LEFT_RIGHT_SWAP (1L << 11)
|
||||
#define AUDIO_CAP_CP_CAPS (1L << 12)
|
||||
|
||||
#define AUDIO_CAP_CHANNEL_COUNT(c) \
|
||||
(((c & AUDIO_CAP_CHANNEL_COUNT_MASK) >> (AUDIO_CAP_CHANNEL_COUNT_SHIFT - 1)) \
|
||||
| AUDIO_CAP_STEREO)
|
||||
|
||||
/* Amplifier capabilities */
|
||||
#define AMP_CAP_MUTE 0xf0000000
|
||||
@@ -219,20 +241,27 @@ enum pin_dev_type {
|
||||
#define PIN_CAP_OUTPUT (1L << 4)
|
||||
#define PIN_CAP_INPUT (1L << 5)
|
||||
#define PIN_CAP_BALANCE (1L << 6)
|
||||
#define PIN_CAP_HDMI (1L << 7)
|
||||
#define PIN_CAP_VREF_CTRL_HIZ (1L << 8)
|
||||
#define PIN_CAP_VREF_CTRL_50 (1L << 9)
|
||||
#define PIN_CAP_VREF_CTRL_GROUND (1L << 10)
|
||||
#define PIN_CAP_VREF_CTRL_80 (1L << 12)
|
||||
#define PIN_CAP_VREF_CTRL_100 (1L << 13)
|
||||
#define PIN_CAP_EAPD_CAP (1L << 16)
|
||||
#define PIN_CAP_DP (1L << 24)
|
||||
#define PIN_CAP_HBR (1L << 27)
|
||||
|
||||
#define PIN_CAP_IS_PRES_DETECT_CAP(c) ((c & PIN_CAP_PRES_DETECT) != 0)
|
||||
#define PIN_CAP_IS_OUTPUT(c) ((c & PIN_CAP_OUTPUT) != 0)
|
||||
#define PIN_CAP_IS_INPUT(c) ((c & PIN_CAP_INPUT) != 0)
|
||||
#define PIN_CAP_IS_BALANCE(c) ((c & PIN_CAP_BALANCE) != 0)
|
||||
#define PIN_CAP_IS_HDMI(c) ((c & PIN_CAP_HDMI) != 0)
|
||||
#define PIN_CAP_IS_VREF_CTRL_50_CAP(c) ((c & PIN_CAP_VREF_CTRL_50) != 0)
|
||||
#define PIN_CAP_IS_VREF_CTRL_80_CAP(c) ((c & PIN_CAP_VREF_CTRL_80) != 0)
|
||||
#define PIN_CAP_IS_VREF_CTRL_100_CAP(c) ((c & PIN_CAP_VREF_CTRL_100) != 0)
|
||||
#define PIN_CAP_IS_EAPD_CAP(c) ((c & PIN_CAP_EAPD_CAP) != 0)
|
||||
#define PIN_CAP_IS_DP(c) ((c & PIN_CAP_DP) != 0)
|
||||
#define PIN_CAP_IS_HBR(c) ((c & PIN_CAP_HBR) != 0)
|
||||
|
||||
/* PCM support */
|
||||
#define PCM_8_BIT (1L << 16)
|
||||
@@ -280,9 +309,18 @@ enum pin_dev_type {
|
||||
|
||||
/* Unsolicited Response */
|
||||
#define UNSOLRESP_ENABLE (1L << 7)
|
||||
#define UNSOLRESP_TAG_MASK 0x0000003f
|
||||
#define UNSOLRESP_TAG_SHIFT 0
|
||||
|
||||
/* Pin sense */
|
||||
#define PIN_SENSE_PRESENCE_DETECT (1L << 31)
|
||||
#define PIN_SENSE_ELD_VALID (1L << 30)
|
||||
#define PIN_SENSE_IMPEDANCE_MASK 0x7fffffff
|
||||
#define PIN_SENSE_IMPEDANCE_SHIFT 0
|
||||
|
||||
#define PIN_SENSE_IMPEDANCE_INVALID 0x7fffffff
|
||||
#define PIN_SENSE_SET_CHANNEL_LEFT 0
|
||||
#define PIN_SENSE_SET_CHANNEL_RIGHT 1
|
||||
|
||||
/* Supported power states */
|
||||
#define POWER_STATE_D0 (1L << 0)
|
||||
|
||||
@@ -442,7 +442,7 @@ hda_create_control_for_complex(hda_multi* multi, uint32* index, uint32 parent,
|
||||
return;
|
||||
}
|
||||
|
||||
if ((widget.type & WT_AUDIO_MIXER) != 0) {
|
||||
if (widget.type == WT_AUDIO_MIXER) {
|
||||
hda_create_channel_control(multi, index, parent, 0,
|
||||
widget, true, widget.capabilities.input_amplifier, 0, gain, mute);
|
||||
if (!gain && !mute) {
|
||||
@@ -451,8 +451,7 @@ hda_create_control_for_complex(hda_multi* multi, uint32* index, uint32 parent,
|
||||
}
|
||||
}
|
||||
|
||||
if ((widget.type & WT_AUDIO_OUTPUT) == 0
|
||||
&& widget.num_inputs > 0) {
|
||||
if (widget.type != WT_AUDIO_OUTPUT && widget.num_inputs > 0) {
|
||||
hda_widget& child = *hda_audio_group_get_widget(audioGroup,
|
||||
widget.inputs[widget.active_input]);
|
||||
hda_create_control_for_complex(multi, index, parent, child, gain, mute);
|
||||
@@ -543,6 +542,12 @@ hda_create_controls_list(hda_multi* multi)
|
||||
hda_create_channel_control(multi, &index, parent2, 0,
|
||||
widget, true, capabilities, 0, gain, mute);
|
||||
|
||||
if (widget.num_inputs > 1) {
|
||||
TRACE(" create mux for nid %lu\n", widget.node_id);
|
||||
hda_create_mux_control(multi, &index, parent2, widget);
|
||||
continue;
|
||||
}
|
||||
|
||||
hda_widget *mixer = hda_audio_group_get_widget(audioGroup,
|
||||
widget.inputs[0]);
|
||||
if (mixer->type != WT_AUDIO_MIXER && mixer->type != WT_AUDIO_SELECTOR)
|
||||
|
||||
+137
-128
@@ -184,6 +184,25 @@ BALM::BALMLayout::DefaultPolicy::Instantiate(BMessage* archive)
|
||||
}
|
||||
|
||||
|
||||
class BALMLayout::BALMLayoutSpecListener
|
||||
: public LinearProgramming::SpecificationListener {
|
||||
public:
|
||||
BALMLayoutSpecListener(BALMLayout* layout)
|
||||
:
|
||||
fLayout(layout)
|
||||
{
|
||||
}
|
||||
|
||||
void ConstraintRemoved(Constraint* constraint)
|
||||
{
|
||||
fLayout->fConstraints.RemoveItem(constraint);
|
||||
}
|
||||
|
||||
private:
|
||||
BALMLayout* fLayout;
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
* Constructor.
|
||||
* Creates new layout engine.
|
||||
@@ -204,6 +223,9 @@ BALMLayout::BALMLayout(float hSpacing, float vSpacing, BALMLayout* friendLayout)
|
||||
{
|
||||
_SetSolver(friendLayout ? friendLayout->fSolver : new SharedSolver());
|
||||
|
||||
fSpecListener = new BALMLayoutSpecListener(this);
|
||||
Solver()->AddListener(fSpecListener);
|
||||
|
||||
fLeft = AddXTab();
|
||||
fRight = AddXTab();
|
||||
fTop = AddYTab();
|
||||
@@ -278,14 +300,23 @@ BALMLayout::BALMLayout(BMessage* archive)
|
||||
err = unarchiver.EnsureUnarchived(kSolverField);
|
||||
|
||||
unarchiver.Finish(err);
|
||||
|
||||
fSpecListener = new BALMLayoutSpecListener(this);
|
||||
Solver()->AddListener(fSpecListener);
|
||||
}
|
||||
|
||||
|
||||
BALMLayout::~BALMLayout()
|
||||
{
|
||||
Solver()->RemoveListener(fSpecListener);
|
||||
delete fSpecListener;
|
||||
|
||||
delete fRowColumnManager;
|
||||
delete fBadLayoutPolicy;
|
||||
|
||||
for (int32 i = 0; i < fConstraints.CountItems(); i++)
|
||||
Solver()->RemoveConstraint(fConstraints.ItemAt(i), true);
|
||||
|
||||
if (fSolver) {
|
||||
fSolver->LayoutLeaving(this);
|
||||
fSolver->ReleaseReference();
|
||||
@@ -409,6 +440,20 @@ BALMLayout::YTabAt(int32 index) const
|
||||
}
|
||||
|
||||
|
||||
const XTabList
|
||||
BALMLayout::GetXTabs() const
|
||||
{
|
||||
return fXTabList;
|
||||
}
|
||||
|
||||
|
||||
const YTabList
|
||||
BALMLayout::GetYTabs() const
|
||||
{
|
||||
return fYTabList;
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
BALMLayout::IndexOf(XTab* tab, bool ordered)
|
||||
{
|
||||
@@ -433,6 +478,85 @@ BALMLayout::IndexOf(YTab* tab, bool ordered)
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
BALMLayout::CountConstraints() const
|
||||
{
|
||||
return fConstraints.CountItems();
|
||||
}
|
||||
|
||||
|
||||
Constraint*
|
||||
BALMLayout::ConstraintAt(int32 index) const
|
||||
{
|
||||
return fConstraints.ItemAt(index);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
BALMLayout::AddConstraint(Constraint* constraint)
|
||||
{
|
||||
fConstraints.AddItem(constraint);
|
||||
return Solver()->AddConstraint(constraint);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
BALMLayout::RemoveConstraint(Constraint* constraint,
|
||||
bool deleteConstraint)
|
||||
{
|
||||
if (!fConstraints.RemoveItem(constraint))
|
||||
return false;
|
||||
return Solver()->RemoveConstraint(constraint, deleteConstraint);
|
||||
}
|
||||
|
||||
|
||||
Constraint*
|
||||
BALMLayout::AddConstraint(double coeff1, Variable* var1, OperatorType op,
|
||||
double rightSide, double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
Constraint* constraint = Solver()->AddConstraint(coeff1, var1, op,
|
||||
rightSide, penaltyNeg, penaltyPos);
|
||||
fConstraints.AddItem(constraint);
|
||||
return constraint;
|
||||
}
|
||||
|
||||
|
||||
Constraint*
|
||||
BALMLayout::AddConstraint(double coeff1, Variable* var1, double coeff2,
|
||||
Variable* var2, OperatorType op, double rightSide, double penaltyNeg,
|
||||
double penaltyPos)
|
||||
{
|
||||
Constraint* constraint = Solver()->AddConstraint(coeff1, var1, coeff2, var2,
|
||||
op, rightSide, penaltyNeg, penaltyPos);
|
||||
fConstraints.AddItem(constraint);
|
||||
return constraint;
|
||||
}
|
||||
|
||||
Constraint*
|
||||
BALMLayout::AddConstraint(double coeff1, Variable* var1, double coeff2,
|
||||
Variable* var2, double coeff3, Variable* var3, OperatorType op,
|
||||
double rightSide, double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
Constraint* constraint = Solver()->AddConstraint(coeff1, var1, coeff2, var2,
|
||||
coeff3, var3, op, rightSide, penaltyNeg, penaltyPos);
|
||||
fConstraints.AddItem(constraint);
|
||||
return constraint;
|
||||
}
|
||||
|
||||
|
||||
Constraint*
|
||||
BALMLayout::AddConstraint(double coeff1, Variable* var1, double coeff2,
|
||||
Variable* var2, double coeff3, Variable* var3, double coeff4,
|
||||
Variable* var4, OperatorType op, double rightSide, double penaltyNeg,
|
||||
double penaltyPos)
|
||||
{
|
||||
Constraint* constraint = Solver()->AddConstraint(coeff1, var1, coeff2, var2,
|
||||
coeff3, var3, coeff4, var4, op, rightSide, penaltyNeg, penaltyPos);
|
||||
fConstraints.AddItem(constraint);
|
||||
return constraint;
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
|
||||
@@ -775,6 +899,7 @@ BALMLayout::AddItem(BLayoutItem* item, XTab* _left, YTab* _top, XTab* _right,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fSolver->Invalidate(true);
|
||||
area->_Init(Solver(), left, top, right, bottom, fRowColumnManager);
|
||||
fRowColumnManager->AddArea(area);
|
||||
|
||||
@@ -795,6 +920,7 @@ BALMLayout::AddItem(BLayoutItem* item, Row* row, Column* column)
|
||||
if (!area)
|
||||
return NULL;
|
||||
|
||||
fSolver->Invalidate(true);
|
||||
area->_Init(Solver(), row, column, fRowColumnManager);
|
||||
|
||||
fRowColumnManager->AddArea(area);
|
||||
@@ -802,134 +928,6 @@ BALMLayout::AddItem(BLayoutItem* item, Row* row, Column* column)
|
||||
}
|
||||
|
||||
|
||||
enum {
|
||||
kLeftBorderIndex = -2,
|
||||
kTopBorderIndex = -3,
|
||||
kRightBorderIndex = -4,
|
||||
kBottomBorderIndex = -5,
|
||||
};
|
||||
|
||||
|
||||
bool
|
||||
BALMLayout::SaveLayout(BMessage* archive) const
|
||||
{
|
||||
archive->MakeEmpty();
|
||||
|
||||
archive->AddInt32("nXTabs", CountXTabs());
|
||||
archive->AddInt32("nYTabs", CountYTabs());
|
||||
|
||||
XTabList xTabs = fXTabList;
|
||||
xTabs.RemoveItem(fLeft);
|
||||
xTabs.RemoveItem(fRight);
|
||||
YTabList yTabs = fYTabList;
|
||||
yTabs.RemoveItem(fTop);
|
||||
yTabs.RemoveItem(fBottom);
|
||||
|
||||
int32 nAreas = CountAreas();
|
||||
for (int32 i = 0; i < nAreas; i++) {
|
||||
Area* area = AreaAt(i);
|
||||
if (area->Left() == fLeft)
|
||||
archive->AddInt32("left", kLeftBorderIndex);
|
||||
else
|
||||
archive->AddInt32("left", xTabs.IndexOf(area->Left()));
|
||||
if (area->Top() == fTop)
|
||||
archive->AddInt32("top", kTopBorderIndex);
|
||||
else
|
||||
archive->AddInt32("top", yTabs.IndexOf(area->Top()));
|
||||
if (area->Right() == fRight)
|
||||
archive->AddInt32("right", kRightBorderIndex);
|
||||
else
|
||||
archive->AddInt32("right", xTabs.IndexOf(area->Right()));
|
||||
if (area->Bottom() == fBottom)
|
||||
archive->AddInt32("bottom", kBottomBorderIndex);
|
||||
else
|
||||
archive->AddInt32("bottom", yTabs.IndexOf(area->Bottom()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
BALMLayout::RestoreLayout(const BMessage* archive)
|
||||
{
|
||||
int32 neededXTabs;
|
||||
int32 neededYTabs;
|
||||
if (archive->FindInt32("nXTabs", &neededXTabs) != B_OK)
|
||||
return false;
|
||||
if (archive->FindInt32("nYTabs", &neededYTabs) != B_OK)
|
||||
return false;
|
||||
// First store a reference to all needed tabs otherwise they might get lost
|
||||
// while editing the layout
|
||||
std::vector<BReference<XTab> > newXTabs;
|
||||
std::vector<BReference<YTab> > newYTabs;
|
||||
int32 existingXTabs = fXTabList.CountItems();
|
||||
for (int32 i = 0; i < neededXTabs; i++) {
|
||||
if (i < existingXTabs)
|
||||
newXTabs.push_back(BReference<XTab>(fXTabList.ItemAt(i)));
|
||||
else
|
||||
newXTabs.push_back(AddXTab());
|
||||
}
|
||||
int32 existingYTabs = fYTabList.CountItems();
|
||||
for (int32 i = 0; i < neededYTabs; i++) {
|
||||
if (i < existingYTabs)
|
||||
newYTabs.push_back(BReference<YTab>(fYTabList.ItemAt(i)));
|
||||
else
|
||||
newYTabs.push_back(AddYTab());
|
||||
}
|
||||
|
||||
XTabList xTabs = fXTabList;
|
||||
xTabs.RemoveItem(fLeft);
|
||||
xTabs.RemoveItem(fRight);
|
||||
YTabList yTabs = fYTabList;
|
||||
yTabs.RemoveItem(fTop);
|
||||
yTabs.RemoveItem(fBottom);
|
||||
|
||||
int32 nAreas = CountAreas();
|
||||
for (int32 i = 0; i < nAreas; i++) {
|
||||
Area* area = AreaAt(i);
|
||||
if (area == NULL)
|
||||
return false;
|
||||
int32 left = -1;
|
||||
if (archive->FindInt32("left", i, &left) != B_OK)
|
||||
break;
|
||||
int32 top = archive->FindInt32("top", i);
|
||||
int32 right = archive->FindInt32("right", i);
|
||||
int32 bottom = archive->FindInt32("bottom", i);
|
||||
|
||||
XTab* leftTab = NULL;
|
||||
YTab* topTab = NULL;
|
||||
XTab* rightTab = NULL;
|
||||
YTab* bottomTab = NULL;
|
||||
|
||||
if (left == kLeftBorderIndex)
|
||||
leftTab = fLeft;
|
||||
else
|
||||
leftTab = xTabs.ItemAt(left);
|
||||
if (top == kTopBorderIndex)
|
||||
topTab = fTop;
|
||||
else
|
||||
topTab = yTabs.ItemAt(top);
|
||||
if (right == kRightBorderIndex)
|
||||
rightTab = fRight;
|
||||
else
|
||||
rightTab = xTabs.ItemAt(right);
|
||||
if (bottom == kBottomBorderIndex)
|
||||
bottomTab = fBottom;
|
||||
else
|
||||
bottomTab = yTabs.ItemAt(bottom);
|
||||
if (leftTab == NULL || topTab == NULL || rightTab == NULL
|
||||
|| bottomTab == NULL)
|
||||
return false;
|
||||
|
||||
area->SetLeft(leftTab);
|
||||
area->SetTop(topTab);
|
||||
area->SetRight(rightTab);
|
||||
area->SetBottom(bottomTab);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the left variable.
|
||||
*/
|
||||
@@ -1337,6 +1335,17 @@ BALMLayout::Solver() const
|
||||
}
|
||||
|
||||
|
||||
ResultType
|
||||
BALMLayout::ValidateLayout()
|
||||
{
|
||||
// we explicitly recaluclate the layout so set the invalidate flag first
|
||||
fSolver->Invalidate(true);
|
||||
|
||||
BLayoutContext* context = LayoutContext();
|
||||
return fSolver->ValidateLayout(context);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BALMLayout::SetInsets(float left, float top, float right,
|
||||
float bottom)
|
||||
|
||||
+23
-6
@@ -549,6 +549,8 @@ Area::_Init(LinearSpec* ls, XTab* left, YTab* top, XTab* right, YTab* bottom,
|
||||
// really above the bottom y-tab
|
||||
fMinContentWidth = ls->AddConstraint(-1.0, fLeft, 1.0, fRight, kGE, 0);
|
||||
fMinContentHeight = ls->AddConstraint(-1.0, fTop, 1.0, fBottom, kGE, 0);
|
||||
|
||||
InvalidateSizeConstraints();
|
||||
}
|
||||
|
||||
|
||||
@@ -619,26 +621,41 @@ Area::_UpdateMaxSizeConstraint(BSize max)
|
||||
max.width += LeftInset() + RightInset();
|
||||
max.height += TopInset() + BottomInset();
|
||||
|
||||
const double kPriority = 100;
|
||||
// we only need max constraints if the alignment is full height/width
|
||||
// otherwise we can just align the item in the free space
|
||||
BAlignment alignment = fLayoutItem->Alignment();
|
||||
if (alignment.Vertical() == B_ALIGN_USE_FULL_HEIGHT) {
|
||||
double priority = kPriority;
|
||||
if (alignment.Vertical() == B_ALIGN_USE_FULL_HEIGHT)
|
||||
priority = -1;
|
||||
|
||||
if (max.Height() < 20000) {
|
||||
if (fMaxContentHeight == NULL) {
|
||||
fMaxContentHeight = fLS->AddConstraint(-1.0, fTop, 1.0, fBottom,
|
||||
kLE, max.Height());
|
||||
} else
|
||||
kLE, max.Height(), priority, priority);
|
||||
} else {
|
||||
fMaxContentHeight->SetRightSide(max.Height());
|
||||
fMaxContentHeight->SetPenaltyNeg(priority);
|
||||
fMaxContentHeight->SetPenaltyPos(priority);
|
||||
}
|
||||
} else {
|
||||
delete fMaxContentHeight;
|
||||
fMaxContentHeight = NULL;
|
||||
}
|
||||
|
||||
if (alignment.Horizontal() == B_ALIGN_USE_FULL_WIDTH) {
|
||||
priority = kPriority;
|
||||
if (alignment.Horizontal() == B_ALIGN_USE_FULL_WIDTH)
|
||||
priority = -1;
|
||||
|
||||
if (max.Width() < 20000) {
|
||||
if (fMaxContentWidth == NULL) {
|
||||
fMaxContentWidth = fLS->AddConstraint(-1.0, fLeft, 1.0, fRight, kLE,
|
||||
max.Width());
|
||||
} else
|
||||
max.Width(), priority, priority);
|
||||
} else {
|
||||
fMaxContentWidth->SetRightSide(max.Width());
|
||||
fMaxContentWidth->SetPenaltyNeg(priority);
|
||||
fMaxContentWidth->SetPenaltyPos(priority);
|
||||
}
|
||||
} else {
|
||||
delete fMaxContentWidth;
|
||||
fMaxContentWidth = NULL;
|
||||
|
||||
@@ -193,7 +193,8 @@ RowColumnManager::_UpdateConstraints(Row* row)
|
||||
if (prefSize >= 0) {
|
||||
if (row->fPrefSizeConstraint == NULL) {
|
||||
row->fPrefSizeConstraint = fLinearSpec->AddConstraint(1,
|
||||
row->fBottom, -1, row->fTop, kEQ, prefSize, weight, weight);
|
||||
row->fBottom, -1, row->fTop, kEQ, prefSize, weight, weight);
|
||||
row->fPrefSizeConstraint->SetLabel("Pref Height");
|
||||
} else {
|
||||
row->fPrefSizeConstraint->SetRightSide(prefSize);
|
||||
row->fPrefSizeConstraint->SetPenaltyNeg(weight);
|
||||
@@ -216,6 +217,7 @@ RowColumnManager::_UpdateConstraints(Column* column)
|
||||
column->fPrefSizeConstraint = fLinearSpec->AddConstraint(1,
|
||||
column->fRight, -1, column->fLeft, kEQ, prefSize, weight,
|
||||
weight);
|
||||
column->fPrefSizeConstraint->SetLabel("Pref Width");
|
||||
} else {
|
||||
column->fPrefSizeConstraint->SetRightSide(prefSize);
|
||||
column->fPrefSizeConstraint->SetPenaltyNeg(weight);
|
||||
|
||||
@@ -38,8 +38,8 @@ struct SharedSolver::MinSizeValidator {
|
||||
if (solveResult == LinearProgramming::kUnbounded) {
|
||||
solver->SetMinSize(layout, BSize(0, 0));
|
||||
} else {
|
||||
solver->SetMinSize(layout, BSize(layout->Right()->Value(),
|
||||
layout->Bottom()->Value()));
|
||||
solver->SetMinSize(layout, BSize(ceilf(layout->Right()->Value()),
|
||||
ceilf(layout->Bottom()->Value())));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -58,8 +58,8 @@ struct SharedSolver::MaxSizeValidator {
|
||||
solver->SetMaxSize(layout,
|
||||
BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED));
|
||||
} else {
|
||||
solver->SetMaxSize(layout, BSize(layout->Right()->Value(),
|
||||
layout->Bottom()->Value()));
|
||||
solver->SetMaxSize(layout, BSize(floorf(layout->Right()->Value()),
|
||||
floorf(layout->Bottom()->Value())));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
// #define DEBUG_ACTIVE_SOLVER
|
||||
|
||||
#ifdef DEBUG_ACTIVE_SOLVER
|
||||
#include <stdio.h>
|
||||
#define TRACE(x...) printf(x)
|
||||
#else
|
||||
#define TRACE(x...) /* nothing */
|
||||
@@ -82,6 +81,17 @@ EquationSystem::Columns()
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
EquationSystem::InRange(int32 row, int32 column)
|
||||
{
|
||||
if (row < 0 || row >= fRows)
|
||||
return false;
|
||||
if (column < 0 || column >= fColumns)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
double&
|
||||
EquationSystem::A(int32 row, int32 column)
|
||||
{
|
||||
@@ -187,10 +197,6 @@ EquationSystem::GaussJordan(int32 i)
|
||||
void
|
||||
EquationSystem::RemoveLinearlyDependentRows()
|
||||
{
|
||||
double oldB[fRows];
|
||||
for (int r = 0; r < fRows; r++)
|
||||
oldB[r] = fB[r];
|
||||
|
||||
double** temp = allocate_matrix(fRows, fColumns);
|
||||
bool independentRows[fRows];
|
||||
|
||||
@@ -315,7 +321,7 @@ AddMaxConstraint(LinearSpec* spec, Variable* var)
|
||||
|
||||
ActiveSetSolver::ActiveSetSolver(LinearSpec* linearSpec)
|
||||
:
|
||||
QPSolverInterface(linearSpec),
|
||||
SolverInterface(linearSpec),
|
||||
|
||||
fVariables(linearSpec->UsedVariables()),
|
||||
fConstraints(linearSpec->Constraints())
|
||||
@@ -384,10 +390,77 @@ solve(EquationSystem& system)
|
||||
}
|
||||
|
||||
|
||||
static bool is_soft_inequality(Constraint* constraint)
|
||||
{
|
||||
if (constraint->PenaltyNeg() <= 0. && constraint->PenaltyPos() <= 0.)
|
||||
return false;
|
||||
if (constraint->Op() != kEQ)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
class SoftInequalityAdder {
|
||||
public:
|
||||
SoftInequalityAdder(LinearSpec* linSpec, ConstraintList& allConstraints)
|
||||
:
|
||||
fLinearSpec(linSpec)
|
||||
{
|
||||
for (int32 c = 0; c < allConstraints.CountItems(); c++) {
|
||||
Constraint* constraint = allConstraints.ItemAt(c);
|
||||
if (!is_soft_inequality(constraint))
|
||||
continue;
|
||||
|
||||
Variable* variable = fLinearSpec->AddVariable();
|
||||
variable->SetRange(0, 20000);
|
||||
|
||||
Constraint* helperConst = fLinearSpec->AddConstraint(1, variable,
|
||||
kEQ, 0, constraint->PenaltyNeg(), constraint->PenaltyPos());
|
||||
fInequalitySoftConstraints.AddItem(helperConst);
|
||||
|
||||
double coeff = -1;
|
||||
if (constraint->Op() == kGE)
|
||||
coeff = 1;
|
||||
|
||||
Constraint* modifiedConstraint = new Constraint(constraint);
|
||||
allConstraints.AddItem(modifiedConstraint, c);
|
||||
allConstraints.RemoveItemAt(c + 1);
|
||||
fModifiedIneqConstraints.AddItem(modifiedConstraint);
|
||||
modifiedConstraint->LeftSide()->AddItem(
|
||||
new Summand(coeff, variable));
|
||||
}
|
||||
for (int32 c = 0; c < fInequalitySoftConstraints.CountItems(); c++)
|
||||
allConstraints.AddItem(fInequalitySoftConstraints.ItemAt(c));
|
||||
}
|
||||
|
||||
~SoftInequalityAdder()
|
||||
{
|
||||
for (int32 c = 0; c < fModifiedIneqConstraints.CountItems(); c++)
|
||||
delete fModifiedIneqConstraints.ItemAt(c);
|
||||
for (int32 c = 0; c < fInequalitySoftConstraints.CountItems(); c++) {
|
||||
Constraint* con = fInequalitySoftConstraints.ItemAt(c);
|
||||
fLinearSpec->RemoveVariable(con->LeftSide()->ItemAt(0)->Var());
|
||||
// this also deletes the constraint
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
LinearSpec* fLinearSpec;
|
||||
ConstraintList fModifiedIneqConstraints;
|
||||
ConstraintList fInequalitySoftConstraints;
|
||||
};
|
||||
|
||||
|
||||
ResultType
|
||||
ActiveSetSolver::Solve()
|
||||
{
|
||||
int32 nConstraints = fConstraints.CountItems();
|
||||
|
||||
// make a copy of the original constraints and create soft inequality
|
||||
// constraints
|
||||
ConstraintList allConstraints(fConstraints);
|
||||
SoftInequalityAdder adder(fLinearSpec, allConstraints);
|
||||
|
||||
int32 nConstraints = allConstraints.CountItems();
|
||||
int32 nVariables = fVariables.CountItems();
|
||||
|
||||
if (nVariables > nConstraints) {
|
||||
@@ -404,15 +477,16 @@ ActiveSetSolver::Solve()
|
||||
// setup constraint matrix and add slack variables if necessary
|
||||
int32 rowIndex = 0;
|
||||
for (int32 c = 0; c < nConstraints; c++) {
|
||||
Constraint* constraint = fConstraints.ItemAt(c);
|
||||
if (constraint->IsSoft())
|
||||
Constraint* constraint = allConstraints.ItemAt(c);
|
||||
if (is_soft(constraint))
|
||||
continue;
|
||||
SummandList* leftSide = constraint->LeftSide();
|
||||
system.B(rowIndex) = constraint->RightSide();
|
||||
for (int32 sIndex = 0; sIndex < leftSide->CountItems(); sIndex++ ) {
|
||||
Summand* summand = leftSide->ItemAt(sIndex);
|
||||
double coefficient = summand->Coeff();
|
||||
system.A(rowIndex, summand->VariableIndex()) = coefficient;
|
||||
int32 columnIndex = summand->VariableIndex();
|
||||
system.A(rowIndex, columnIndex) = coefficient;
|
||||
}
|
||||
if (constraint->Op() == kLE) {
|
||||
system.A(rowIndex, slackIndex) = 1;
|
||||
@@ -436,8 +510,9 @@ ActiveSetSolver::Solve()
|
||||
system.Results(results, nVariables + nConstraints);
|
||||
TRACE("base system solved\n");
|
||||
|
||||
LayoutOptimizer optimizer(fConstraints, nVariables);
|
||||
optimizer.Solve(results);
|
||||
LayoutOptimizer optimizer(allConstraints, nVariables);
|
||||
if (!optimizer.Solve(results))
|
||||
return kInfeasible;
|
||||
|
||||
// back to the variables
|
||||
for (int32 i = 0; i < nVariables; i++)
|
||||
@@ -487,6 +562,7 @@ ActiveSetSolver::VariableRangeChanged(Variable* variable)
|
||||
constraintGE = fLinearSpec->AddConstraint(1, variable, kGE, 0);
|
||||
if (constraintGE == NULL)
|
||||
return false;
|
||||
constraintGE->SetLabel("Var Min");
|
||||
fVariableGEConstraints.RemoveItemAt(variableIndex);
|
||||
fVariableGEConstraints.AddItem(constraintGE, variableIndex);
|
||||
}
|
||||
@@ -494,6 +570,7 @@ ActiveSetSolver::VariableRangeChanged(Variable* variable)
|
||||
constraintLE = fLinearSpec->AddConstraint(1, variable, kLE, 20000);
|
||||
if (constraintLE == NULL)
|
||||
return false;
|
||||
constraintLE->SetLabel("Var Max");
|
||||
fVariableLEConstraints.RemoveItemAt(variableIndex);
|
||||
fVariableLEConstraints.AddItem(constraintLE, variableIndex);
|
||||
}
|
||||
@@ -509,14 +586,14 @@ ActiveSetSolver::VariableRangeChanged(Variable* variable)
|
||||
bool
|
||||
ActiveSetSolver::ConstraintAdded(Constraint* constraint)
|
||||
{
|
||||
return QPSolverInterface::ConstraintAdded(constraint);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
ActiveSetSolver::ConstraintRemoved(Constraint* constraint)
|
||||
{
|
||||
return QPSolverInterface::ConstraintRemoved(constraint);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -541,6 +618,13 @@ ActiveSetSolver::OperatorChanged(Constraint* constraint)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
ActiveSetSolver::PenaltiesChanged(Constraint* constraint)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
ActiveSetSolver::SaveModel(const char* fileName)
|
||||
{
|
||||
@@ -548,57 +632,6 @@ ActiveSetSolver::SaveModel(const char* fileName)
|
||||
}
|
||||
|
||||
|
||||
BSize
|
||||
ActiveSetSolver::MinSize(Variable* width, Variable* height)
|
||||
{
|
||||
ConstraintList softConstraints;
|
||||
_RemoveSoftConstraint(softConstraints);
|
||||
|
||||
Constraint* heightConstraint = fLinearSpec->AddConstraint(1, height,
|
||||
kEQ, 0, 5, 5);
|
||||
Constraint* widthConstraint = fLinearSpec->AddConstraint(1, width,
|
||||
kEQ, 0, 5, 5);
|
||||
ResultType result = Solve();
|
||||
fLinearSpec->RemoveConstraint(heightConstraint);
|
||||
fLinearSpec->RemoveConstraint(widthConstraint);
|
||||
|
||||
_AddSoftConstraint(softConstraints);
|
||||
|
||||
if (result == kUnbounded)
|
||||
return kMinSize;
|
||||
if (result != kOptimal)
|
||||
TRACE("Could not solve the layout specification (%d). ", result);
|
||||
|
||||
return BSize(width->Value(), height->Value());
|
||||
}
|
||||
|
||||
|
||||
BSize
|
||||
ActiveSetSolver::MaxSize(Variable* width, Variable* height)
|
||||
{
|
||||
ConstraintList softConstraints;
|
||||
_RemoveSoftConstraint(softConstraints);
|
||||
|
||||
const double kHugeValue = 32000;
|
||||
Constraint* heightConstraint = fLinearSpec->AddConstraint(1, height,
|
||||
kEQ, kHugeValue, 5, 5);
|
||||
Constraint* widthConstraint = fLinearSpec->AddConstraint(1, width,
|
||||
kEQ, kHugeValue, 5, 5);
|
||||
ResultType result = Solve();
|
||||
fLinearSpec->RemoveConstraint(heightConstraint);
|
||||
fLinearSpec->RemoveConstraint(widthConstraint);
|
||||
|
||||
_AddSoftConstraint(softConstraints);
|
||||
|
||||
if (result == kUnbounded)
|
||||
return kMaxSize;
|
||||
if (result != kOptimal)
|
||||
TRACE("Could not solve the layout specification (%d). ", result);
|
||||
|
||||
return BSize(width->Value(), height->Value());
|
||||
}
|
||||
|
||||
|
||||
ResultType
|
||||
ActiveSetSolver::FindMaxs(const VariableList* variables)
|
||||
{
|
||||
@@ -632,10 +665,11 @@ ActiveSetSolver::_RemoveSoftConstraint(ConstraintList& list)
|
||||
ConstraintList allConstraints = fLinearSpec->Constraints();
|
||||
for (int i = 0; i < allConstraints.CountItems(); i++) {
|
||||
Constraint* constraint = allConstraints.ItemAt(i);
|
||||
if (!constraint->IsSoft())
|
||||
// soft eq an ineq constraint?
|
||||
if (constraint->PenaltyNeg() <= 0. && constraint->PenaltyPos() <= 0.)
|
||||
continue;
|
||||
|
||||
if (fLinearSpec->RemoveConstraint(constraint, false) == true)
|
||||
if (RemoveConstraint(constraint, false, false) == true)
|
||||
list.AddItem(constraint);
|
||||
}
|
||||
}
|
||||
@@ -647,7 +681,7 @@ ActiveSetSolver::_AddSoftConstraint(const ConstraintList& list)
|
||||
for (int i = 0; i < list.CountItems(); i++) {
|
||||
Constraint* constraint = list.ItemAt(i);
|
||||
// at least don't leak it
|
||||
if (fLinearSpec->AddConstraint(constraint) == false)
|
||||
if (AddConstraint(constraint, false) == false)
|
||||
delete constraint;
|
||||
}
|
||||
}
|
||||
@@ -661,13 +695,11 @@ ActiveSetSolver::_FindWithConstraintsNoSoft(const VariableList* variables,
|
||||
_RemoveSoftConstraint(softConstraints);
|
||||
|
||||
ConstraintList constraints;
|
||||
for (int32 i = variables->CountItems() - 1; i >= 0; i--) {
|
||||
for (int32 i = 0; i < variables->CountItems(); i++)
|
||||
constraints.AddItem(constraintFunc(fLinearSpec, variables->ItemAt(i)));
|
||||
}
|
||||
|
||||
ResultType result = Solve();
|
||||
|
||||
for (int32 i = constraints.CountItems() - 1; i >= 0; i--)
|
||||
for (int32 i = 0; i < constraints.CountItems(); i++)
|
||||
fLinearSpec->RemoveConstraint(constraints.ItemAt(i));
|
||||
|
||||
_AddSoftConstraint(softConstraints);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#define ACTICE_SET_SOLVER_H
|
||||
|
||||
|
||||
#include "QPSolverInterface.h"
|
||||
#include "LinearSpec.h"
|
||||
|
||||
|
||||
class EquationSystem {
|
||||
@@ -18,6 +18,8 @@ public:
|
||||
int32 Rows();
|
||||
int32 Columns();
|
||||
|
||||
//! Debug function: check bounds
|
||||
bool InRange(int32 row, int32 column);
|
||||
inline double& A(int32 row, int32 column);
|
||||
inline double& B(int32 row);
|
||||
/*! Copy the solved variables into results, keeping the original
|
||||
@@ -52,7 +54,7 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class ActiveSetSolver : public QPSolverInterface {
|
||||
class ActiveSetSolver : public LinearProgramming::SolverInterface {
|
||||
public:
|
||||
ActiveSetSolver(LinearSpec* linearSpec);
|
||||
~ActiveSetSolver();
|
||||
@@ -68,18 +70,17 @@ public:
|
||||
bool LeftSideChanged(Constraint* constraint);
|
||||
bool RightSideChanged(Constraint* constraint);
|
||||
bool OperatorChanged(Constraint* constraint);
|
||||
bool PenaltiesChanged(Constraint* constraint);
|
||||
|
||||
bool SaveModel(const char* fileName);
|
||||
|
||||
BSize MinSize(Variable* width, Variable* height);
|
||||
BSize MaxSize(Variable* width, Variable* height);
|
||||
|
||||
ResultType FindMaxs(const VariableList* variables);
|
||||
ResultType FindMins(const VariableList* variables);
|
||||
|
||||
void GetRangeConstraints(const Variable* var,
|
||||
const Constraint** _min,
|
||||
const Constraint** _max) const;
|
||||
|
||||
private:
|
||||
void _RemoveSoftConstraint(ConstraintList& list);
|
||||
void _AddSoftConstraint(const ConstraintList& list);
|
||||
|
||||
+110
-123
@@ -25,6 +25,36 @@
|
||||
#endif
|
||||
|
||||
|
||||
Constraint::Constraint()
|
||||
:
|
||||
fLS(NULL),
|
||||
fLeftSide(new SummandList),
|
||||
fOp(kEQ),
|
||||
fRightSide(0),
|
||||
fPenaltyNeg(-1),
|
||||
fPenaltyPos(-1)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Constraint::Constraint(Constraint* constraint)
|
||||
:
|
||||
fLS(NULL),
|
||||
fLeftSide(new SummandList),
|
||||
fOp(constraint->Op()),
|
||||
fRightSide(constraint->RightSide()),
|
||||
fPenaltyNeg(constraint->PenaltyNeg()),
|
||||
fPenaltyPos(constraint->PenaltyPos()),
|
||||
fLabel(constraint->Label())
|
||||
{
|
||||
SummandList* orgSummands = constraint->LeftSide();
|
||||
for (int32 i = 0; i < orgSummands->CountItems(); i++) {
|
||||
Summand* summand = orgSummands->ItemAt(i);
|
||||
fLeftSide->AddItem(new Summand(summand));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the index of the constraint.
|
||||
*
|
||||
@@ -33,6 +63,8 @@
|
||||
int32
|
||||
Constraint::Index() const
|
||||
{
|
||||
if (fLS == NULL)
|
||||
return -1;
|
||||
int32 i = fLS->Constraints().IndexOf(this);
|
||||
if (i == -1)
|
||||
STRACE(("Constraint not part of fLS->Constraints()."));
|
||||
@@ -59,11 +91,11 @@ Constraint::LeftSide()
|
||||
*
|
||||
* @param summands a BList containing the Summand objects that make up the new left side
|
||||
*/
|
||||
void
|
||||
Constraint::SetLeftSide(SummandList* summands)
|
||||
bool
|
||||
Constraint::SetLeftSide(SummandList* summands, bool deleteOldSummands)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
if (summands == NULL)
|
||||
debugger("Invalid summands");
|
||||
|
||||
// check left side
|
||||
for (int32 i = 0; i < summands->CountItems(); i++) {
|
||||
@@ -79,76 +111,76 @@ Constraint::SetLeftSide(SummandList* summands)
|
||||
}
|
||||
}
|
||||
|
||||
if (fLS == NULL) {
|
||||
if (deleteOldSummands)
|
||||
delete fLeftSide;
|
||||
fLeftSide = summands;
|
||||
return true;
|
||||
}
|
||||
|
||||
// notify the solver
|
||||
SummandList oldSummands;
|
||||
if (fLeftSide != NULL)
|
||||
oldSummands = *fLeftSide;
|
||||
if (deleteOldSummands)
|
||||
delete fLeftSide;
|
||||
fLeftSide = summands;
|
||||
fLS->UpdateLeftSide(this);
|
||||
if (fLS != NULL)
|
||||
fLS->UpdateLeftSide(this, &oldSummands);
|
||||
|
||||
if (deleteOldSummands) {
|
||||
for (int32 i = 0; i < oldSummands.CountItems(); i++)
|
||||
delete oldSummands.ItemAt(i);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bool
|
||||
Constraint::SetLeftSide(double coeff1, Variable* var1)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
SetLeftSide(fLeftSide);
|
||||
SummandList* list = new SummandList;
|
||||
list->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
return SetLeftSide(list, true);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bool
|
||||
Constraint::SetLeftSide(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff2, var2));
|
||||
SetLeftSide(fLeftSide);
|
||||
SummandList* list = new SummandList;
|
||||
list->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
list->AddItem(new(std::nothrow) Summand(coeff2, var2));
|
||||
return SetLeftSide(list, true);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bool
|
||||
Constraint::SetLeftSide(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff2, var2));
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff3, var3));
|
||||
SetLeftSide(fLeftSide);
|
||||
SummandList* list = new SummandList;
|
||||
list->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
list->AddItem(new(std::nothrow) Summand(coeff2, var2));
|
||||
list->AddItem(new(std::nothrow) Summand(coeff3, var3));
|
||||
return SetLeftSide(list, true);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bool
|
||||
Constraint::SetLeftSide(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2,
|
||||
double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff2, var2));
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff3, var3));
|
||||
fLeftSide->AddItem(new(std::nothrow) Summand(coeff4, var4));
|
||||
SetLeftSide(fLeftSide);
|
||||
SummandList* list = new SummandList;
|
||||
list->AddItem(new(std::nothrow) Summand(coeff1, var1));
|
||||
list->AddItem(new(std::nothrow) Summand(coeff2, var2));
|
||||
list->AddItem(new(std::nothrow) Summand(coeff3, var3));
|
||||
list->AddItem(new(std::nothrow) Summand(coeff4, var4));
|
||||
return SetLeftSide(list, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -172,11 +204,9 @@ Constraint::Op()
|
||||
void
|
||||
Constraint::SetOp(OperatorType value)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
|
||||
fOp = value;
|
||||
fLS->UpdateOperator(this);
|
||||
if (fLS != NULL)
|
||||
fLS->UpdateOperator(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -200,15 +230,13 @@ Constraint::RightSide() const
|
||||
void
|
||||
Constraint::SetRightSide(double value)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
|
||||
if (fRightSide == value)
|
||||
return;
|
||||
|
||||
fRightSide = value;
|
||||
|
||||
fLS->UpdateRightSide(this);
|
||||
if (fLS != NULL)
|
||||
fLS->UpdateRightSide(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -235,7 +263,8 @@ Constraint::SetPenaltyNeg(double value)
|
||||
{
|
||||
fPenaltyNeg = value;
|
||||
|
||||
fLS->UpdateLeftSide(this);
|
||||
if (fLS != NULL)
|
||||
fLS->UpdatePenalties(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -261,7 +290,8 @@ Constraint::SetPenaltyPos(double value)
|
||||
{
|
||||
fPenaltyPos = value;
|
||||
|
||||
fLS->UpdateLeftSide(this);
|
||||
if (fLS != NULL)
|
||||
fLS->UpdatePenalties(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -279,49 +309,10 @@ Constraint::SetLabel(const char* label)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the slack variable for the negative variations.
|
||||
*
|
||||
* @return the slack variable for the negative variations
|
||||
*/
|
||||
Variable*
|
||||
Constraint::DNeg() const
|
||||
{
|
||||
if (fDNegObjSummand == NULL)
|
||||
return NULL;
|
||||
return fDNegObjSummand->Var();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the slack variable for the positive variations.
|
||||
*
|
||||
* @return the slack variable for the positive variations
|
||||
*/
|
||||
Variable*
|
||||
Constraint::DPos() const
|
||||
{
|
||||
if (fDPosObjSummand == NULL)
|
||||
return NULL;
|
||||
return fDPosObjSummand->Var();
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Constraint::IsSoft() const
|
||||
{
|
||||
if (fOp != kEQ)
|
||||
return false;
|
||||
if (fPenaltyNeg > 0. || fPenaltyPos > 0.)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Constraint::IsValid()
|
||||
{
|
||||
return fIsValid;
|
||||
return fLS != NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -330,11 +321,11 @@ Constraint::Invalidate()
|
||||
{
|
||||
STRACE(("Constraint::Invalidate() on %d\n", this));
|
||||
|
||||
if (!fIsValid)
|
||||
if (fLS == NULL)
|
||||
return;
|
||||
|
||||
fIsValid = false;
|
||||
fLS->RemoveConstraint(this, false);
|
||||
fLS = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -346,25 +337,23 @@ Constraint::ToString() const
|
||||
string << fLabel;
|
||||
string << "(" << (int32)this << "): ";
|
||||
|
||||
if (fIsValid) {
|
||||
for (int i = 0; i < fLeftSide->CountItems(); i++) {
|
||||
Summand* s = static_cast<Summand*>(fLeftSide->ItemAt(i));
|
||||
if (i != 0 && s->Coeff() >= 0)
|
||||
string << " + ";
|
||||
string << (float)s->Coeff() << "*";
|
||||
string << "x";
|
||||
string << s->Var()->Index();
|
||||
string << " ";
|
||||
}
|
||||
string << ((fOp == kEQ) ? "== "
|
||||
: (fOp == kGE) ? ">= "
|
||||
: (fOp == kLE) ? "<= "
|
||||
: "?? ");
|
||||
string << (float)fRightSide;
|
||||
string << " PenaltyPos=" << (float)PenaltyPos();
|
||||
string << " PenaltyNeg=" << (float)PenaltyNeg();
|
||||
} else
|
||||
string << "invalid";
|
||||
for (int i = 0; i < fLeftSide->CountItems(); i++) {
|
||||
Summand* s = static_cast<Summand*>(fLeftSide->ItemAt(i));
|
||||
if (i != 0 && s->Coeff() >= 0)
|
||||
string << " + ";
|
||||
string << (float)s->Coeff() << "*";
|
||||
string << "x";
|
||||
string << s->Var()->Index();
|
||||
string << " ";
|
||||
}
|
||||
string << ((fOp == kEQ) ? "== "
|
||||
: (fOp == kGE) ? ">= "
|
||||
: (fOp == kLE) ? "<= "
|
||||
: "?? ");
|
||||
string << (float)fRightSide;
|
||||
string << " PenaltyPos=" << (float)PenaltyPos();
|
||||
string << " PenaltyNeg=" << (float)PenaltyNeg();
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
@@ -384,15 +373,13 @@ Constraint::Constraint(LinearSpec* ls, SummandList* summands, OperatorType op,
|
||||
double rightSide, double penaltyNeg, double penaltyPos)
|
||||
:
|
||||
fLS(ls),
|
||||
fLeftSide(NULL),
|
||||
fOp(op),
|
||||
fRightSide(rightSide),
|
||||
fPenaltyNeg(penaltyNeg),
|
||||
fPenaltyPos(penaltyPos),
|
||||
fDNegObjSummand(NULL),
|
||||
fDPosObjSummand(NULL),
|
||||
fIsValid(true)
|
||||
fPenaltyPos(penaltyPos)
|
||||
{
|
||||
SetLeftSide(summands);
|
||||
SetLeftSide(summands, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ StaticLibrary liblinprog.a :
|
||||
Constraint.cpp
|
||||
LayoutOptimizer.cpp
|
||||
LinearSpec.cpp
|
||||
QPSolverInterface.cpp
|
||||
Summand.cpp
|
||||
Variable.cpp
|
||||
;
|
||||
|
||||
@@ -30,6 +30,16 @@ using std::swap;
|
||||
using std::max;
|
||||
|
||||
|
||||
bool is_soft(Constraint* constraint)
|
||||
{
|
||||
if (constraint->Op() != LinearProgramming::kEQ)
|
||||
return false;
|
||||
if (constraint->PenaltyNeg() > 0. || constraint->PenaltyPos() > 0.)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*! \class BPrivate::Layout::LayoutOptimizer
|
||||
|
||||
Given a set of layout constraints, a feasible solution, and a desired
|
||||
@@ -208,48 +218,6 @@ copy_matrix(const double* const* A, double** B, int m, int n)
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
multiply_optimization_matrix_vector(const double* x, int n, double* y)
|
||||
{
|
||||
// The matrix has the form:
|
||||
// 2 -1 0 ... 0 0
|
||||
// -1 2 -1 0 ... . .
|
||||
// 0 -1 2 . .
|
||||
// . 0 . . .
|
||||
// . . 0 0
|
||||
// . . -1 0
|
||||
// 0 ... 0 -1 2 -1
|
||||
// 0 ... -1 1
|
||||
if (n == 1) {
|
||||
y[0] = x[0];
|
||||
return;
|
||||
}
|
||||
|
||||
y[0] = 2 * x[0] - x[1];
|
||||
for (int i = 1; i < n - 1; i++)
|
||||
y[i] = 2 * x[i] - x[i - 1] - x[i + 1];
|
||||
y[n - 1] = x[n - 1] - x[n - 2];
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
multiply_optimization_matrix_matrix(const double* const* A, int m, int n,
|
||||
double** B)
|
||||
{
|
||||
if (m == 1) {
|
||||
memcpy(B[0], A[0], n * sizeof(double));
|
||||
return;
|
||||
}
|
||||
|
||||
for (int k = 0; k < n; k++) {
|
||||
B[0][k] = 2 * A[0][k] - A[1][k];
|
||||
for (int i = 1; i < m - 1; i++)
|
||||
B[i][k] = 2 * A[i][k] - A[i - 1][k] - A[i + 1][k];
|
||||
B[m - 1][k] = A[m - 1][k] - A[m - 2][k];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - algorithms
|
||||
|
||||
#if 0
|
||||
@@ -542,7 +510,7 @@ LayoutOptimizer::SetConstraints(const ConstraintList& list, int32 variableCount)
|
||||
// set up soft constraint matrix
|
||||
for (int32 c = 0; c < fConstraints->CountItems(); c++) {
|
||||
Constraint* constraint = fConstraints->ItemAt(c);
|
||||
if (!constraint->IsSoft()) {
|
||||
if (!is_soft(constraint)) {
|
||||
rightSide[c] = 0;
|
||||
continue;
|
||||
}
|
||||
@@ -715,7 +683,7 @@ TRACE_ONLY(
|
||||
|
||||
for (int32 i = 0; i < constraintCount; i++) {
|
||||
Constraint* constraint = fConstraints->ItemAt(i);
|
||||
if (constraint->IsSoft())
|
||||
if (is_soft(constraint))
|
||||
continue;
|
||||
double actualValue = _ActualValue(constraint, x);
|
||||
TRACE("constraint %ld: actual: %f constraint: %f\n", i, actualValue,
|
||||
@@ -760,7 +728,7 @@ TRACE_ONLY(
|
||||
|
||||
for (int32 i = 0; i < activeCount; i++) {
|
||||
Constraint* constraint = activeConstraints.ItemAt(i);
|
||||
if (constraint->IsSoft())
|
||||
if (is_soft(constraint))
|
||||
continue;
|
||||
SummandList* summands = constraint->LeftSide();
|
||||
for (int32 s = 0; s < summands->CountItems(); s++) {
|
||||
|
||||
@@ -21,6 +21,9 @@ void zero_matrix(double** A, int m, int n);
|
||||
int compute_dependencies(double** a, int m, int n, bool* independent);
|
||||
|
||||
|
||||
bool is_soft(Constraint* constraint);
|
||||
|
||||
|
||||
class LayoutOptimizer {
|
||||
public:
|
||||
LayoutOptimizer(const ConstraintList& list,
|
||||
|
||||
+150
-131
@@ -9,7 +9,6 @@
|
||||
#include "LinearSpec.h"
|
||||
|
||||
#include <new>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ActiveSetSolver.h"
|
||||
|
||||
@@ -35,6 +34,56 @@ SolverInterface::SolverInterface(LinearSpec* linSpec)
|
||||
}
|
||||
|
||||
|
||||
SolverInterface::~SolverInterface()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
SolverInterface::AddConstraint(Constraint* constraint, bool notifyListener)
|
||||
{
|
||||
return fLinearSpec->AddConstraint(constraint, notifyListener);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
SolverInterface::RemoveConstraint(Constraint* constraint, bool deleteConstraint,
|
||||
bool notifyListener)
|
||||
{
|
||||
return fLinearSpec->RemoveConstraint(constraint, deleteConstraint,
|
||||
notifyListener);
|
||||
}
|
||||
|
||||
|
||||
SpecificationListener::~SpecificationListener()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SpecificationListener::VariableAdded(Variable* variable)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SpecificationListener::VariableRemoved(Variable* variable)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SpecificationListener::ConstraintAdded(Constraint* constraint)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SpecificationListener::ConstraintRemoved(Constraint* constraint)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates a new specification for a linear programming problem.
|
||||
@@ -64,6 +113,20 @@ LinearSpec::~LinearSpec()
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::AddListener(SpecificationListener* listener)
|
||||
{
|
||||
return fListeners.AddItem(listener);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::RemoveListener(SpecificationListener* listener)
|
||||
{
|
||||
return fListeners.RemoveItem(listener);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new variable to the specification.
|
||||
*
|
||||
@@ -106,6 +169,10 @@ LinearSpec::AddVariable(Variable* variable)
|
||||
RemoveVariable(variable, false);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < fListeners.CountItems(); i++)
|
||||
fListeners.ItemAt(i)->VariableAdded(variable);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -121,7 +188,6 @@ LinearSpec::RemoveVariable(Variable* variable, bool deleteVariable)
|
||||
if (fVariables.RemoveItem(variable) == false)
|
||||
return false;
|
||||
fUsedVariables.RemoveItem(variable);
|
||||
|
||||
variable->fIsValid = false;
|
||||
|
||||
// invalidate all constraints that use this variable
|
||||
@@ -130,9 +196,6 @@ LinearSpec::RemoveVariable(Variable* variable, bool deleteVariable)
|
||||
for (int i = 0; i < constraints.CountItems(); i++) {
|
||||
Constraint* constraint = constraints.ItemAt(i);
|
||||
|
||||
if (!constraint->IsValid())
|
||||
continue;
|
||||
|
||||
SummandList* summands = constraint->LeftSide();
|
||||
for (int j = 0; j < summands->CountItems(); j++) {
|
||||
Summand* summand = summands->ItemAt(j);
|
||||
@@ -145,9 +208,12 @@ LinearSpec::RemoveVariable(Variable* variable, bool deleteVariable)
|
||||
for (int i = 0; i < markedForInvalidation.CountItems(); i++)
|
||||
RemoveConstraint(markedForInvalidation.ItemAt(i));
|
||||
|
||||
|
||||
if (deleteVariable)
|
||||
delete variable;
|
||||
|
||||
for (int32 i = 0; i < fListeners.CountItems(); i++)
|
||||
fListeners.ItemAt(i)->VariableRemoved(variable);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -177,6 +243,20 @@ LinearSpec::UpdateRange(Variable* variable)
|
||||
|
||||
bool
|
||||
LinearSpec::AddConstraint(Constraint* constraint)
|
||||
{
|
||||
return AddConstraint(constraint, true);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::RemoveConstraint(Constraint* constraint, bool deleteConstraint)
|
||||
{
|
||||
return RemoveConstraint(constraint, deleteConstraint, true);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::AddConstraint(Constraint* constraint, bool notifyListener)
|
||||
{
|
||||
if (!fConstraints.AddItem(constraint))
|
||||
return false;
|
||||
@@ -185,8 +265,7 @@ LinearSpec::AddConstraint(Constraint* constraint)
|
||||
SummandList* leftSide = constraint->LeftSide();
|
||||
for (int i = 0; i < leftSide->CountItems(); i++) {
|
||||
Variable* var = leftSide->ItemAt(i)->Var();
|
||||
if (var->AddReference() == 1)
|
||||
fUsedVariables.AddItem(var);
|
||||
_AddConstraintRef(var);
|
||||
}
|
||||
|
||||
if (!fSolver->ConstraintAdded(constraint)) {
|
||||
@@ -194,35 +273,81 @@ LinearSpec::AddConstraint(Constraint* constraint)
|
||||
return false;
|
||||
}
|
||||
|
||||
constraint->fIsValid = true;
|
||||
constraint->fLS = this;
|
||||
|
||||
if (notifyListener) {
|
||||
for (int32 i = 0; i < fListeners.CountItems(); i++)
|
||||
fListeners.ItemAt(i)->ConstraintAdded(constraint);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::RemoveConstraint(Constraint* constraint, bool deleteConstraint)
|
||||
LinearSpec::RemoveConstraint(Constraint* constraint, bool deleteConstraint,
|
||||
bool notifyListener)
|
||||
{
|
||||
if (constraint == NULL)
|
||||
return false;
|
||||
fSolver->ConstraintRemoved(constraint);
|
||||
if (!fConstraints.RemoveItem(constraint))
|
||||
return false;
|
||||
constraint->fIsValid = false;
|
||||
|
||||
SummandList* leftSide = constraint->LeftSide();
|
||||
for (int i = 0; i < leftSide->CountItems(); i++) {
|
||||
for (int32 i = 0; i < leftSide->CountItems(); i++) {
|
||||
Variable* var = leftSide->ItemAt(i)->Var();
|
||||
if (var->RemoveReference() == 0)
|
||||
fUsedVariables.RemoveItem(var);
|
||||
_RemoveConstraintRef(var);
|
||||
}
|
||||
|
||||
if (notifyListener) {
|
||||
for (int32 i = 0; i < fListeners.CountItems(); i++)
|
||||
fListeners.ItemAt(i)->ConstraintRemoved(constraint);
|
||||
}
|
||||
|
||||
constraint->fLS = NULL;
|
||||
if (deleteConstraint)
|
||||
delete constraint;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::UpdateLeftSide(Constraint* constraint)
|
||||
void
|
||||
LinearSpec::_AddConstraintRef(Variable* var)
|
||||
{
|
||||
if (var->AddReference() == 1)
|
||||
fUsedVariables.AddItem(var);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
LinearSpec::_RemoveConstraintRef(Variable* var)
|
||||
{
|
||||
if (var->RemoveReference() == 0)
|
||||
fUsedVariables.RemoveItem(var);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
LinearSpec::UpdateLeftSide(Constraint* constraint,
|
||||
const SummandList* oldSummands)
|
||||
{
|
||||
SummandList* leftSide = constraint->LeftSide();
|
||||
if (leftSide != NULL) {
|
||||
for (int32 i = 0; i < leftSide->CountItems(); i++) {
|
||||
Variable* var = leftSide->ItemAt(i)->Var();
|
||||
_AddConstraintRef(var);
|
||||
}
|
||||
}
|
||||
if (oldSummands != NULL) {
|
||||
// the summands have changed, update the var ref count
|
||||
for (int32 i = 0; i < oldSummands->CountItems(); i++) {
|
||||
Variable* var = oldSummands->ItemAt(i)->Var();
|
||||
_RemoveConstraintRef(var);
|
||||
}
|
||||
}
|
||||
|
||||
if (!fSolver->LeftSideChanged(constraint))
|
||||
return false;
|
||||
return true;
|
||||
@@ -247,105 +372,12 @@ LinearSpec::UpdateOperator(Constraint* constraint)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new hard linear constraint to the specification.
|
||||
*
|
||||
* @param coeffs the constraint's coefficients
|
||||
* @param vars the constraint's variables
|
||||
* @param op the constraint's operand
|
||||
* @param rightSide the constant value on the constraint's right side
|
||||
* @return the new constraint
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(SummandList* summands, OperatorType op,
|
||||
double rightSide)
|
||||
bool
|
||||
LinearSpec::UpdatePenalties(Constraint* constraint)
|
||||
{
|
||||
return AddConstraint(summands, op, rightSide, -1, -1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new hard linear constraint to the specification with a single summand.
|
||||
*
|
||||
* @param coeff1 the constraint's first coefficient
|
||||
* @param var1 the constraint's first variable
|
||||
* @param op the constraint's operand
|
||||
* @param rightSide the constant value on the constraint's right side
|
||||
* @return the new constraint
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide)
|
||||
{
|
||||
return AddConstraint(coeff1, var1, op, rightSide, -1, -1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new hard linear constraint to the specification with two summands.
|
||||
*
|
||||
* @param coeff1 the constraint's first coefficient
|
||||
* @param var1 the constraint's first variable
|
||||
* @param coeff2 the constraint's second coefficient
|
||||
* @param var2 the constraint's second variable
|
||||
* @param op the constraint's operand
|
||||
* @param rightSide the constant value on the constraint's right side
|
||||
* @return the new constraint
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, OperatorType op, double rightSide)
|
||||
{
|
||||
return AddConstraint(coeff1, var1, coeff2, var2, op, rightSide, -1,
|
||||
-1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new hard linear constraint to the specification with three summands.
|
||||
*
|
||||
* @param coeff1 the constraint's first coefficient
|
||||
* @param var1 the constraint's first variable
|
||||
* @param coeff2 the constraint's second coefficient
|
||||
* @param var2 the constraint's second variable
|
||||
* @param coeff3 the constraint's third coefficient
|
||||
* @param var3 the constraint's third variable
|
||||
* @param op the constraint's operand
|
||||
* @param rightSide the constant value on the constraint's right side
|
||||
* @return the new constraint
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, double coeff3, Variable* var3,
|
||||
OperatorType op, double rightSide)
|
||||
{
|
||||
return AddConstraint(coeff1, var1, coeff2, var2, coeff3, var3, op,
|
||||
rightSide, -1, -1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new hard linear constraint to the specification with four summands.
|
||||
*
|
||||
* @param coeff1 the constraint's first coefficient
|
||||
* @param var1 the constraint's first variable
|
||||
* @param coeff2 the constraint's second coefficient
|
||||
* @param var2 the constraint's second variable
|
||||
* @param coeff3 the constraint's third coefficient
|
||||
* @param var3 the constraint's third variable
|
||||
* @param coeff4 the constraint's fourth coefficient
|
||||
* @param var4 the constraint's fourth variable
|
||||
* @param op the constraint's operand
|
||||
* @param rightSide the constant value on the constraint's right side
|
||||
* @return the new constraint
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4, OperatorType op, double rightSide)
|
||||
{
|
||||
return AddConstraint(coeff1, var1, coeff2, var2, coeff3, var3, coeff4, var4,
|
||||
op, rightSide, -1, -1);
|
||||
if (!fSolver->PenaltiesChanged(constraint))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -486,32 +518,19 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
}
|
||||
|
||||
|
||||
BSize
|
||||
LinearSpec::MinSize(Variable* width, Variable* height)
|
||||
{
|
||||
return fSolver->MinSize(width, height);
|
||||
}
|
||||
|
||||
|
||||
BSize
|
||||
LinearSpec::MaxSize(Variable* width, Variable* height)
|
||||
{
|
||||
return fSolver->MaxSize(width, height);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ResultType
|
||||
LinearSpec::FindMins(const VariableList* variables)
|
||||
{
|
||||
return fSolver->FindMins(variables);
|
||||
fResult = fSolver->FindMins(variables);
|
||||
return fResult;
|
||||
}
|
||||
|
||||
|
||||
ResultType
|
||||
LinearSpec::FindMaxs(const VariableList* variables)
|
||||
{
|
||||
return fSolver->FindMaxs(variables);
|
||||
fResult = fSolver->FindMaxs(variables);
|
||||
return fResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011, Haiku.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Clemens Zeidler <haiku@clemens-zeidler.de>
|
||||
*/
|
||||
|
||||
|
||||
#include "QPSolverInterface.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace LinearProgramming;
|
||||
|
||||
|
||||
QPSolverInterface::QPSolverInterface(LinearSpec* linearSpec)
|
||||
:
|
||||
SolverInterface(linearSpec)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
QPSolverInterface::~QPSolverInterface()
|
||||
{
|
||||
/*for (unsigned int i = 0; i < fInEqSlackConstraints.size(); i++) {
|
||||
SoftInEqData& data = fInEqSlackConstraints[i];
|
||||
_DestroyData(data);
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
QPSolverInterface::ConstraintAdded(Constraint* constraint)
|
||||
{
|
||||
if (_IsSoftInequality(constraint) == false)
|
||||
return true;
|
||||
|
||||
SoftInEqData data;
|
||||
double coeff = -1;
|
||||
if (constraint->Op() == kGE)
|
||||
coeff = 1;
|
||||
data.slack = new Summand(coeff, fLinearSpec->AddVariable());
|
||||
data.slack->Var()->SetRange(0, 20000);
|
||||
data.minSlackConstraint = fLinearSpec->AddConstraint(1.,
|
||||
data.slack->Var(), kEQ, 0., constraint->PenaltyNeg(),
|
||||
constraint->PenaltyPos());
|
||||
data.constraint = constraint;
|
||||
fInEqSlackConstraints.push_back(data);
|
||||
|
||||
SummandList* leftSide = constraint->LeftSide();
|
||||
leftSide->AddItem(data.slack);
|
||||
constraint->SetLeftSide(leftSide);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
QPSolverInterface::ConstraintRemoved(Constraint* constraint)
|
||||
{
|
||||
if (_IsSoftInequality(constraint) == false)
|
||||
return true;
|
||||
|
||||
for (unsigned int i = 0; i < fInEqSlackConstraints.size(); i++) {
|
||||
SoftInEqData& data = fInEqSlackConstraints[i];
|
||||
if (data.constraint != constraint)
|
||||
continue;
|
||||
|
||||
SummandList* leftSide = constraint->LeftSide();
|
||||
leftSide->RemoveItem(data.slack);
|
||||
constraint->SetLeftSide(leftSide);
|
||||
_DestroyData(data);
|
||||
|
||||
fInEqSlackConstraints.erase(fInEqSlackConstraints.begin() + i);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
QPSolverInterface::_DestroyData(SoftInEqData& data)
|
||||
{
|
||||
fLinearSpec->RemoveConstraint(data.minSlackConstraint);
|
||||
fLinearSpec->RemoveVariable(data.slack->Var());
|
||||
delete data.slack;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
QPSolverInterface::_IsSoftInequality(Constraint* constraint)
|
||||
{
|
||||
if (constraint->PenaltyNeg() <= 0. && constraint->PenaltyPos() <= 0.)
|
||||
return false;
|
||||
if (constraint->Op() != kEQ)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011, Clemens Zeidler <haiku@clemens-zeidler.de>
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef QP_SOLVER_INTERFACE_H
|
||||
#define QP_SOLVER_INTERFACE_H
|
||||
|
||||
|
||||
#include "LinearSpec.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
||||
/*! The purpose of this class is to manage soft inequality constraints. This is
|
||||
done by adding a slack variable which is minimized. For example:
|
||||
$$width - s < maxSize$$
|
||||
$$s = 0, soft constraint$$
|
||||
*/
|
||||
class QPSolverInterface : public LinearProgramming::SolverInterface {
|
||||
public:
|
||||
QPSolverInterface(LinearSpec* linearSpec);
|
||||
virtual ~QPSolverInterface();
|
||||
|
||||
virtual bool ConstraintAdded(Constraint* constraint);
|
||||
virtual bool ConstraintRemoved(Constraint* constraint);
|
||||
|
||||
private:
|
||||
struct SoftInEqData {
|
||||
Summand* slack;
|
||||
Constraint* constraint;
|
||||
Constraint* minSlackConstraint;
|
||||
};
|
||||
|
||||
typedef std::vector<SoftInEqData> SoftInEqList;
|
||||
|
||||
inline void _DestroyData(SoftInEqData& data);
|
||||
inline bool _IsSoftInequality(Constraint* constraint);
|
||||
|
||||
SoftInEqList fInEqSlackConstraints;
|
||||
};
|
||||
|
||||
|
||||
#endif // QP_SOLVER_INTERFACE_H
|
||||
@@ -9,6 +9,28 @@
|
||||
#include "Variable.h"
|
||||
|
||||
|
||||
Summand::Summand(Summand* summand)
|
||||
:
|
||||
fCoeff(summand->Coeff()),
|
||||
fVar(summand->Var())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Summand::Summand(double coeff, Variable* var)
|
||||
:
|
||||
fCoeff(coeff),
|
||||
fVar(var)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Summand::~Summand()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the summmand's coefficient.
|
||||
*
|
||||
@@ -62,23 +84,3 @@ Summand::VariableIndex()
|
||||
{
|
||||
return fVar->Index();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
Summand::~Summand()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
Summand::Summand(double coeff, Variable* var)
|
||||
{
|
||||
fCoeff = coeff;
|
||||
fVar = var;
|
||||
fUsedInPenaltyFunction = false;
|
||||
}
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
|
||||
#include "Variable.h"
|
||||
|
||||
#include <float.h> // for DBL_MAX
|
||||
|
||||
#include <File.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "Constraint.h"
|
||||
#include "LinearSpec.h"
|
||||
@@ -167,18 +165,22 @@ Variable::SetLabel(const char* label)
|
||||
BString
|
||||
Variable::ToString() const
|
||||
{
|
||||
BString string;
|
||||
BString string = "x";
|
||||
string << Index() << " ";
|
||||
if (fLabel) {
|
||||
string << fLabel;
|
||||
string << fLabel << ": ";
|
||||
if (!fIsValid)
|
||||
string << "(invalid)";
|
||||
} else {
|
||||
string << "Variable ";
|
||||
if (!fIsValid)
|
||||
string << "(invalid," << (int32)this << ")";
|
||||
else
|
||||
string << Index();
|
||||
string << Index() << ": ";
|
||||
}
|
||||
string << Value();
|
||||
BString pointerString;
|
||||
pointerString.SetToFormat("%p", this);
|
||||
string << " (" << pointerString << ")";
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@ WindowArea::WindowArea(Crossing* leftTop, Crossing* rightTop,
|
||||
fWidthConstraint(NULL),
|
||||
fHeightConstraint(NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -320,6 +319,12 @@ WindowArea::PropagateToGroup(SATGroup* group)
|
||||
if (!newLeftTop || !newRightTop || !newLeftBottom || !newRightBottom)
|
||||
return false;
|
||||
|
||||
// hold a ref to the crossings till we cleaned up everything
|
||||
BReference<Crossing> oldLeftTop = fLeftTopCrossing;
|
||||
BReference<Crossing> oldRightTop = fRightTopCrossing;
|
||||
BReference<Crossing> oldLeftBottom = fLeftBottomCrossing;
|
||||
BReference<Crossing> oldRightBottom = fRightBottomCrossing;
|
||||
|
||||
fLeftTopCrossing = newLeftTop;
|
||||
fRightTopCrossing = newRightTop;
|
||||
fLeftBottomCrossing = newLeftBottom;
|
||||
@@ -331,6 +336,7 @@ WindowArea::PropagateToGroup(SATGroup* group)
|
||||
// manage constraints
|
||||
if (Init(group) == false)
|
||||
return false;
|
||||
|
||||
oldGroup->fWindowAreaList.RemoveItem(this);
|
||||
for (int32 i = 0; i < fWindowList.CountItems(); i++) {
|
||||
SATWindow* window = fWindowList.ItemAt(i);
|
||||
@@ -360,12 +366,15 @@ WindowArea::MoveToTopLayer(SATWindow* window)
|
||||
void
|
||||
WindowArea::_UninitConstraints()
|
||||
{
|
||||
delete fMinWidthConstraint;
|
||||
delete fMinHeightConstraint;
|
||||
delete fMaxWidthConstraint;
|
||||
delete fMaxHeightConstraint;
|
||||
delete fWidthConstraint;
|
||||
delete fHeightConstraint;
|
||||
LinearSpec* linearSpec = fGroup->GetLinearSpec();
|
||||
|
||||
linearSpec->RemoveConstraint(fMinWidthConstraint, true);
|
||||
linearSpec->RemoveConstraint(fMinHeightConstraint, true);
|
||||
linearSpec->RemoveConstraint(fMaxWidthConstraint, true);
|
||||
linearSpec->RemoveConstraint(fMaxHeightConstraint, true);
|
||||
linearSpec->RemoveConstraint(fWidthConstraint, true);
|
||||
linearSpec->RemoveConstraint(fHeightConstraint, true);
|
||||
|
||||
fMinWidthConstraint = NULL;
|
||||
fMinHeightConstraint = NULL;
|
||||
fMaxWidthConstraint = NULL;
|
||||
@@ -1157,14 +1166,12 @@ SATGroup::_SplitGroupIfNecessary(WindowArea* removedArea)
|
||||
while (_FindConnectedGroup(neighbourWindows, removedArea, newGroup)) {
|
||||
STRACE_SAT("Connected group found; %i window(s)\n",
|
||||
(int)newGroup.CountItems());
|
||||
|
||||
if (newGroup.CountItems() == 1
|
||||
&& newGroup.ItemAt(0)->WindowList().CountItems() == 1) {
|
||||
SATWindow* window = newGroup.ItemAt(0)->WindowList().ItemAt(0);
|
||||
RemoveWindow(window);
|
||||
_EnsureGroupIsOnScreen(window->GetGroup());
|
||||
}
|
||||
else if (ownGroupProcessed)
|
||||
} else if (ownGroupProcessed)
|
||||
_SpawnNewGroup(newGroup);
|
||||
else {
|
||||
_EnsureGroupIsOnScreen(this);
|
||||
|
||||
@@ -220,11 +220,9 @@ private:
|
||||
Constraint* fMinHeightConstraint;
|
||||
Constraint* fMaxWidthConstraint;
|
||||
Constraint* fMaxHeightConstraint;
|
||||
Constraint* fKeepMaxWidthConstraint;
|
||||
Constraint* fKeepMaxHeightConstraint;
|
||||
Constraint* fWidthConstraint;
|
||||
Constraint* fHeightConstraint;
|
||||
|
||||
|
||||
MagneticBorder fMagneticBorder;
|
||||
};
|
||||
|
||||
|
||||
@@ -308,6 +308,24 @@ StackAndTile::WindowActitvated(Window* window)
|
||||
void
|
||||
StackAndTile::WindowSentBehind(Window* window, Window* behindOf)
|
||||
{
|
||||
SATWindow* satWindow = GetSATWindow(window);
|
||||
if (satWindow == NULL)
|
||||
return;
|
||||
SATGroup* group = satWindow->GetGroup();
|
||||
if (group == NULL)
|
||||
return;
|
||||
Desktop* desktop = satWindow->GetWindow()->Desktop();
|
||||
if (desktop == NULL)
|
||||
return;
|
||||
|
||||
const WindowAreaList& areaList = group->GetAreaList();
|
||||
for (int32 i = 0; i < areaList.CountItems(); i++) {
|
||||
WindowArea* area = areaList.ItemAt(i);
|
||||
SATWindow* topWindow = area->TopWindow();
|
||||
if (topWindow == NULL || topWindow == satWindow)
|
||||
continue;
|
||||
desktop->SendWindowBehind(topWindow->GetWindow(), behindOf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -440,7 +440,7 @@ AddOnManager::_UnregisterAddOn(BEntry& entry)
|
||||
gInputServer->SetMethodReplicant(NULL);
|
||||
} else if (method != NULL) {
|
||||
BMessage msg(IS_REMOVE_METHOD);
|
||||
msg.AddInt32("cookie", (uint32)method);
|
||||
msg.AddInt32("cookie", method->fOwner->Cookie());
|
||||
if (gInputServer->MethodReplicant())
|
||||
gInputServer->MethodReplicant()->SendMessage(&msg);
|
||||
}
|
||||
|
||||
@@ -625,11 +625,23 @@ void
|
||||
InputServer::HandleSetMethod(BMessage* message)
|
||||
{
|
||||
CALLED();
|
||||
uint32 cookie;
|
||||
if (message->FindInt32("cookie", (int32*)&cookie) == B_OK) {
|
||||
BInputServerMethod *method = (BInputServerMethod*)cookie;
|
||||
PRINT(("%s cookie %p\n", __PRETTY_FUNCTION__, method));
|
||||
SetActiveMethod(method);
|
||||
int32 cookie;
|
||||
if (message->FindInt32("cookie", &cookie) != B_OK)
|
||||
return;
|
||||
if (cookie == gKeymapMethod.fOwner->Cookie()) {
|
||||
SetActiveMethod(&gKeymapMethod);
|
||||
} else {
|
||||
BAutolock lock(InputServer::gInputMethodListLocker);
|
||||
for (int32 i = 0; i < gInputMethodList.CountItems(); i++) {
|
||||
BInputServerMethod* method
|
||||
= (BInputServerMethod*)InputServer::gInputMethodList.ItemAt(i);
|
||||
if (method->fOwner->Cookie() == cookie) {
|
||||
PRINT(("%s cookie %" B_PRId32 "\n", __PRETTY_FUNCTION__,
|
||||
cookie));
|
||||
SetActiveMethod(method);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -99,6 +99,7 @@ class _BMethodAddOn_ {
|
||||
status_t SetMenu(const BMenu* menu, const BMessenger& messenger);
|
||||
status_t MethodActivated(bool activate);
|
||||
status_t AddMethod();
|
||||
int32 Cookie() { return fCookie; }
|
||||
|
||||
private:
|
||||
BInputServerMethod* fMethod;
|
||||
@@ -106,6 +107,7 @@ class _BMethodAddOn_ {
|
||||
uchar fIcon[16*16*1];
|
||||
const BMenu* fMenu;
|
||||
BMessenger fMessenger;
|
||||
int32 fCookie;
|
||||
};
|
||||
|
||||
class KeymapMethod : public BInputServerMethod {
|
||||
|
||||
@@ -153,10 +153,14 @@ BInputServerMethod::_ReservedInputServerMethod4()
|
||||
}
|
||||
|
||||
|
||||
static int32 sNextMethodCookie = 1;
|
||||
|
||||
|
||||
_BMethodAddOn_::_BMethodAddOn_(BInputServerMethod *method, const char *name,
|
||||
const uchar *icon)
|
||||
: fMethod(method),
|
||||
fMenu(NULL)
|
||||
fMenu(NULL),
|
||||
fCookie(sNextMethodCookie++)
|
||||
{
|
||||
fName = strdup(name);
|
||||
if (icon != NULL)
|
||||
@@ -183,7 +187,7 @@ _BMethodAddOn_::SetName(const char* name)
|
||||
fName = strdup(name);
|
||||
|
||||
BMessage msg(IS_UPDATE_NAME);
|
||||
msg.AddInt32("cookie", (uint32)fMethod);
|
||||
msg.AddInt32("cookie", fCookie);
|
||||
msg.AddString("name", name);
|
||||
if (((InputServer*)be_app)->MethodReplicant())
|
||||
return ((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
|
||||
@@ -203,7 +207,7 @@ _BMethodAddOn_::SetIcon(const uchar* icon)
|
||||
memset(fIcon, 0x1d, 16*16*1);
|
||||
|
||||
BMessage msg(IS_UPDATE_ICON);
|
||||
msg.AddInt32("cookie", (uint32)fMethod);
|
||||
msg.AddInt32("cookie", fCookie);
|
||||
msg.AddData("icon", B_RAW_TYPE, icon, 16*16*1);
|
||||
if (((InputServer*)be_app)->MethodReplicant())
|
||||
return ((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
|
||||
@@ -220,7 +224,7 @@ _BMethodAddOn_::SetMenu(const BMenu *menu, const BMessenger &messenger)
|
||||
fMessenger = messenger;
|
||||
|
||||
BMessage msg(IS_UPDATE_MENU);
|
||||
msg.AddInt32("cookie", (uint32)fMethod);
|
||||
msg.AddInt32("cookie", fCookie);
|
||||
BMessage menuMsg;
|
||||
if (menu)
|
||||
menu->Archive(&menuMsg);
|
||||
@@ -238,10 +242,10 @@ _BMethodAddOn_::MethodActivated(bool activate)
|
||||
{
|
||||
CALLED();
|
||||
if (fMethod) {
|
||||
PRINT(("%s cookie %p\n", __PRETTY_FUNCTION__, fMethod));
|
||||
PRINT(("%s cookie %" B_PRId32 "\n", __PRETTY_FUNCTION__, fCookie));
|
||||
if (activate && ((InputServer*)be_app)->MethodReplicant()) {
|
||||
BMessage msg(IS_UPDATE_METHOD);
|
||||
msg.AddInt32("cookie", (uint32)fMethod);
|
||||
msg.AddInt32("cookie", fCookie);
|
||||
((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
|
||||
}
|
||||
return fMethod->MethodActivated(activate);
|
||||
@@ -253,9 +257,9 @@ _BMethodAddOn_::MethodActivated(bool activate)
|
||||
status_t
|
||||
_BMethodAddOn_::AddMethod()
|
||||
{
|
||||
PRINT(("%s cookie %p\n", __PRETTY_FUNCTION__, fMethod));
|
||||
PRINT(("%s cookie %" B_PRId32 "\n", __PRETTY_FUNCTION__, fCookie));
|
||||
BMessage msg(IS_ADD_METHOD);
|
||||
msg.AddInt32("cookie", (uint32)fMethod);
|
||||
msg.AddInt32("cookie", fCookie);
|
||||
msg.AddString("name", fName);
|
||||
msg.AddData("icon", B_RAW_TYPE, fIcon, 16*16*1);
|
||||
if (((InputServer*)be_app)->MethodReplicant())
|
||||
|
||||
@@ -70,6 +70,16 @@ static const struct cpu_vendor_info vendor_info[VENDOR_NUM] = {
|
||||
|
||||
#define K8_CMPHALT (K8_SMIONCMPHALT | K8_C1EONCMPHALT)
|
||||
|
||||
/*
|
||||
* 0 favors highest performance while 15 corresponds to the maximum energy
|
||||
* savings. 7 means balance between performance and energy savings.
|
||||
* Refer to Section 14.3.4 in <Intel 64 and IA-32 Architectures Software
|
||||
* Developer's Manual Volume 3> for details
|
||||
*/
|
||||
#define ENERGY_PERF_BIAS_PERFORMANCE 0
|
||||
#define ENERGY_PERF_BIAS_BALANCE 7
|
||||
#define ENERGY_PERF_BIAS_POWERSAVE 15
|
||||
|
||||
struct set_mtrr_parameter {
|
||||
int32 index;
|
||||
uint64 base;
|
||||
@@ -787,6 +797,16 @@ arch_cpu_init_percpu(kernel_args *args, int cpu)
|
||||
else
|
||||
gCpuIdleFunc = halt_idle;
|
||||
}
|
||||
|
||||
if (x86_check_feature(IA32_FEATURE_EPB, FEATURE_6_ECX)) {
|
||||
uint64 msr = x86_read_msr(IA32_MSR_ENERGY_PERF_BIAS);
|
||||
if ((msr & 0xf) == ENERGY_PERF_BIAS_PERFORMANCE) {
|
||||
msr &= ~0xf;
|
||||
msr |= ENERGY_PERF_BIAS_BALANCE;
|
||||
x86_write_msr(IA32_MSR_ENERGY_PERF_BIAS, msr);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user