Hi Igor,
I dont see this neither as "destructive" nor as "critics", especially since:
- you initially started to add things to NB that were more or less API
wrappers instead of real Core NB functionality ;)
- I see the same risk for overloading NB and wanted to start the same
discussion next time we meet on Skype.
In the long term the distinction just by having different categories (core
vs OS specific) will also in my opinion
only be a workaround in need for better modularization or one/many separate
platform specific projects
As you know I already suggested to refactor tests to separate OS dependent
stuff from core tests and I have
more ideas for better modularization with the same idea of moving this to
independent projects.
I would suggest:
1. NB really just includes the core functionality of an external interface
(FFI), including the support for calls
and callbacks. Other projects can then build on top of it and it helps to
keep it small for the Pharo image.
2. We pull out the OS specific stuff (for instance Win32) into real own
project to provide more native API
functionality. Such an API wrapper project is then not part of NB and
therefore also not part of the standard Pharo
image. We can make it accessible via a Configurations that are easily
loadable from the config browser.
I will do that as soon as time permits.
3. If others jump onto the bandwagon and put their API bindings for their
favorite OS/platform (GTK, Linux, Mac, ...)
we may later be able to implement/abstract a common layer API that
depending on the loaded OS code provides
native functionality but still allows platform independence of calling code.
I mean something similar to SWT in Eclipse if you know what I'm talking
about. In pseudocode this would
mean to have:
OSWindow new open
while this is just a facade and dependent on the OS and loaded native
support the underlying Win32, Mac or Linux
API's for opening a Window are used.
Regarding last changes/commits:
As you will see in the repo I merged Stefs and your version of core and added
#= to compare external handles.
Will also write a test for it when theres the next minute.
I also "bloated" or "enhanced" (depending on POV) it with more wrappers for
Win32 (POINT, window functions,
Process, Threads) which I will soon move to an own project on STHub so we can
safely remove it from NB.
Just be a little bit patient for the next possible time slot.
Two wishes from my side if there is a timeslot/minute on your side: I would
really appreciate a working
example for opening a native Window as you started with NBWin32Window. Since a
callback for the window procedure
is required it would serve as a good example for callbacks too. It would also
help if the proper marshalling
for the WideStrings could be provided since this would allow to use more API's
and even implement a COM binding.
You wanted to check if the methods necessary for the marshalling were removed
or have to be implemented...
Thx
T.