User:Ericb

From Apache OpenOffice Wiki
Jump to: navigation, search

Public Documentation License Notice

The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html. The Original Documentation is "Mac OS X native port". The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)

Mac OS X Native port

**see http://contributing.openoffice.org/index.html

Native Port Roadmap

2006

  • June 2006: work in progress

- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)

Done: 
implement threads
create, manage instance
create, manage windows (including parents)
create, manage events
create manage drawing, resizing
create, add menus (Pavel Janik)
toggle window fullscreen (Pierre de Filippis)
make font server work (Stephan Schaefer)
  • Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now
    • font selection
    • font size
    • simple font attributes (bold, italic)
Next step: document first part, and propose design

- native filepicker (Pavel Janik, Florian Heckl)

- native printing implementation (Oliver?)

- native font implementation (Eric Bachard)

  • September 2006:

- first proofs of concept: fonts, filepicker .. (more?) - show the results (OOoCon 2006?)

2007

  • January 2007: first alpha implementation

Strategy for native port

Possible Actions:

Identify us:

  1. Complete the arrays below
  2. Update photos on frapr.com?

Share the work:

  1. Divide the work between little Teams
  2. Update Todo list regularly -> needs some love these days ... [1]

Help:

  1. Teach tools between us
  2. Do a debug party on IRC
  3. write documentation

Meet us:

  1. IRC
  2. Mac Meeting (like nov2005 in Hamburg?)

Inform:

  1. Update website regularly
  2. Blogs


WHO:

Mac Team:

Developer \ skills build write code code review debug/trace (higher is better) contribute to documentation
ericb x x 1 x
pjanik
ssa
maho
tinor
schmidtm
ebischoff
obr
cl
aliscafo
fheckl
Fridrich
plipli x x


Other resources:

fonts:?

events:?

QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.

graphical:?

Communication:?


WHAT: Status of most important tasks

Task Names Urgency (1=higher) Work in Progress Done Code review Debug Integration
Get rid of X11 done 1 x x
Bundle 1 x
Drawing 1 x
Fonts plipli 1 x
Events management 2 x
Controls (see list) ericb, aliscafo 2 x
Native FilePicker Florian Heckl, Pavel Janik 3 x x
Native Printing Yvan Barthelemy 3 x
Native SpellChecker 4
Player 4


Other tasks:

Help for writing bug lists, status of bugs ..etc

Write howto use gdb, leaks, other tools

WHEN:

From Christian Lippka (last meeting, 25th of august 2006):

Aug 26 00:21:38 ChristianL
from my point of view what is missing for point 1:
text layout, complete font support, keyboard support,
fixing repaint issues, having aqua install and run out of the box

September 2006

Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris

Late 2006

fix OpenOffice.org launch fix drawing (repainting) Implement missing methods and fix most important bugs (mainly the one leading to crash) in: ATS Salgraphics Salinstance

January or February 2007

make Java work (works partially) make intensive debug present something working as alpha

June 2007

Implementation of: native filepicker native printing

Become a Domain Developer for Mac OS X port

People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a DomainDeveloper.

The purpose of this document is to clearly define all the steps to become a DomainDeveloper.


Preliminary: step 1 in Commit_Rights must be completed and checked, and you must be in the list of [JCA Licensed people]

Steps for ssh2 key to be uploaded

Create the key

Everything is described here: [SSH Guide]

Upload the key

You must create an issue, like described below :

Assign it to "ssh2key" in the "www" component

Sub Component: openoffice.org cvs

Title: CVS Commit access request

Add louis (Louis Suarez Potts) or st (Stefan Taxhet) on CC

Upload your ssh2 public key respecting the process (Attach a DSA key, not an RSA)

A project lead will confirm your request

Then the support will upload your key

Once done the issue is set to Fixed , and the next step has to be verified before you close it.

EXAMPLE: [Upload SSH2 Key for Etsushi Kato]

Verify it works

You now can try to connect via tunnel, and follow instructions given [SSH Guide]

If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.

Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :

First create a tunnel with the command:

ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org

Then in a new window:

export CVSROOT=":pserver:your_login@localhost:/cvs"

cvs login (enter)

(your password)

mkdir TEST

cd TEST

cvs -z4 co -r SRC680_m205 vcl 

cd vcl 

cat CVS/Root  -> should indicate: your local repository

Ask for CVS access for all modules required

Two steps: create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being DomainDeveloper.

Create an issue

You must create an issue, described below :

Component: tools

Sub Component: www

Title: CVS access to all modules required

Assigned to mh + CC for ericb and/or pjanik

Present yourself quickly, and ask the access

A project lead will confirm

An admin will confirm this is ok, and set the issue to Fixed


EXAMPLE: [CVS Access all modules for Etsushi Kato]

Verify

Create the tunnel :

open a terminal and type :

ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org

once logged in, open a new terminal, and do (for example):

cd $OOO_SRC_ROOT/

source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }

cd vcl  (for example)

IMPORTANT: be sure vcl has been checked from tunnel, not from anoncvs (cat CVS/Root will give you the answer)

export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) 

cd aqua/source/gdi

add your changes to your_file.cxx, then commit :

cvs commit -m "#i75689# bla bla ... the reason of the modification(s)"  your_file.cxx  # The #i75689# is an issue number in the tracker

cvs update

If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.

In case of problem, use the issue until it is fixed


Welcome aboard :)

Mac OS X porter Team at WWDC 2007

What is WWDC 2007?

See Apple WWDC 2007

Labs Agenda

It is extremely important to organize us for Labs.

The rule is extremely simple: bring your laptop, your code, and ask :)

Days monday
June 11
tuesday
June 12
wednesday
June 13
BOOKED
1 hour starting from ~ 10:30 11:00 pm
John Gelynse User User Interface design
thursday
June 14 :
BOOKED
from 10:45 to 11:30 pm
Deric Horn / Keith Mortensen
Carbon and Cocoa Integration Lab
friday
June 15
Labs
Afternoon
Morning
Afternoon
Morning
Afternoon
Morning
Afternoon
Morning
Afternoon

Interesting Labs

The complete list: Mac OS X Essentials


  • Core Text Lab

Receive one-on-one technical assistance and troubleshooting advice from the Core Text engineering team. Learn how to use the advanced font handling and blazingly fast Unicode layout capabilities of Core Text. Bring your laptop, your code, and your questions.

  • HIToolbox Lab

Work on tuning and debugging HIToolbox code in your Carbon application. Receive one-on-one technical assistance and troubleshooting advice from the High Level Toolbox engineering team, Apple DTS engineers, and technology evangelists. Bring your laptop, your code, and your questions.

Our Objectives at the WWDC 2007

1) Connection OOo Mac team / Apple engineers

-Goal 1.1: "Get infos, contacts, human to human conversation :-)"

-> Present our current work, methods and team to Apple people :

-> Meet them during WWDC: give us/them a face, keep contacts

-> Get their impression about what we have already done and what is still ToDo


2) Improve from Apple's engineers expertise

-Goal 2.1: "Give MacOS X users the OOo suite they deserve"

=> As mac platform and apple's product fans, we are proud to bring the quality and power of OOo to mac users community
=> Make OOo uses all the power of Mac OSX, including upcoming Leopard !

-Goal 2.2: "OO.org Mac port has to be as Apple HIG compliant as possible"

=> Define what is expected for User Interface of OpenOffice.org suite with people from Apple UI project
- FYI: Last year, Apple UI project proposed ericb to help us, once our native menus will be working. 
  This is now done.


3) Get code guidelines, tips, samples

-Goal 3.1: "Ask for code review and find code snippets"

 - HIView
 - Printing
 - Drag and Drop
 - as muc has possible

=> More than 1000 Apple engineers are present, and can answer our questions regarding the code, during the whole week

-Goal 3.2: "Attend key Labs and Sessions to get full overview of Tiger/Leopard/Core's and useful code"

 - Core*
 - Tiger / Leopard


4) Social Contacts / Team emulation

-> Discuss and meet new developers and / or american people working for Mac OS X port (like Michael Sicotte, Vijay Venkatraman , other..) -> Share ideas, tips, conviviality !


5) Visibility

OpenOffice.org Native Mac port has to be recognized as the professionnal office suite for Mac users it is !

Who?

  • Sébastien Plisson
  • Eric Bachard
  • Philipp Lohmann

Todo list

Please add topics, technical questions you would see asked by attendees to Apple engineers during WWDC

Suggestions for current issues to be fixed

Timers: Current code is obsolete, and compatibility with Leopard won't probably exist. Pavel wrote a patch using recent code. Seems to work fine, excepted a thread issue (crash not easy to be reproduced)

Questions ( pavel )

Does Apple have a plan to enable UI drawing from threads different from the first one?

Does Apple have a plan to allow java to be run from other threads as well?


Salframe:

Looot of things:

  • fix all our busy paint places
  • Find infos/code sample about parenting
  • Code review for HIFrameWork implementation
  • Menus: every window creates it's own menu. Redesign it?
  • adapt native widget framework
  • Use XCode to build OpenOffice.org

Events: code review, tips

ATS: code review, ATS issues

Mike Sicotte: I understood that implementing printing in aqua OOo was a topic that we didn't get accepted into Google SOC - so remains on the ToDo list. I notice that there are three Sessions specfically related to printing at WWDC:

   Leveraging the Common Unix Printing System (CUPS)
   Printing with Style in Mac OS X
   Printing Lab

If this is judged to be a good use of time at WWDC I would be willing to spend some time to help further develop the questions to be addressed with the Apple engineers.

ericb->Mike Sicotte

Good idea. You are welcome :)

Travel

  • describe the schedule of the travel

ericb :

Mulhouse -> Paris -> SF:  9th of June    SF scheduled arrival: 7:13 pm
SF -> Paris -> Mulhouse:  16th of June (arrival 17th)  SF departure for the return:  3:00 pm

Hotel: King Georges (close to Union Square)

Airport to Hotel transportation: not included

sebastien (aka plipli):

Paris->SF: 3rd June
SF->Paris: 15th June in the evening

Hotel: to be coompleted


Philipp Lohmann:

Hamburg->SF: 9th June
SF->Hamburg: 16th June

Hotel: King Georges

Misc

  • don't forget sector adaptator for laptop: US connectors are different
  • don't forget Cameras (and chargers)
  • Prepare 50 to 100 business cards : the most simple is to use the model I can provide on demand , and print them with special paper (pre-cut)

Mac OS X porter Team at OOoCon 2007

Who?

  • Shaun McDonald
  • Eric Bachard
  • (list to be completed)

Todo: ask for Mickael Sicotte travel (New York <-> Barcelona) + rooms

What?

The conference is over 3 days. Presentations should last around 45 minutes. http://www.openoffice.org/servlets/ReadMsg?list=announce&msgNo=320 Papers have to be submitted by 1st June to be considered.

Ideas :

Mike Sicotte: Perhaps the results of the Google SOC could be a presentation.

  • create a complete topic for Mac port (one stream for a day or half day)
  • How to improve ooo usability though the use of floating palettes instead of modal dialogs

- several presentations / BOF

Eric Bachard: Aqua OpenOffice.org (conf / 1 hour)

Others?

  • reserve rooms together? Better rent a house?
  • [FIXME]

2nd Mac porters meeting

This section has been moved to 2nd Mac porters meeting

IRC Mac port meetings

This section has been moved to MacOSXPortMeetings.

Mac OS X (X11) Quality Assurance

This section has been moved to Mac OS X (X11) Quality Assurance

Mac OS X Implementing HIView and Carbon events

This section has been moved to Mac OS X Implementing HIView

Debug OpenOffice.org using XCode

MacOSX Debug OpenOffice.org using XCode

Description of the Native Port problem

How does OpenOffice.org work on Mac OS X?

Currently, on Mac OS X, OpenOffice.org uses X11, as "client": X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.

- X11 is run as an application, managed like other Apple applications.
- All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, 
 even if other Unix/Linux (e.g.) applications are runing.

OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.

Ericb 11:39, 3 June 2006 (CEST)

Issues and known problems

All events are managed by OpenOffice.org and X11, using the Xlib

Only .ttf fonts type is currently available. Note: system fonts are available

The rendering is made by X11, not by Mac OS X rendering engine.

X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)

Other links

http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#

http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems

Ericb 11:39, 3 June 2006 (CEST)

What do we have to do?

  • (in progress): Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)

like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases

  • (in progress): Implement native events management, using CarbonEventManager (replacing Xlib management)
  • (in progress): Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)

Work in progress: Mac OS X Porting - Native Fonts

  • (done experimental) Implement Native Filepicker
  • Implement Apple Spellchecker

--Plipli 09:27, 25 March 2007 (CEST)

Where is located the code to be modified?

Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.

Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).

For drag and drop, dtrans is concerned (Pasteboard Manager implementation)

[FIXME]: Filepicker? Apple Spellchecker?

Ericb 11:39, 3 June 2006 (CEST)

How will the new implementation be tested?

Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,

and the final package simply won't work

In vcl module", a toy called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.

e.g.: draw anti-aliased lines works well.

Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.


[FIXME]: add more complete list of features to implement and test.

AquaVCL 01 cws

[Top 10 of Aqua issues]

Aquavcl01 tasks

Changelog

Work in progress: alpha :-)

(31th May)

(Shaun) prepared the webiste for development snapshot announce

(cloph) Torrent are available for develoment snapshot of Aqua version

(pl) Added desktop and framework into aquavcl01 : to add preferences in menu entries, and improve about

(pl) other fix for captureMouse ( do not dipatch artificial dispatch mouse move if another frame has captured the mouse since posting) (pl) save and restore to protect the context (pl) fixed menu popup jump of highlighted text (pl) implemented captureMouse , using overlay window

(ericb) testing new functions to retrieve highlighted color (and other) from System Preferences ( proof of concept only)

(30th May)


(hdu) fixed madness in formula when switching from formula to text (hdu) removed font size in UpdateSettings() to avoid overwritting fonts size from Appearance Manager (hdu) cleanup in ATSLyout::DrawText()

( Etsushi Kato ) commited change to implement preedit text drawing from input method

(28th May)

pl proposed a new AquaSalGraphics implementation.

http://porting.openoffice.org/servlets/ReadMsg?list=mac&msgNo=5433

Needs a review and some tests

(26th May)

(ericb) goodbye uggly grey

(24th May)


(pl) Various changes (from Bonsai database) : do not use XOR on QUARTZ either, implement flush, no view on VirDev

(pl) fixed issue 77755 : bad resizing /positionning for parent windows

