[mcclim-devel] possible buglet in highlighting shapes

Duncan Rose duncan at robotcat.demon.co.uk
Wed Apr 27 23:02:38 UTC 2005


I've been working with McCLIM on and off for 18 months or so now I 
guess... mainly back end related stuff, but more recently I've started 
looking at actually building apps. I'll offer my opinions in the 
following...

On Wednesday, April 27, 2005, at 03:39 PM, rpgoldman at real-time.com 
wrote:

>
> My thanks to all of you who pointed me at the :single-box argument for
> with-output-as-presentation.  And an extra thank-you to Paolo for the
> ksnapshot pointer.
>
> A quick question, though, and this is not intended as a flame ---
> is this problem a manifestation of some issues with programming
> (Mc)CLIM?
>
> My impression is that there are two challenges to programming with
> McCLIM:
>
> 1.  The paradigm is radically different from any other interface
>     coding framework.
>

I'd agree with this to a certain extent; I've observed many 
similarities between CLIM and the Cocoa APIs from Apple in the 
windowing substrate (UI is based around NSViews (sheets) which can be 
scaled and rotated arbitrarily using affine transforms, whose coords 
are transformed into the coords of its parent; patterns can be used as 
inks (rectangular-tile); events are passed to NSViews as required, the 
NSView handles the event (or passes it on) which is similar to the 
event handling in CLIM, + other stuff).

Of course, that could be the 'easy' bit in CLIM. I haven't seem 
presentations etc. anywhere else and haven't grokked them properly yet, 
so that's pretty different.

For other GUI toolkits I've used, I'd agree the difference is radical.

I'm hoping that practice will make things easier.

>     This certainly isn't a killer for me, because I happily used
>     Garnet for many years (and if I understood X well enough to
>     modernize its back-end, I would probably go back to it today).
>
> 2.  There seems to be an awful lot of black art to getting a CLIM UI
>     to look right and behave in ways that users will perceive as
>     normal.
>

I'd agree with this too; I initially wanted to port DEUCE to CL when I 
started looking at McCLIM. Then I got a Mac, and decided to work on a 
back end instead. My plan was to implement a slow-but-correct 
Cocoa-based back end for McCLIM. I'm half-way there now (I have 
something that's slow) but getting the correct part is the trick. I've 
read certain sections of the spec repeatedly ('geometry substrate', 
'windowing substrate', parts of 'building applications' mainly), and 
inspected the McCLIM code in detail too in these areas and I still have 
no idea what the 'correct' behaviour is in many cases.

Some things seem not to work properly, but it's hard to be sure because 
the spec is vague (for example, how do you create a sheet whose 
orientation is :graphics rather than :default, and whose coords are 1 
unit = 1 inch? Sure, I can manually provide a transform to do this, but 
shouldn't picking a graft with these properties make this happen out of 
the box? Maybe it does, I don't know, because there doesn't seem to be 
a way to specify the graft options anywhere (without using 'find 
graft') - my expectation was (and sort of still is) that this should be 
able to be specified as part of the 'define application frame' 
functionality (i.e. done at a high level rather than a low level in 
application code). Assuming it can only be done at a low level, how 
does the application developer change the graft? Create all the sheets, 
find a new graft with the (non-default) options, degraft and then 
regraft the hierarchy on the new graft? Not use 
'define-application-frame'? The spec discusses graft options, but it's 
not clear if that's just for completeness (e.g. 'here's how CLIM on 
Genera works') or whether the facilities are actually supposed to be 
used. There's even a comment in the spec about "I'm not sure how much 
of this [graft functionality] is obsolete".

Also things like specifying an :application pane type in the :panes  of 
an application frame, passing ':scroll-bars t' but not having the pane 
become scrollable when output is drawn that doesn't fit on the mirror 
region. I'm not sure if this is user error or implementation error.

>     I don't have a good read on how much this is because McCLIM is
>     still evolving, and how much this is because of the nature of the
>     CLIM beast.

I think from my point of view it's 25:75. McCLIM is still evolving, and 
there are some obvious areas reading the code that are 'wrong' (in 
quotation marks because it's not actually obvious at all whether it's 
wrong or not. I'm thinking specifically about 'update-mirror-geometry' 
where comments in the code lead me to believe compromises are made 
because of 'X limitations').

(And should the native transformation of a graft be 
+identity-transformation+ (suspect it should depend on units & 
orientation)? Should the native region of a graft be +everywhere+? 
These seem to be reasonable assumptions, the spec is silent, so how to 
decide?).

Most of this (IMHO) is definitely down to vagueness in the spec (for 
another example, according to the LispWorks CLIM user guide, a 
platform-specific fontspec can be used as a text-style (e.g. an X 
fontspec), and this is intimated at in the spec too, but it's not made 
clear). I have no idea if McCLIM supports this though (I think: no). 
And then there's the 'design protocol' (section 14.7). Hrm. (+ see 
above on grafts).

>   Do we need better defaults to make things happen more
>     naturally?  How feasible would that be if we want to comply with
>     the CLIM spec?

I think the defaults used in the code correspond to those outlined in 
the spec. The LispM had a natty tool (well - Explorers had one) called 
'profile' that allowed settings to be changed easily by the user. I 
dare say one day somebody will write one for McCLIM (it doesn't 
actually look like it would be too hard to me). Then we would have the 
best of both worlds; defaults in the code that corresponded to the 
spec, but that were easily modified by the user.

>   Or should we provide macrology to wrap things up
>     more easily for new CLIM programmers?  I'm still fumbling around
>     myself, so I find it hard to say what would make things easier,
>     since I might just be doing things wrong.

I think some tools would help here - particularly a UI builder 
(presumably that has some support for defining presentations and 
commands). I feel that in the future (as tools are developed) things 
will be better (for the application developer) than they are currently 
(although I also think that just implementing as much of the spec as 
has been implemented already is quite an outstanding achievement).

-Duncan


>
> Best,
> R
> _______________________________________________
> mcclim-devel mailing list
> mcclim-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/mcclim-devel
>




More information about the mcclim-devel mailing list