Merge branch 'release/1.10.x'

This commit is contained in:
rdb 2020-12-20 01:02:08 +01:00
commit dee8df9427
6 changed files with 97 additions and 44 deletions

View File

@ -19,7 +19,7 @@ def getTkColorString(color):
Print out a Tk compatible version of a color string Print out a Tk compatible version of a color string
""" """
def toHex(intVal): def toHex(intVal):
val = int(round(intVal)) val = int(intVal)
if val < 16: if val < 16:
return "0" + hex(val)[2:] return "0" + hex(val)[2:]
else: else:

View File

@ -432,8 +432,8 @@ def rgbPanel(self, cb = None):
# Don't use a regular import, to prevent ModuleFinder from picking # Don't use a regular import, to prevent ModuleFinder from picking
# it up as a dependency when building a .p3d package. # it up as a dependency when building a .p3d package.
import importlib import importlib
Slider = importlib.import_module('direct.tkwidgets.Slider') Valuator = importlib.import_module('direct.tkwidgets.Valuator')
return Slider.rgbPanel(self, cb) return Valuator.rgbPanel(self, cb)
Dtool_funcToMethod(rgbPanel, NodePath) Dtool_funcToMethod(rgbPanel, NodePath)
del rgbPanel del rgbPanel

View File

@ -5,6 +5,7 @@ EntryScale Class: Scale with a label, and a linked and validated entry
__all__ = ['EntryScale', 'EntryScaleGroup'] __all__ = ['EntryScale', 'EntryScaleGroup']
from direct.showbase.TkGlobal import * from direct.showbase.TkGlobal import *
from panda3d.core import Vec4
import Pmw import Pmw
from tkinter.simpledialog import * from tkinter.simpledialog import *
from tkinter.colorchooser import askcolor from tkinter.colorchooser import askcolor
@ -477,17 +478,24 @@ def rgbPanel(nodePath, callback = None):
esg.component('menubar').component('EntryScale Group-button')['text'] = ( esg.component('menubar').component('EntryScale Group-button')['text'] = (
'RGBA Panel') 'RGBA Panel')
# Update menu # Update menu
menu = esg.component('menubar').component('EntryScale Group-menu') menubar = esg.component('menubar')
menubar.deletemenuitems('EntryScale Group', 1, 1)
# Some helper functions # Some helper functions
# Clear color # Clear color
menu.insert_command(index = 1, label = 'Clear Color', menubar.addmenuitem(
command = lambda np = nodePath: np.clearColor()) 'EntryScale Group', 'command',
# Set Clear Transparency label='Clear Color', command=lambda np=nodePath: np.clearColor())
menu.insert_command(index = 2, label = 'Set Transparency',
command = lambda np = nodePath: np.setTransparency(1)) # Set/Clear Transparency
menu.insert_command( menubar.addmenuitem(
index = 3, label = 'Clear Transparency', 'EntryScale Group', 'command',
command = lambda np = nodePath: np.clearTransparency()) label='Set Transparency', command=lambda np=nodePath: np.setTransparency(1))
menubar.addmenuitem(
'EntryScale Group', 'command',
label='Clear Transparency',
command=lambda np=nodePath: np.clearTransparency())
# System color picker # System color picker
def popupColorPicker(esg = esg): def popupColorPicker(esg = esg):
# Can pass in current color with: color = (255, 0, 0) # Can pass in current color with: color = (255, 0, 0)
@ -497,13 +505,27 @@ def rgbPanel(nodePath, callback = None):
initialcolor = tuple(esg.get()[:3]))[0] initialcolor = tuple(esg.get()[:3]))[0]
if color: if color:
esg.set((color[0], color[1], color[2], esg.getAt(3))) esg.set((color[0], color[1], color[2], esg.getAt(3)))
menu.insert_command(index = 4, label = 'Popup Color Picker',
command = popupColorPicker) menubar.addmenuitem(
'EntryScale Group', 'command',
label='Popup Color Picker', command=popupColorPicker)
def printToLog(nodePath=nodePath): def printToLog(nodePath=nodePath):
c=nodePath.getColor() c = nodePath.getColor()
print("Vec4(%.3f, %.3f, %.3f, %.3f)"%(c[0], c[1], c[2], c[3])) print("Vec4(%.3f, %.3f, %.3f, %.3f)" % (c[0], c[1], c[2], c[3]))
menu.insert_command(index = 5, label = 'Print to log',
command = printToLog) menubar.addmenuitem(
'EntryScale Group', 'command',
label='Print to log', command=printToLog)
# Add back the Dismiss item we removed.
if esg['fDestroy']:
dismissCommand = esg.destroy
else:
dismissCommand = esg.withdraw
menubar.addmenuitem(
'EntryScale Group', 'command', 'Dismiss EntryScale Group panel',
label='Dismiss', command=dismissCommand)
# Set callback # Set callback
def onRelease(r, g, b, a, nodePath = nodePath): def onRelease(r, g, b, a, nodePath = nodePath):