(pl) Philipp Lohmann added AQUA_LOG to trace on Aqua -> Usage : export AQUA_LOG=off

(hdu) started MacOSXIntegrator to use System Fonts ( objective : Aqua version now will uses Lucida Grande or System default if different)

(pl) fixed issues 77529 and 77530 Implement AquaSalFrame::Get/SetWindowState


(23th May) :

(hdu) fixed some text breaking/text measurements : works started (works already)

(hdu) fixed refresh issues using mrRGBColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); instead of : mrRGBColorSpace = CGColorSpaceCreateDeviceRGB(); " in vcl/aqua/source/gdi/salgdi.cxx (~105)

(pl) did AquaSalFrame non copyable

(pl) added InitShow() + centered windows relative to parents : now splashscreen appears centered, like all windows having parents

Note : In the long run it is planned to handle modal dialogs differently rolling down from the parent' titlebar is AFAIK the method on Mac ( Ismael started some experimentation for his Google SoC )

(pl) Contextual menus are shadowed

alpha 0.9




(22th May)

thb: proposed a patch to workaround the missing animations in Impress (issue 77692) ( verified working )

fheckl: fixed problem when switching between OOo picker and native picker ( verified working )

hdu: fixed the refresh and clipping => many problems with wrong clipping and wrong graphics attributes are gone

hdu: fixed the text drawn at bad size when resizing

(19th may)

Begining of Drag and Drop (Tino)

Using Aqua keyword, 123 issues created + macport user created.

user macport assigned means nobody is working on the issue. Once someone assigned the issue to himself + sert issue as started, means issue has an owner.

Experimental code to test SetThemeWindowBackground to refresh everything (ericb) (18th may)

+: refresh is ok, bitmap refresh is ok when scrolling, typing text works in writer , pulse effect works, refresh checkbuttons works, refresh the window during scrolling works

