|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--sub_arctic.lib.min_interactor | +--sub_arctic.lib.base_interactor | +--sub_arctic.lib.base_parent_interactor | +--sub_arctic.test.circ_lens
Class to implement dragging and drawing for a circular semantic lens. When this object is drawn, it does a traversal of the subtree rooted at the parent of this object. That traversal does an alternate rendering (semantic redraw) of the subtree within the bounds of this object. This redraw can be done on top of the normal draw (by setting clear_back false, which is the default), or the normal drawing can be cleared and replaced the alternate rendering. Alternate renderings are done via a "interactor_predicate" object that parameterizes this object and is passed to a traverse_and_collect() of the parent.
This object does a drawing trick to turn a fixed size square lens into a circular lens. Basically we draw the square lens a little smaller than our size, then draw a circular ring image over it such that the bound of the smaller square fits between the inner and outer diameters of the ring. This way we only see the lens inside the ring, and none of the lens is seen outside the ring.
This implementation uses a fixed image for the ring and hence has a fixed size. This should eventually be replaced by a programmatic construction of an arbitrary sized ring (although that probably wouldn't look as good as the prepared image). As with other lenses, for complete operation, this object should be placed under a semantic_lens_parent object (the object will work with other parents, but redraw anomalies for dynamically moving objects within the lens can occur).
semantic_lens
,
semantic_lens_parent
,
sem_draw_context
,
sem_draw_continue
,
base_interactor#traverse_and_collect
Field Summary | |
protected boolean |
_clear_back
Indication of whether we clear our background first, or draw over the top of the objects that were drawn before us. |
protected interactor_pred |
_draw_obj
The "predicate" object that does the specialized drawing for this lens. |
protected static loaded_image |
_ring_image
|
protected int |
_sem_draw_kind
Identifier for the particular kind of semantic redraw pass being done here. |
protected static int |
lens_size
size of (square) drawing area |
protected static int |
lens_top_left
position of top and left of drawing area |
protected static int |
ring_image_height
|
protected static int |
ring_image_width
|
protected static int |
sem_draw_trav_id
unique identifier for sem_draw traversals |
Fields inherited from class sub_arctic.lib.base_interactor |
_child_index,
_child_list,
_clip_bounds,
_constraint_flags,
_enabled_constraint,
_flags,
_h,
_h_constraint,
_parent,
_part_a_constraint,
_part_b_constraint,
_user_data,
_visible_constraint,
_w,
_w_constraint,
_x,
_x_constraint,
_y,
_y_constraint,
default_child_hint |
Constructor Summary | |
circ_lens(interactor_pred draw_action,
int draw_kind)
Simplest constructor. |
|
circ_lens(int xv,
int yv,
interactor_pred draw_action,
boolean clr_back,
int draw_kind)
Full constructor. |
Method Summary | |
boolean |
clear_back()
Indication of whether we clear our background first, or draw over the top of the objects that were drawn before us. |
boolean |
drag_end(event evt,
int x_pos,
int y_pos,
int start_x,
int start_y,
int grab_x,
int grab_y,
java.lang.Object user_info)
Handle input corresponding to the end of a move-drag. |
boolean |
drag_feedback(event evt,
int x_pos,
int y_pos,
int start_x,
int start_y,
int grab_x,
int grab_y,
java.lang.Object user_info)
Handle a movement during a move-drag. |
boolean |
drag_start(event evt,
int xv,
int yv,
int gx,
int gy,
java.lang.Object user_info)
Handle the start of a move-drag to the object. |
interactor_pred |
draw_obj()
The "predicate" object that does the specialized drawing for this lens. |
protected void |
draw_self_local(drawable d)
Override draw_self to do a semantic lens. |
void |
pick(int pt_x,
int pt_y,
pick_collector pick_list)
Override pick to just grad ring. |
boolean |
press(event evt,
java.lang.Object user_info)
Handle mouse button press input to the object by making us the move-drag drag focus. |
boolean |
release(event evt,
java.lang.Object user_info)
Companion to press -- here we ignore the releases. |
static loaded_image |
ring_image()
|
int |
sem_draw_kind()
Identifier for the particular kind of semantic redraw pass being done here. |
void |
set_clear_back(boolean v)
Set whether we clear our background first, or draw over the top of the objects that were drawn before us. |
void |
set_draw_obj(interactor_pred dobj)
Set the "predicate" object that does the specialized drawing for this lens. |
Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
Field Detail |
protected static final int sem_draw_trav_id
protected boolean _clear_back
protected interactor_pred _draw_obj
sem_draw_context
protected int _sem_draw_kind
protected static final int lens_top_left
protected static final int lens_size
protected static int ring_image_width
protected static int ring_image_height
protected static loaded_image _ring_image
Constructor Detail |
public circ_lens(int xv, int yv, interactor_pred draw_action, boolean clr_back, int draw_kind)
int
- x x position of the lensint
- y y position of the lensinteractor_pred
- draw_action a "predicate" object which does the
specialized drawing of an object for this lensboolean
- clr_back do we clear the background before we drawint
- draw_kind identifier that indicates the kind of semantic
redraw that we are doingpublic circ_lens(interactor_pred draw_action, int draw_kind)
interactor_pred
- draw_action a "predicate" object which does the
specialized drawing of an object for this lensint
- draw_kind identifier that indicates the kind of semantic
redraw that we are doingMethod Detail |
public boolean clear_back()
public void set_clear_back(boolean v)
boolean
- v indicating whether we should clear our background.public interactor_pred draw_obj()
sem_draw_context
public void set_draw_obj(interactor_pred dobj)
interactor_pred
- dobj the drawing "predicate" object.public int sem_draw_kind()
public void pick(int pt_x, int pt_y, pick_collector pick_list)
int
- pt_x x coordinate of picking pointint
- pt_y y coordinate of picking pointpick_collector
- pick_list result listpublic boolean press(event evt, java.lang.Object user_info)
event
- evt the press event.Object
- user_info the information associated with this object
at pick time.public boolean release(event evt, java.lang.Object user_info)
event
- evt the release event.Object
- user_info information associated with this object at
pick time.public boolean drag_start(event evt, int xv, int yv, int gx, int gy, java.lang.Object user_info)
event
- evt the event "causing" the drag.int
- xv the x location of the object at start of drag (in
parent's coordinates).int
- yv the y location of the object at start of drag (in
parent's coordinates).int
- gx initial grab location within the object.int
- gy initial grab location within the object.Object
- user_info the information associated with this object when
it requested drag focus.public boolean drag_feedback(event evt, int x_pos, int y_pos, int start_x, int start_y, int grab_x, int grab_y, java.lang.Object user_info)
event
- evt the event "causing" the drag.int
- x_pos the x position this object should move to.int
- y_pos the y position this object should move to.int
- start_x the x location of the object at start of drag (in
parent's coordinates).int
- start_x the y location of the object at start of drag (in
parent's coordinates).int
- grab_x initial grab location within the object.int
- grab_y initial grab location within the object.Object
- user_info the information associated with this object when
it requested drag focus.public boolean drag_end(event evt, int x_pos, int y_pos, int start_x, int start_y, int grab_x, int grab_y, java.lang.Object user_info)
event
- evt the event "causing" the drag.int
- x_pos the x position this object should move to.int
- y_pos the y position this object should move to.int
- start_x the x location of the object at start of drag (in
parent's coordinates).int
- start_x the y location of the object at start of drag (in
parent's coordinates).int
- grab_x initial grab location within the object.int
- grab_y initial grab location within the object.Object
- user_info the information associated with this object when
it requested drag focus.protected void draw_self_local(drawable d)
Note, this drawing is done inside our bounds, but the drawing corresponding to each individual object found in the traversal starting from our parent is not limited to their bounds. This requires special processing in damage_self within our parent.
For this lens we draw in an areas smaller than our bounds and then then cover the corners of the lens with a ring image sized such that the inner diameter of the ring is the same as the width of the smaller drawing areas, while the outer diameter of the ring is big enough to completely cover the corner. This gives the illusion of a circular lens even though we can't draw one directly.
drawable
- d the drawing surface we draw on.semantic_draw_parent
,
sem_draw_context
,
sem_draw_continue
,
sem_draw_to_child
,
base_interactor#traverse_and_collect
public static loaded_image ring_image()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |