r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[!REBOL3 GUI]

BrianH
12-Aug-2010
[2597x2]
Complexity is the enemy for the R3 GUI.
If you have to add graphics to text, you are using Draw.
Maxim
12-Aug-2010
[2599x2]
it won't add to the complexity.  that's the point of it being a switch.
if you are building your own draw gobs, you have an 'option'  for 
it to render upside down.  that's it.
BrianH
12-Aug-2010
[2601]
You can't add graphics to a text gob. Or any of the other specialized 
gobs, just to the draw gob.
Maxim
12-Aug-2010
[2602x2]
yes I know, I am speaking high-level here, sorry.  if you have to 
match values of different gob types which render in different directions, 
it will be mayhem.
which is why it must be a switch.   within everything using the same 
direction by default.
BrianH
12-Aug-2010
[2604x2]
They don't render in different directions. All of them render from 
the top down. What you are talking about is internal coordinates. 
How the gob is located externally has nothing to do with how it is 
coordinated internally.
Gobs can contain other gobs.
Maxim
12-Aug-2010
[2606x3]
yes I know all of this.    i am trying to add functionality to the 
rendering engine... its totally invisible to actual gob high-level 
constructs.
and allowing a switch to the gob, so it can tell *only* the rasterizing 
engine to render bottom up, using all of the internal coordinate 
values AS-IS.
this effectively adds very little overhead, and solves the issue 
for all cases.
BrianH
12-Aug-2010
[2609]
So all you are talking about is Draw. It wouldn't have anything to 
do with switches to a gob, since it would be fully contained within 
one gob.
Maxim
12-Aug-2010
[2610]
no, I want all gob children to obey the direction.
BrianH
12-Aug-2010
[2611]
Except for gob children that aren't Draw gobs.
Maxim
12-Aug-2010
[2612x3]
why prevent them from accessing the feature?  if the rasterizer can 
work on either directions, I think all gobs should have the capability 
to control this.  they would simply inherit the "current" direction 
or not based on type, but they should be allowed to render upside 
too, if specifically required.
you are assuming view is used to draw GUIs, but its used for other 
things too.
R3 GUI would be top-down by default for everything.
BrianH
12-Aug-2010
[2615x2]
There is no problem with the external coordinate system that placed 
a gob being completely different from its internal coordinate system. 
It just adds complexity. But having the coordinate system be inherited 
adds so much more complexity (modal behavior) that it is a bad idea. 
It is better to have each gob have a predictable coordinate system, 
not a different one based on its container.
I am having trouble explaining this to you without pictures.
Maxim
12-Aug-2010
[2617]
it depends on gob type.  font should not inherit by default, draw 
should.  but I might want to render text upside to create a reflection, 
without incurring the hit of applying a transform to the coordinates...
BrianH
12-Aug-2010
[2618]
All such things should be done with draw gobs.
Maxim
12-Aug-2010
[2619]
but I also might draw to render top-down.
BrianH
12-Aug-2010
[2620]
Complexity is the enemy here. We don't want to add too many options, 
because processing them has overhead in mental, development time 
and runtime. Pick a coordinate system.
Maxim
12-Aug-2010
[2621x3]
direction would be a tri-state 'up 'down none.


none means inherit.   all gob types would have their defaults set 
to one of the three states.
the fact that its implemented as above, means its consistent and 
simple.
if each type does something different then everything becomes complex, 
except for one if condition in the run-time.
BrianH
12-Aug-2010
[2624]
Sorry, you lost me at "inherit". I'll have to let Cyphre chime in 
from this point.
Maxim
12-Aug-2010
[2625]
again, I'd have to look at the AGG rasterizing pipeline to see how 
it functions, but the only procedural overhead is in how it inherits 
its origin at each gob.   


it might even be impossible from the get-go, based on how the actual 
rasterization is performed.  


in Flash this would be impossible.  but IIRC past discussions with 
Cyphre, we use a different rasterizing process, which would allow 
the whole idea.
BrianH
12-Aug-2010
[2626]
You keep looking at procedural overhead and ignoring conceptual and 
declarative overhead. Keep those in mind, please.
Maxim
12-Aug-2010
[2627x2]
no I am not.  


the implementation example allows a 100% invisible to current use, 
 without any in-REBOL code added.


applying it is a simple assignment of a value to a (new) gob! property.
conceptually is solves a problem in just about GUI engines out there. 
 and its dead simple to use and understand.
BrianH
12-Aug-2010
[2629]
And with that added option, how simple is it to check the gobs to 
make sure the option isn't specified? Multiply that answer by the 
number of times that check would need to be added to code. That is 
why you lost me at "inherit". But if you can convince Carl and Cyphre, 
go for it.
Maxim
12-Aug-2010
[2630]
the way I see it the direction would be managed at the same place 
and time any origin check is performed.
BrianH
12-Aug-2010
[2631]
at the same place and time any origin check is performed
 - That is the added complexity, the origin checks.
Maxim
12-Aug-2010
[2632]
yep.
BrianH
12-Aug-2010
[2633]
And how often would user code written in REBOL need to add origin 
checks? Style writers?
Maxim
12-Aug-2010
[2634x3]
for GUIs, actually never.  unless they are building a funky style 
which manages this property specifically.
if you decide to reverse rendering direction, manually, its your 
decision.  you children should render upside down.
that is what you asking view to do.
Oldes
13-Aug-2010
[2637x2]
I'm not sure if it helps, but in Flash you can set alignement as 
you need: http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary674.html
In REBOL we have TL and Maxim asks for BL.
The difference is, that in Flash you can set it only once.. but Maxim 
want's per gob alignement.
DideC
13-Aug-2010
[2639]
Its not alignments, its coordinate system.

With alignments the movie picture is glue to a border or centered 
in both direction.
With coordinate the picture itself would be mirrored in H or V !
Cyphre
13-Aug-2010
[2640]
Long discussion here ;) Ok, currently we are using origin(0x0) of 
coordinates from top-left corner. If I understand Maxim's request 
he wants to be able to easily change the orgin so it starts from 
bottom-left corner right?
Graham
13-Aug-2010
[2641x3]
Yes
for somethings it is easier to use top left and others bottom left 
as 0x0
Accepting that few other systems allow you to change the coordinate 
system on the fly
Cyphre
13-Aug-2010
[2644x3]
If this is the issue there are two solutions.

1. even now you can set the transformation matrix for example using 
MATRIX command(or other matrix related commands)  to change that

2. internally in the AGG code there is a way how to change the order 
in which the scanlines of the framebuffer are rendered in the Y-axis. 
In other words you can flip the Y axis.
the 1. is very flexible way how to setup the coordinate system ie. 
it allows you not only top-left or bottom-let but any other way you 
need.
using the 2. you can only control the Y axis nothing more
We we look at this from the performance POV:

-IIRC the transformation matrix is *always* used in the graphics 
pipeline so it doesn't matter if the matrix is set to 'top-letf' 
or 'bottom-left' or whatever else. There is no performance difference.

The only difference is that if you want to change the 'origin' you 
need to put one mroe command into the DRAW dialect block. I think 
you will agree that one more matrix command in the block can be assumed 
as almost no performance penalty.