-: no more cursor, excessive system load (lot of Begin /EndGraphic()


Important infos / WIP

The main work in progress is about refresh not working in all situations. We isolated the cause: very probably the clipping is either missing, or buggy.

Once fixed: pulse effect for buttons, text refresh (blinking cursor, and bitmaps in menus will be ok.

ericb add Aqua look for toolbars and tooltips (17th may)

alpha 0.8

Christian Bernd Krippendorf joined the port (16th May)

hdu: memcpy sizeof(data) instead of sizeof(pointer) bytes (16th May)

hdu: fix ATSLayout::GetTextWidth() for multiple glyph-bound-trapezoids

msicotte: added definition for makeCGptArray - helper for AquaSalGraphics::invert

msicotte: added AquaSalGraphics::invert(ULONG nPoints...

hdu: implement stretched/squeezed text

hdu: prepare font rotation directly in ATSUI units

hdu: simplify a little by removing dead code

hdu: enable bold-/italic-emulation for fonts only if needed

mikesic: #77317# - fix for wrong menu displayed when last Writer window closed

ericb: add pulse effect (it will help to verify refresh issues are fixed)

pl: safer yield mutex protection through guards

hdu: default to standard font attributes

pl: protect against dispatching to dead or dying AquaSalFrames

ericb: #i77327# add alpha to user install dir until Aqua version is stabilized

hdu: rewrote ATSUFontID-based font enumeration

mikesic: Workaround for issue 77262 - frames around selected items don't disappear

mikesic: Fix for issue 74392 - aquavcl01: tooltip crash

mikesic: Fix for issue 77261 - Menu disappears when you hover over tooltip

mikesic: Fix for issue 75889 - aquavcl01: Extended tooltips text truncated

fheckl: adapting to changes since resync (aquafilepicker01)

fheckl: enabling fps_aqua lib only for aqua build

pjanik: Reformat for easier reading (according to OOo C++ rules).

Monday 15th May

Changes:

Yvan Barthelemy provided the first screenshot for printing :)

http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Printing

native_printing_dialog.jpg

F 73688: use default font system (WIP, hdu)

several fixes in salatsuifontutils (hdu)

several fixes in salframe (pl)

defaut user install dir is now ~/Library/Application Support/OpenOffice.org-aqua (ericb)

added pulse effect to help for refresh


Saturday 13th / Sunday 14th

F 74392: tooltip crash (mikesic)

(IMHO fixed with mikesic patch) 72250: toolbar icon click -> crash with aqua menus (not fixed? Worksforme)

F 74392: tooltip crash (mikesic)

alpha 0.7

Sun decided to officialy supports the Mac OS x port (3rd May)

Welcome to Philipp Lohmann and Herbert Duerr , who joined the Team (3rd May)

resync m211 (1st May)

[Top 10 of issues] modify Bundle tree (issue 73693): change committed 28th April (ericb)

Google SoC: welcome to Ismael Merzaq and Omer BarOr , our two selected candidates: ismael will work on aqua look (NWF), and Omer will work on Mac OS X Address Book Integration.

resync: m208 (11th April)

(exp / not commited) Ismael proposed a patch for Utility Windows more Aqua compliant + SetMin/MaxSize() (9th April)


Native menus are defaults (ericb) (8th April)

Frederic Barbaise (alias boulifb) joined the port (3rd April)

Work on saltimer.cxx started mikesic (27th March)

Pavel commited Michael patch for invert and drawAlphaRect() (27th March)

Started 27th March

alpha 0.6

Damien started to work on drawEPS()

plipli and ericb work on refresh

Michael Sicotte proposed to investigate in timers, and continue [Pavel's work]: objective is to replace obsolete code. (23th March)

[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing (21th March)

[commit scheduled] Michael Sicotte proposed a complete patch for invert() (SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME) (20th March)

Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code

ismael and michael work on invert() + drawAlphaRect()

Started (19th March) :

alpha 0.5

Top 10 Summary: 7 issues over 10 are fixed or very close to be:

time to code review, tracing, and search for memory leaks


[done] Unicode input in salframe (ekato) (19th March)

[experimental, works partially] beginning of HIView + HIComboxes works (text still missing) (ericb + plipli) (14th March)

[done] replace NewRgn() in salframe (ericb (11th March)

[experimental, but very interesting] Improved native windows (ismael) (7th March)

alpha 0.4

[Informative] build runs with Leopard 9A377a (fheckl) (7th March)

Refresh screen issues (plipli) (4th to 10th March)

[informative] plipli announced progress with refresh screen issues (28th February)

[experimental, not yet commited] Proxy configuration from system (pjanik) (28th February)

[done] highlighted native button (pjanik) (27th February)

Native File Picker works (fheckl / pjanik) (23th February )

alpha 0.3

Cursor does appear -> invert() + setting a setBlinkTime value in UpdateSettings() (pjanik /ericb)

[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()

pjanik patch for Focus Events

[done] scrolling works (pjanik) (17th February)

[done ] carret works (plipli) (17th February)

[done] checkbuttons fix for checkmarks (ericb) (17th February)

[Informative] Pavel Janik propose to solve offScreen buffer using HIView (17th February)

[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx (ericb (16th February)

Michael Sicotte joined the Team (15th February)

invert(): first try (ericb) (13th february)

alpha 0.2

[12th February 2007 ]

[done] calc does not start: bug identified by tino , first workaround (ericb) [issue 73691]

[done] bitmaps in native popup menus (ismael)

[done] replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc (ericb) (12th February)

correct salatslayout patch (plipli) (11th February)

[Informative] Michel Renon proposed a summary about his work on fonts issues

[patch] Pavel fixed several menu crashes (09th February)

[Informative]: Pavel posted a mail about several crashes origin

patch for radioboxes and checkboxes (ericb) (9th February)

first complete patch for salatslayout.cxx (plipli) (9th February)

[done] most important crashes fixed (pjanik) (09th february)

Modified baseline for 2.2.: Mac OS X10.4 -> Aqua will be 10.4 and 10.5 compatible only (ericb)

first try with multi line sallayout (plipli) (08th February)


Damien Duportal joined the Team (7th February)

[done] scrollbar changes (ericb) (4th February)

alpha 0.1

create Top 10 of issues before alpha 3rd February 2007: See: [Top 10 of issues]

[experimental, not commited] patch for TPT() implementation (ericb) (2nd February 2007)

Pavel Janik proposed to implement TransformProcessType() (2nd February 2007)

[not commited] implement UpdateSettings() (ericb)

Pavel Janik resynchronized aquavel01 cws with m202 (2nd February 2007)

alpha 0.03

Michel Renon joined the Team (1st February)

[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks (ericb)

[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)

[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)

alpha 0.02

[done] modify libsalsystools.dylib to be correctly loaded with the bundle (ericb, + pjanik)

[done] add mouse drag events (pjanik)


alpha 0.01

[done] add new feature for Aqua windows, to allow QuickTime player use(mox)

[done] replace obsolete code in salframe.cxx with (ericb)

[done] fix correct size for main window (GetOptimaWindowSize() ) (ericb)

[done] fix alpha channel in pixmaps (ismael)

alpha 0.0

[done] pushbutton where not correctly drawn (ericb)

[done] fix missing mouse events (pjanik)

[done] fix nRepeat in text entry (ssa)

2nd Mac porters Meeting

Work in progress

URGENT :

Top of issues causing crashes: event issue when tips is enabled causes crashes (well known window / handler / window desctructor / event loop bug)


Salatsuifontutils: replace old code, track leaks: tino

[done] Bitmaps: (isma87)

[running] Crashes: (tino, pjanik, ericb, isma87, plipli)

[???] Drag and drop: (vijay)

[???] Printing (ybart)

Florian Heckl proposed a subject for Google Summer of Code about native printing

Drawing/ windowing (plipli / ericb) -> mainly refresh

[done] Implement cursor

[started] Native Controls (ericb)

[work in progress] partial multiline sallayout (plipli)

To do:

(started, Oliver) - modify the tree to make the bundle start without hack (issue fixed during buildtime)

(started, Florian Heckl) verify Native FilePicker implementation (works , tested in Hamburg )

[done] Ismael Merzaq) implement blit functions in salgdi (important fix: probably apha version to be tested once done)

[done] Sebastien Plisson- update the missing functions list (fonts ... ask hdu & cl

[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code



fix crashes with menus (started: tino)

Sort of documentation about VCL around Native Mac OS X port

Do we really need to understand how it works? ;-)


vcl content:

ls -laR | wc -l

 1750

-> Uff 1750 files to analyse :-/

Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.

How analyse with more efficiency? After some months to anlalyse "horizontaly", it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with "orthogonal" method (compared to the previous one). The first method wasn't obviously not the good/best way to describe vcl.

[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such "objects".

With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API "encapsulated".

The most difficult is to see where the API is used. But for all the parts, this is the same.

Finally, what is important is the design of vcl. Which patterns are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.

VCL organisation

Thank's to Philipp Lohmann for this short, but precise description:

Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).

SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()

SalFrame abstracts any kind of system window.

SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)

SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.

SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)

SalSound is for sound playing.

SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).

SalOpenGL provides OpenGL functionality if available.

SalTimer is an interface for periodically triggering the event queue (to timer implementation).

SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).

SalSystem has some system specific methods that did not belong anywhere else:-)

Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.

Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).

Ericb 16:12, 1 July 2006 (CEST)

Sub-directories description

Organisation of vcl directories

Aquavcl organisation complete 02.jpg

Directories in vcl. Short description

aqua : The name Aqua means Apple look and feel, and is well known as Aqua Human Interface Guidelines. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]

prj : Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl.

qa does contain all quality assurancy stuff

source: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress).

Depending on the OS and the architecture, binaries are built or not.

test : This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you'll find three documents (one writer, one calc and one impress) for tests purpose. Other available tests are about memcheck and persistent window state.

unx : this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.

win : Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.

workben: Does contain a toy called "svdem". svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need:

- display a window first (al least ...:))

