Multi screen support: Difference between revisions

From EiffelStudio: an EiffelSoftware project
Jump to navigation Jump to search
Dartzki (talk | contribs)
Manus (talk | contribs)
 
(27 intermediate revisions by 5 users not shown)
Line 4: Line 4:
=Overview=
=Overview=
The aim of this project is to enhance Vision with a support for multiple screens.
The aim of this project is to enhance Vision with a support for multiple screens.
=Eiffel Studio=
* I'll give you here a step for step instruction at how I got a vision2 project to work under windows
=== Download ===
* build 59623 from [http://eiffelsoftware.origo.ethz.ch/downloads/builds/ cur Eiffel builds] [http://eiffelsoftware.origo.ethz.ch/downloads/old_releases/ old Eiffel builds]
* If you don't already have it installed:
[http://download.microsoft.com/download/a/5/f/a5f0d781-e201-4ab6-8c6a-9bb4efed1e1a/PSDK-x86.exe MS Platform SDK]
[http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&DisplayLang=en Microsoft .NET Framework Version 2.0 Redistributable Package (x86)]
[http://download.microsoft.com/download/c/4/b/c4b15d7d-6f37-4d5a-b9c6-8f07e7d46635/setup.exe .NET 2.0 SDK for x86]
* [http://www.cygwin.com/ cygwin with bash]
=== How I chose the Directories (just change everywhere I use them adequatly) ====
* C:\Eiffel57\ - Eiffel instal directory
* C:\Eiffel57\soft-arch\ - svn checkout
* C:\Program Files\Microsoft.NET\ - Microsoft.NET Framework
* C:\Program Files\Microsoft Platform SDK\ - Microsoft Platform SDK
* C:\cygwin\ - Cygwin Installation
=== needed SVN checkout ===
* https://eiffelsoftware.origo.ethz.ch/svn/es/branches/soft-arch/Src into C:\Eiffel57\soft-arch\
* https://eiffelsoftware.origo.ethz.ch/svn/es/branches/soft-arch/Delivery into C:\Eiffel57\soft-arch\Delivery
* https://eiffelsoftware.origo.ethz.ch/svn/es/branches/soft-arch/free_add_ons into C:\Eiffel57\soft-arch\free_add_ons
=== set Environment Variables ===
{{block|set '''PATH'''<nowiki>=</nowiki>C:\Programme\Microsoft.NET\SDK\v2.0\Bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Programme\Microsoft Platform SDK\bin;C:\Programme\Microsoft Visual Studio 8\VC\bin;C:\Programme\Microsoft Visual Studio 8\Common7\IDE;C:\Programme\Microsoft Visual Studio 8\VC\vcpackages;C:\Programme\Microsoft Platform SDK\Bin;C:\Programme\Microsoft Visual Studio 8\VC\bin;'''%PATH%''';C:\cygwin\bin}}
{{block|set '''INCLUDE'''<nowiki>=</nowiki>C:\Programme\Microsoft.NET\SDK\v2.0\include;C:\Programme\Microsoft Platform SDK\Include;C:\Programme\Microsoft Platform SDK\Include\crt;C:\Programme\Microsoft Platform SDK\Include\crt\sys;C:\Programme\Microsoft Platform SDK\Include\mfc;C:\Programme\Microsoft Platform SDK\Include\atl;C:\Programme\Microsoft Visual Studio 8\VC\include}}
{{block|set '''LIB'''<nowiki>=</nowiki>C:\Programme\Microsoft.NET\SDK\v2.0\Lib;C:\Programme\Microsoft Platform SDK\Lib;C:\Programme\Microsoft Visual Studio 8\VC\lib;}}
{{block|set '''ISE_EIFFEL'''<nowiki>=</nowiki>C:\Eiffel57\}}
These last Variables I'm not sure are needed...
{{block|set '''EIFFEL_SRC'''<nowiki>=</nowiki>C:\Eiffel57\soft-arch\}}
{{block|set '''ISE_PLATFORM'''<nowiki>=</nowiki>windows}}
{{block|set '''ISE_C_COMPILER'''<nowiki>=</nowiki>msc}}
=== Install needed Applications (see also directories above) ===
* install MS Platform SDK, MS .NET Framework, .NET SDK
* install cygwin
* install Eiffel build
=== Install Gobo ===
'''DOS'''
<pre>cd %EIFFEL_SRC%\library
tar xvfz %EIFFEL_SRC%\free_add_ons\gobo\gobo_34_win.tgz
</pre>
'''Bash'''
<pre>cd $EIFFEL_SRC/library
tar xvzf $EIFFEL_SRC/free_add_ons/gobo/gobo_34_win.tgz
</pre>
=== Compile Libraries ===
* Preparation:
rename C:\Eiffel57\soft-arch\C\CONFIGS\windows-msc-x86 to 'windows-msc-x86 old'
download [http://origo.ethz.ch/pipermail/es-devel/attachments/20060424/e5afb9a9/windows-msc-x86-2005.obj windows-msc-x86-2005.obj] into C:\Eiffel57\soft-arch\C\CONFIGS\ and rename it to windows-msc-x86
* Compilation:
** Compiling run-time
'''DOS'''
<pre>cd %EIFFEL_SRC%/C
configure win32 m</pre>
'''Bash'''
<pre>cd $EIFFEL_SRC/C
./configure.bat win32 m</pre>
If you are using a 64Bit Machine change the win32 to win64
On Windows 32 bits to clean up all the generated files you do:
'''DOS'''
<pre>configure clean</pre>
'''Bash'''
<pre>./configure.bat clean</pre>
** Compiling C code from libraries
'''DOS'''
<pre>cd %EIFFEL_SRC%/library/net/Clib
make_msc.bat
cd %EIFFEL_SRC%/library/vision2/Clib
make_msc.bat
cd %EIFFEL_SRC%/library/wel/Clib
make_msc.bat</pre>
'''Bash'''
<pre>cd $EIFFEL_SRC/library/net/Clib
./make_msc.bat
cd $EIFFEL_SRC/library/vision2/Clib
./make_msc.bat
cd $EIFFEL_SRC/library/wel/Clib
./make_msc.bat</pre>
** Compiling C code from C_library
'''DOS'''
<pre>cd %EIFFEL_SRC%/C_library/zlib
make_msc.bat
cd %EIFFEL_SRC%/C_library/libpng
make_msc.bat</pre>
'''Bash'''
<pre>cd $EIFFEL_SRC/C_library/zlib
./make_msc.bat
cd $EIFFEL_SRC/C_library/libpng
./make_msc.bat</pre>
** Compiling C code from compiler
'''DOS'''
<pre>cd %EIFFEL_SRC%/Eiffel/library/cli_writer/Clib
nmake</pre>
'''Bash'''
<pre>cd $EIFFEL_SRC/Eiffel/library/cli_writer/Clib
nmake</pre>
=== Start Eiffel Studio ===
You should be able now to create a vision2 project and compile it !!!


=Resources=
=Resources=
*In order to be able to change the library code you have to delete the 'readonly="True"' in the library tags of the project's acex file
*In order to be able to change the library code you have to delete the 'readonly="True"' in the library tags of the project's acex file or just click on the project settings in the Eiffel Studio and change it there.


*[http://msdn2.microsoft.com/en-us/library/system.windows.forms.screen_members.aspx C# screen class interface]
*[http://msdn2.microsoft.com/en-us/library/system.windows.forms.screen_members.aspx C# screen class interface]
Line 140: Line 22:
*Win32 API - Resources:
*Win32 API - Resources:
** look at the platform SDK under 'Win32 API'
** look at the platform SDK under 'Win32 API'
** Wel uses a loopback function to get access to all fonts (it's pretty much the same that we have to do)
** Wel uses a callback function to get access to all fonts (it's pretty much the same that we have to do)
*** see the [http://origo.ethz.ch/pipermail/es-ui/2006-June/000016.html mail from manu] (see also the following mails)
*** in the SDK you find the EnumFontFamilies function under 'Graphics Device Interface' -> 'Fonts and Text' -> '... Reference' -> '... Functions'
*** in the SDK you find the EnumFontFamilies function under 'Graphics Device Interface' -> 'Fonts and Text' -> '... Reference' -> '... Functions'
*** look at %Eiffel%\library\wel\clib\enumfold.c
*** look at %Eiffel%\library\wel\clib\enumfold.c
Line 146: Line 29:




*Team SVN Rep: You need to backup and remove the directories 'vison2' and 'wel' in your '/Eiffel57/library/' directory and run a svn checkout from https://eiffelsoftware.origo.ethz.ch/svn/es/branches/soft-arch/TeamMultiScreenSupport .
*Team SVN Rep: You need to backup and remove the directories 'vison2' and 'wel' in your '/Eiffel57/library/' directory and run a svn checkout from https://svn.eiffel.com/eiffelstudio/branches/eth/soft-arch/TeamMultiScreenSupport .


=Implementation=
=Implementation=
=== Vision2 ===


class EV_SCREEN:
class EV_SCREEN:
* allscreenslist [EV_MULTISCREEN]
* allscreenslist [EV_MONITOR]
* primaryscreen : EV_MULTISCREEN
* primaryscreen : EV_MONITOR


class EV_MULTISCREEN (inherits EV_SCREEN):
class EV_MONITOR:
* create class
* create class
* redefine inherited features for mutliscreen as needed
* width, height, vertical_resolution, horzintal_resolution
* monitor_at_position (pos: EV_COORDINATE): INTEGER
* get_global_coordinate (pos: EV_COORDINATE; screen_nr: INTEGER): EV_COORDINATE


class EV_SCREEN_IMP (inherits EV_SCREEN_I):
class EV_MONITOR_IMP :
* add multiscreen features as needed
* add multiscreen features as needed
* Windows: is client of WEL_MONITORS_DC


class EV_SCREEN_I:
class EV_MONITOR_I:
* add new deferred features from EV_SCREEN_IMP
* add new deferred features from EV_MONITOR_IMP


class GDK_EXTERNALS:
class GDK_EXTERNALS:
* add multiscreen features as needed
* add multiscreen features as needed
=== Wel ===
class WEL_MONITOR_ENUMERATOR:
* deferred feature action
* accesses C functions to enumerate all monitors
class WEL_MONITORS_DC (inherits: WEL_MONITOR_ENUMERATOR):
* defines deferred feature action from WEL_MONITOR_ENUMERATOR
* gives acces to the DC of all monitors


=Milestones=
=Milestones=
Line 179: Line 78:
=To do=
=To do=
*Fabio:
*Fabio:
**find needed WEL features (and underlying routines - WIN32 API)
 
**create svn-dir (done. see resources)
**look at Win32API and get dummy prog to work (see resources)




Line 189: Line 86:


*Pawi
*Pawi
**find out how to do the docu
**find out how to do the docu (take a look at [[Downloads#Doc_Builder| Doc builder]])




*Dario
*Dario
**find out how works 'external' (done. works under linux)
**find out how works 'external' (done.)
**create Class EV_MULTISCREEN (inherits EV_SCREEN)
**create Class EV_MONITOR(inherits EV_SCREEN) (done; see svn)
**look at Win32API and get dummy prog to work (see resources)
**implement linux version of EV_MONITOR_IMP (done.)
 
=Documentation=
 
The documentation for this projet can be found [http://funky-monkey.ch/vision2 here].


=Team=
=Team=

Latest revision as of 23:05, 1 November 2007


Overview

The aim of this project is to enhance Vision with a support for multiple screens.

Resources

  • In order to be able to change the library code you have to delete the 'readonly="True"' in the library tags of the project's acex file or just click on the project settings in the Eiffel Studio and change it there.


  • Gdk - Resources:
    • class GdkDisplay
    • class GdkScreen


  • WEL - Resources:
    • NONE


  • Win32 API - Resources:
    • look at the platform SDK under 'Win32 API'
    • Wel uses a callback function to get access to all fonts (it's pretty much the same that we have to do)
      • see the mail from manu (see also the following mails)
      • in the SDK you find the EnumFontFamilies function under 'Graphics Device Interface' -> 'Fonts and Text' -> '... Reference' -> '... Functions'
      • look at %Eiffel%\library\wel\clib\enumfold.c
      • look at class wel_font_family_enumerator - especially at feature cwin_enum_font_families


Implementation

Vision2

class EV_SCREEN:

  • allscreenslist [EV_MONITOR]
  • primaryscreen : EV_MONITOR

class EV_MONITOR:

  • create class
  • width, height, vertical_resolution, horzintal_resolution
  • monitor_at_position (pos: EV_COORDINATE): INTEGER
  • get_global_coordinate (pos: EV_COORDINATE; screen_nr: INTEGER): EV_COORDINATE

class EV_MONITOR_IMP :

  • add multiscreen features as needed
  • Windows: is client of WEL_MONITORS_DC

class EV_MONITOR_I:

  • add new deferred features from EV_MONITOR_IMP

class GDK_EXTERNALS:

  • add multiscreen features as needed

Wel

class WEL_MONITOR_ENUMERATOR:

  • deferred feature action
  • accesses C functions to enumerate all monitors


class WEL_MONITORS_DC (inherits: WEL_MONITOR_ENUMERATOR):

  • defines deferred feature action from WEL_MONITOR_ENUMERATOR
  • gives acces to the DC of all monitors

Milestones

M1: June 1st

  • needed gdk features
  • decide upon implementation

M2: May ???

  • To be completed by the team

To do

  • Fabio:


  • Pascal:
    • look at Win32API and get dummy prog to work (see resources)


  • Pawi


  • Dario
    • find out how works 'external' (done.)
    • create Class EV_MONITOR(inherits EV_SCREEN) (done; see svn)
    • implement linux version of EV_MONITOR_IMP (done.)

Documentation

The documentation for this projet can be found here.

Team

Everyone interested in this project is welcome to join our mailinglist es-ui@origo.ethz.ch