1 / 14

User Interface Programming in C#: Direct Manipulation

User Interface Programming in C#: Direct Manipulation. Chris North CS 3724: HCI. GUI Topics. Components GUI layouts Events Graphics Manipulation Animation Databases MVC. Review. 3 kinds of elements in a component’s API? How to receive Events? GUI Layout techniques?

issac
Download Presentation

User Interface Programming in C#: Direct Manipulation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. User Interface Programming in C#: Direct Manipulation Chris North CS 3724: HCI

  2. GUI Topics • Components • GUI layouts • Events • Graphics • Manipulation • Animation • Databases • MVC

  3. Review • 3 kinds of elements in a component’s API? • How to receive Events? • GUI Layout techniques? • When to paint the graphics? • How to paint the graphics?

  4. Direct Manipulation • Definition: (Shneiderman) • Visual objects • Selection by pointing • Rapid, incremental, reversible actions • Immediate, continuous feedback • Typical interaction sequence: • 1. select item(s) by point-n-click … (hit testing) • 2. act on item(s) by drag … (dynamic update)

  5. 1. Hit Testing • Mouse click, mouse over • Which dot did user click on? • Using components: • Make each dot a simple component, like a Button • Hit testing automatic, each component is a subwindow • Receive events from components, check event source • rectangular items, not scalable, inherit from UserControl • Using custom graphics: • Get click (x,y) from MouseDown event • Iterate through data structure, test for hit • E.g: if rect.contains(x,y) • Data structure for fast lookup?

  6. 2. Dynamic Updating • Dragging, stretching, … • MouseMove events • Using components: • mouseDown store x,y click in component • mouseMove • Calculate x,y delta • Move component by delta • Using graphics: • (need to erase it, repaint other graphics, repaint new item) • Calculate delta, calculate new item location, store • Call Refresh( ) • Draw new graphics in Paint event

  7. Problem • Dynamic manipulation on top of other graphics • Need to preserve (redraw) other graphics • Examples: MacDraw, powerpoint • Simple solution: • Call refresh( ) or invalidate( ) while dragging • Paint( ) event restores other graphics • But: if lots of graphics, too slow & flashing!

  8. Problem: Flashing • Ugly flashing when repaint: • Paint background • Redraw shapes

  9. Solution: Double buffering

  10. Solution: Double buffering • Double buffered repaint: • Draw all graphics in temporary off-screen image • Paint background color • Paint shapes • Then paint image to Window • Bonus: C# can do this for you! • SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); • control maintains off-screen image

  11. More Solutions: Speed • Minimize repaint rectangle: • this.Invalidate(rect), where rect is area of manipulation • In Paint( ) event, process only graphics within e.ClipRect • Modified double buffering: • maintain buffer image for background graphics • Paint image to screen, then paint manip graphics • XOR painting

  12. Rubber Band (XOR painting) • Want multi-selection by stretching a rubber band • Draw rubber band by inverting pixel colors • drawing with XOR once inverts background colors • drawing with XOR twice returns to original look • No need to refresh( ), fast! // in mouseMove event: // erase previous rect: ControlPaint.DrawReversibleFrame(rect, Color.Black, FrameStyle.Dashed); // <update rect here based on mouse x,y> // draw new rect: ControlPaint.DrawReversibleFrame(rect, Color.Black, FrameStyle.Dashed);

  13. Drag-n-Drop • Drag and Drop API for GUI controls • Supports data transfer DestControl.AllowDrop = True; SourceControl_MouseEvent: this.DoDragDrop(data, DragDropEffects.Copy); DestControl_DragOver(e): e.Effect = DragDropEffects.Copy; DestControl_DragDrop(e): do something with e.Data.GetData(typeof(String));

  14. Software Architecture so far… Program State -data structures Paint event-display data Interaction events -modify data

More Related