- close cleanly this window

- display a point

- trace a line

- trace an area

- superpose two areas doing some important graphical operations, (like xor),

- display a character

- display a menu.

- intercept events correctly.

[FIXME] add more tests

Ericb 13:21, 3 June 2006 (CEST)

Naming convention

  • Class names start with upper case letters, to improve readability.
  • Implemented Class names are derived from the virtual classes but can of course take arbitrary names.

To increase readability, it's recommended to closely follow the base class name.

  • Impl prefix: means Implementation details. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.


Events types using Carbon API (Mac OS X): A lot of events have to be managed in runtime. Here is a short description

- do not freeze because bad event loops

- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx


Apart: exact sense of hedabu? -> [FIXME] as far as I understood it: it is like "copy" to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. "headabu" is supposed to disappear little by little.

What do we have to build in vcl?

Two libraries, corresponding ressources (localized) and a toy so called « svdem »

Common part:

in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.

Specific part " a plugin " :

Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib

As you can see, win means windows part, in blue

For Unix build (Linux, Solaris or current Mac OS X X11), in purple.

Result will be:

libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I'm not sure for other cases).

Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib

In runtime, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like "empty boxes".

Current Aqua content

A more complete description of aqua (Mac OS X / no X11 specific): Vcl aqua organisation 02 tree.jpg


EXISTING objects to build in aqua

Sal APP "everything application"

[FIXME] add all objects descriptions

saldata

  • Defined in plugin exclusively (i.e. for headers)

Unix: unx/source/app/saldata.cxx (header in unx/inc)

Aqua: aqua/source/app/saldata.cxx (header in win/inc)

Windows: win/source/app/saldata.cxx (header in aqua/inc)

  • Role: saldata contains various kind of data used by the implementation for the concerned platform. It is a bunch of global data collections reserved for the platform

It is just completely platform dependent, and nobody except this plugin can see it.

Saldata is something like a "second sal", but providing an abstraction regarding windowing and graphics, while SAL module provides an abstraction more Operating System oriented)

e.g.: have a look at XRequest array in vcl/unx/source/app/saldata.cxx => all calls are for Xlib (X11). Ok, useless there, but interesting:-)

[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.


saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.

Current list of possible objects who can be instantiated/released:

structure SalData: does contain pointers on all kind of objects from other classes used in saldata.

inline functions: [FIXME]: complete the description

- SetSalData: - GetSalData: - GetAppSalData:

salinst

=> implemented in vcl/aqua/source/app/salinst.cxx

Role:

  • get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),
  • instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.


Current list of possible objects who can be instantiated/released:

* VirtualDevice [FIXME]: exact role?
*Printer  

- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -

- InfoPrinter (Get/Create/Delete)

- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)

* System (Create / Delete) [FIXME]: what means system here?
* Events: 