View File

@ -80,7 +80,11 @@ Page(void *start, size_t size) :
*/ */
INLINE bool NeverFreeMemory::Page:: INLINE bool NeverFreeMemory::Page::
operator < (const NeverFreeMemory::Page &other) const { operator < (const NeverFreeMemory::Page &other) const {
return _remaining < other._remaining; if (_remaining != other._remaining) {
return _remaining < other._remaining;
} else {
return _next < other._next;
}
} }
/** /**

View File

@ -2839,13 +2839,18 @@ if tp_dir is not None:
if GetTarget() == 'darwin': if GetTarget() == 'darwin':
# Make a list of all the dylibs we ship, to figure out whether we should use # Make a list of all the dylibs we ship, to figure out whether we should use
# install_name_tool to correct the library reference to point to our copy. # install_name_tool to correct the library reference to point to our copy.
for lib in glob.glob(tp_dir + "/*/lib/*.dylib"): for pkg in PkgListGet():
dylibs[os.path.basename(lib)] = os.path.basename(os.path.realpath(lib)) if PkgSkip(pkg):
continue
if not PkgSkip("PYTHON"): tp_libdir = GetThirdpartyLibDir(pkg)
for lib in glob.glob(tp_dir + "/*/lib/" + SDK["PYTHONVERSION"] + "/*.dylib"): for lib in glob.glob(os.path.join(tp_libdir, "*.dylib")):
dylibs[os.path.basename(lib)] = os.path.basename(os.path.realpath(lib)) dylibs[os.path.basename(lib)] = os.path.basename(os.path.realpath(lib))
if not PkgSkip("PYTHON"):
for lib in glob.glob(os.path.join(tp_libdir, SDK["PYTHONVERSION"], "*.dylib")):
dylibs[os.path.basename(lib)] = os.path.basename(os.path.realpath(lib))
for pkg in PkgListGet(): for pkg in PkgListGet():
if PkgSkip(pkg): if PkgSkip(pkg):
continue continue
@ -2858,13 +2863,14 @@ if tp_dir is not None:
CopyAllFiles(GetOutputDir() + "/bin/", tp_pkg + "/bin/" + SDK["PYTHONVERSION"] + "/") CopyAllFiles(GetOutputDir() + "/bin/", tp_pkg + "/bin/" + SDK["PYTHONVERSION"] + "/")
elif GetTarget() == 'darwin': elif GetTarget() == 'darwin':
tp_libs = glob.glob(tp_pkg + "/lib/*.dylib") tp_libdir = GetThirdpartyLibDir(pkg)
tp_libs = glob.glob(os.path.join(tp_libdir, "*.dylib"))
if not PkgSkip("PYTHON"): if not PkgSkip("PYTHON"):
tp_libs += glob.glob(os.path.join(tp_pkg, "lib", SDK["PYTHONVERSION"], "*.dylib")) tp_libs += glob.glob(os.path.join(tp_libdir, SDK["PYTHONVERSION"], "*.dylib"))
tp_libs += glob.glob(os.path.join(tp_pkg, "lib", SDK["PYTHONVERSION"], "*.so")) tp_libs += glob.glob(os.path.join(tp_libdir, SDK["PYTHONVERSION"], "*.so"))
if pkg != 'PYTHON': if pkg != 'PYTHON':
tp_libs += glob.glob(os.path.join(tp_pkg, "lib", SDK["PYTHONVERSION"], "*.py")) tp_libs += glob.glob(os.path.join(tp_libdir, SDK["PYTHONVERSION"], "*.py"))
for tp_lib in tp_libs: for tp_lib in tp_libs:
basename = os.path.basename(tp_lib) basename = os.path.basename(tp_lib)

View File

@ -31,23 +31,27 @@ SimpleHashMap(const Compare &comp) :
template<class Key, class Value, class Compare> template<class Key, class Value, class Compare>
INLINE SimpleHashMap<Key, Value, Compare>:: INLINE SimpleHashMap<Key, Value, Compare>::
SimpleHashMap(const SimpleHashMap &copy) : SimpleHashMap(const SimpleHashMap &copy) :
_table(nullptr),
_deleted_chain(nullptr),
_table_size(copy._table_size), _table_size(copy._table_size),
_num_entries(copy._num_entries), _num_entries(copy._num_entries),
_comp(copy._comp) { _comp(copy._comp) {
// We allocate enough bytes for _table_size elements of TableEntry, plus // We allocate enough bytes for _table_size elements of TableEntry, plus
// _table_size * 4 more ints at the end (for the index array). // _table_size * 4 more ints at the end (for the index array).
size_t alloc_size = _table_size * (sizeof(TableEntry) + sizeof(int) * sparsity); if (_table_size > 0) {
size_t alloc_size = _table_size * (sizeof(TableEntry) + sizeof(int) * sparsity);
_deleted_chain = memory_hook->get_deleted_chain(alloc_size); _deleted_chain = memory_hook->get_deleted_chain(alloc_size);
_table = (TableEntry *)_deleted_chain->allocate(alloc_size, TypeHandle::none()); _table = (TableEntry *)_deleted_chain->allocate(alloc_size, TypeHandle::none());
for (size_t i = 0; i < _num_entries; ++i) { for (size_t i = 0; i < _num_entries; ++i) {
new(&_table[i]) TableEntry(copy._table[i]); new(&_table[i]) TableEntry(copy._table[i]);
}
// Copy the index array.
memcpy(get_index_array(), copy.get_index_array(), _table_size * sizeof(int) * sparsity);
} }
// Copy the index array.
memcpy(get_index_array(), copy.get_index_array(), _table_size * sizeof(int) * sparsity);
} }
/** /**
@ -84,22 +88,39 @@ template<class Key, class Value, class Compare>
INLINE SimpleHashMap<Key, Value, Compare> &SimpleHashMap<Key, Value, Compare>:: INLINE SimpleHashMap<Key, Value, Compare> &SimpleHashMap<Key, Value, Compare>::
operator = (const SimpleHashMap<Key, Value, Compare> &copy) { operator = (const SimpleHashMap<Key, Value, Compare> &copy) {
if (this != &copy) { if (this != &copy) {
TableEntry *old_table = _table;
DeletedBufferChain *old_deleted_chain = _deleted_chain;
size_t old_num_entries = _num_entries;
_table_size = copy._table_size; _table_size = copy._table_size;
_num_entries = copy._num_entries; _num_entries = copy._num_entries;
_comp = copy._comp; _comp = copy._comp;
// We allocate enough bytes for _table_size elements of TableEntry, plus if (_table_size > 0) {
// _table_size * 4 more ints at the end (for the index array). // We allocate enough bytes for _table_size elements of TableEntry, plus
size_t alloc_size = _table_size * (sizeof(TableEntry) + sizeof(int) * sparsity); // _table_size * 4 more ints at the end (for the index array).
size_t alloc_size = _table_size * (sizeof(TableEntry) + sizeof(int) * sparsity);
_deleted_chain = memory_hook->get_deleted_chain(alloc_size); _deleted_chain = memory_hook->get_deleted_chain(alloc_size);
_table = (TableEntry *)_deleted_chain->allocate(alloc_size, TypeHandle::none()); _table = (TableEntry *)_deleted_chain->allocate(alloc_size, TypeHandle::none());
for (size_t i = 0; i < _num_entries; ++i) { for (size_t i = 0; i < _num_entries; ++i) {
new(&_table[i]) TableEntry(copy._table[i]); new(&_table[i]) TableEntry(copy._table[i]);
}
// Copy the index array.
memcpy(get_index_array(), copy.get_index_array(), _table_size * sizeof(int) * sparsity);
} else {
_table = nullptr;
_deleted_chain = nullptr;
} }
// Copy the index array. if (old_table != nullptr) {
memcpy(get_index_array(), copy.get_index_array(), _table_size * sizeof(int) * sparsity); for (size_t i = 0; i < old_num_entries; ++i) {
old_table[i].~TableEntry();
}
old_deleted_chain->deallocate(old_table, TypeHandle::none());
}
} }
return *this; return *this;
} }