AquaSalInstance::SetEventCallback()

AquaSalInstance::SetErrorEvenCallback()

AquaSalInstance::GetConnectionIdentifier()

* Menu / MenuItem: 

AquaSalInstance::CreateMenu() / same for DestroyMenu()

AquaSalInstance::CreateMenuItem / same DestroyMenuItem()

* Sound: 

AquaSalInstance::CreateSalSound() => object to a pointer of SalSound type

Note: AquaSalInstance::DestroySalSound is not implemented (?)

* Timer: CreateTimer() /

AquaSalInstance:: DestroyTimer() is not yet implemented (?)


Class MacImeStatus: inherits of SalI18NImeStatus

-> only there to see if there is a window to toggle into menubar [FIXME]??

AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus

For futher informations, see: Content of salinst.cxx

(Ericb 16:11, 20 May 2006 (CEST))

salmain

Role: if possible, runs the standard vcl application code SVMain()

(Ericb 16:15, 20 May 2006 (CEST))

salsound

salsys

saltimer

saltimer

The main problem with SalTimer is the code we use is obsolete. To remove this deprecated code, sevarl work have been tried

1) Pavel Janik, in issue 75228

works, but a serious problem is remaining (a thread issue, nothing anybody explained yet)

2) eric bacahrd (code will be attached soon)

3) Michael Sicotte, who proposed to work on that, and continue Pavel implementation.


SalTimer description

AquaSalTimerproc

AquaSalTimer::Start()

AquaSalTimer::Stop()

AquaSalTimer::Restart()

AquaSalTimer::Installtask() // yet needed?

Sal GDI (everything Graphical Display Interface)

salgdinativewidgets

native controls

salatslayout

==> implemented in vcl/aqua/source/gdi/salatslayout.cxx

- Handle text layouting :

   * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer
   * Use ATSUI (ATSU..) to get informations about glyphs
   * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)
     that are used in various methods.

salatsuiutils

salfontutils

salmathutils

sal bmp

salvd

salpixmaputils

salprn

salrectangle

salvd

Sal Window

salframe

Documentation in progress, from damiend : Damiend page

salobj

TO BE IMPLEMENTED (missing in Aqua)

Audio

audioconvert

(obsolete?) 

devaudio

(obsolete?)

native sound

salimpsound

vsound

i18n

keysymnames

saldisp

sm

[FIXME]: is session manager usefull?


Native Controls

Scrollbar

Works as expected. The most important work is done

See: Mac_OS_X_Porting_-_Native_Controls#ScrollBar

DrawThemeButton() documentation

Started

See: Mac_OS_X_Porting_-_Native_Controls#ComboBox

Started

DrawThemeButton
Draws a button.

OSStatus DrawThemeButton (
   const Rect * inBounds,
   ThemeButtonKind inKind,
   const ThemeButtonDrawInfo * inNewInfo,
   const ThemeButtonDrawInfo * inPrevInfo,
   ThemeEraseUPP inEraseProc,
   ThemeButtonDrawUPP inLabelProc,
   UInt32 inUserData
);
Parameters
inBounds
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.

inKind
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. 
See “Theme Buttons” for descriptions of possible values.

inNewInfo
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, 
set the structure to contain the new state, value, and adornment for the button. 
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters
to apply transitional animation or sound effects as the button state changes, if such are 
specified under the current theme.

inPrevInfo
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,
set the structure to contain the previous state, value, and adornment for the button, 
to allow DrawThemeButton to apply any transitional effects. If the button state is not 
changing, you can pass NULL.

inEraseProc
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass
a universal function pointer to an application-defined function such as that described in 
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing
 the button. If you pass NULL, DrawThemeButton's default behavior is to erase the background
 for you.

inLabelProc
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an 
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.

inUserData
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in 
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.

Return Value
A result code. See “Appearance Manager Result Codes”.

Discussion
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is 
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the 
background of the button before drawing the button. After the button is drawn, if a
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls
that function to draw the button’s label.

Note that DrawThemeButton also draws any appearance adornments for the button and that these
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,
and may be of variable shape. You may therefore wish to call the function
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging
to a button under the current theme.

Version Notes
This function is available with Appearance Manager 1.1 and later.

Availability
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.
Available in Mac OS X 10.0 and later.
Declared In
Appearance.h

HIComboBoxCreate() documentation

HIComboBoxCreate
Creates a combo box control.

OSStatus HIComboBoxCreate (
   const HIRect* boundsRect,
   CFStringRef text,
   const ControlFontStyleRec* style,
   CFArrayRef list,
   OptionBits inAttributes,
   HIViewRef* outComboBox
);
Parameters
boundsRect
The bounding box of the control.

text
The default text in the editable portion of the control. Can be NULL.

style
The font style of the both editable text and the text in the disclosure list. Can be NULL.

list
The default values available in the disclosure list. Can be NULL.

inAttributes
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.

outComboBox
On exit, a pointer to a reference for the new control.

Discussion
The combo box can be used in compositing mode, as well as traditional Control Manager mode.
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.

What is used for Linux, Windows, Mac OS X ...build?

Description of the dependencies

Windows

MacOS X

Linux

Solaris

Content of Aqua

Click here to see the complete list


Content of vcl/inc

Notes:

1) Where to find includes

<foo/bar.hxx> means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)

2) suffix .h (for C calls or first version?) or .hxx (C++)

A) Family of includes:

Looking more closely at the list brings to the fore (expression from dictionary ;-)) that include names are informatives. Most of the time, the name gives the function/role. What is interesting is the files with name begining with "sal". sal means System Abstraction Layer + include's function (or explicit name).

Partial list, for example:

salatype.hxx

salbmp.hxx

salctrlhandle.hxx

salctype.hxx

salframe.hxx

salgdi.hxx

salgeom.hxx

sallayout.hxx (main header for fonts services) ... salmenu salnativewidgets ...etc

Other important families are "sv" and "uno" or "win" (window) prefixed. sal family will be analysed apart.

B) Includes of includes

Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.

To verify, a simple test to do in vcl/inc:

egrep -H "#include" ./* | wc -l gives me 681 lines ! And some of them are the same...

To know more, the precedent command line can be modified to make appear the numerous call to the same includes files.


egrep -H "#include" ./* | cut -d"#" -f2 | sort > liste.txt

The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**

**see http://wiki.services.openoffice.org/wiki/Source_code_directories


I'm nearly sure that a complete analysis of just this result will give us a lot of information.

I propose to change the order of analysis starting with dllapi.h and sv.h.


[to be continued]

B1) "sal" includes family

salinst.hxx This seems to be the main include file

salatype.hxx

salctrlhandle.hxx

salctype.hxx

salframe.hxx

salgdi.hxx

salgeom.hxx

sallayout.hxx <-- see Native Fonts implementation

salgtype.hxx

vcl/inc/salobj.hxx


B2) Classicals includes

file: abstdlg.hxx [ means abstract dialog ]

This includes does contain the following classes definitions:

[FIXME]: choose a precise presentation template for classes


VclAbstractDialog,

VclAbstractTerminateDialog,

VclAbstractRefreshableDialog,

VclAbstractDialogFactory,


uses <tools/solar.h> , <tools/string.hxx> +

"dllapi.h"

Note: dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS's and archs). Just including sal/config.h does it !


Classes:

Window -> what? [FIXME] ResId -> what?

Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC


file: dllapi.h [ dll for dynamic linked library ] Uses: <sal/config.h> and >sal/types/h> includes: VCL_DLLPUBLIC macro


file: accel.h [ means accelerator ]

Classes:

Accelerator { } ImplAccelEntry { public members:

Names

mnId maKeyCode mpAccel mpAutoAccel mbEnabled }

function / returns / parameters

ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3

file: accel.hxx

Uses: <sv.h> , "dllapi.h" ,<tools/resid.hxx>, <<tools/rc.hxx>


Classes:

ImplAccelData; ImplAccelEntry;


Important Links

Progressive implementation

Native Font server Implementation Mac OS X Porting - Native Fonts

Native Sound Implementation: Mac OS X Porting - Native Audio and Video

Native Printing Implementation: Mac OS X Porting - Native_Printing

Drag and Drop implementation: Mac OS X Porting - Native Drag and drop

Data Acquisition: Mac OS X Porting - Data Acquisition

This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s

[to be continued:-) ]

Keyboard comparizon between OpenOffice.org / Mac OS X application

[FIXME] redo a cleanest array

Modifier + key Result TextEdit returns
ALT a æ æ
ALT b ß ß
ALT c © ©
ALT d
ALT e ê ê
ALT f ƒ ƒ
ALT g
ALT h Ì Ì
ALT i î î
ALT j Ï Ï
ALT k È È
ALT l ¬ ¬
ALT m µ µ
ALT n ~ ~
ALT o œ œ
ALT p π π
ALT q
ALT r ® ®
ALT s Ò Ò
ALT t
ALT u º º
ALT v
ALT w
ALT x
ALT y Ú Ú
ALT z  Â
ALT A Æ Æ
ALT B
ALT C ¢ ¢
ALT D
ALT F · ·
ALT G
ALT H Î Î
ALT I Î Î
ALT J Í Í
ALT K Ë Ë
ALT L | |
ALT M Ó Ó
ALT N ı ı
ALT O Œ Œ
ALT P
ALT Q Ω Ω
ALT R
ALT S
ALT T
ALT U ª ª
ALT V
ALT W
ALT X
ALT Y Ÿ Ÿ
ALT Z Å Å
ALT $
ALT ` @ @
ALT £ # #
ALT * ¥ ¥

Sous réserve d'erreur ou omission Ericb 00:05, 14 January 2007 (CET)


--Ericb 15:00, 22 Jul 2005 (EDT)

Personal tools