diff options
author | Søren Sandmann <sandmann@redhat.com> | 2008-06-07 16:08:48 -0400 |
---|---|---|
committer | Søren Sandmann <sandmann@redhat.com> | 2008-06-07 16:08:48 -0400 |
commit | 7f433ba31d6ec006fa4f7af81de3b6ac89c6355f (patch) | |
tree | 0d8ab5f399e335113c5d07756ecbcd741bb8527b | |
parent | 018e63eab8f52cc17b0ff57cd9c51ec9fc92eff0 (diff) |
TODO
-rw-r--r-- | TODO | 159 | ||||
-rw-r--r-- | deck.h | 13 | ||||
-rw-r--r-- | oppress.glade | 84 |
3 files changed, 207 insertions, 49 deletions
@@ -10,10 +10,9 @@ - Object Types - Text - Circles/ellipses - - Arrows + - Arrows/Lines (or possibly distinct) - Rectangles - Polygons - - Lines - Curves - Groups - Images @@ -36,6 +35,8 @@ "Animate Onto Next Slide"? - Creates the copy on the next slide - If there is no next slide, then it creates one. + "Create Animation target" + "Duplicate slide with animations" - Templates - Is this more than 'mirror on all slides'? @@ -55,11 +56,59 @@ display the distance in pixels - or maybe it should display that all the time? + - Lines and curves should auto-connect to circles and boxes, + at first only to the drag points, but later to all of the + stroke. + + - Curves should probably be automatically fitted to data points + rather than making the user edit bezier control points. + + See + + An Algorithm for Automatically Fitting Digitized Curves + + from graphics gems. Google Scholar knows about a pdf, but the + site is down. The autogenerated HTML is difficult to read. + +- UI + - Objects can be selected by clicking on them. If more than one + selection mode is available, you can iterate through them by + clicking again. + - Unfortunately, this probably won't work for text, where we + need more than one selection mode: + - select for resize (6 dots) + - select for rotate (6 arrows) (Need this?) + - select for move (note: drag is + also selecting). + - Editing the text could be seen as editing one property + of the text, so double click to edit could be + interesting. + + - Otherwise, there is a + + - toolbar should be on the left, and in maximized windows should + stick to the edge. + + - A drawback of all this drag and drop is that it makes it + more difficult to use on a laptops with a crappy pointing + device. + + And making the slides on a laptop in a hotel room the night + before is probably very common. + + - Image cropping. + + When an image is selected, a special selection mode + available by clicking again. allows you to drag a crop + rectangle around. A scissor is displayed next to it. + - Staffage - Things that will not be visible in the final show will be shown in the same color, probably blue, maybe dashed. Post-it notes will have a light blue, translucent background, with a - dark blue border. + dark blue border. Or yellow, like tooltips? + (There might be a reasonable distinction between temporary + helper objects created by the app, and user created tings). - Implementation - Objects must be able to @@ -88,8 +137,112 @@ - A Deck contains slides, which contain objects + A deck can display itself at various size. It can tell its + size given a width. It will call back when slides are + added or removed, or when things like the page size + changes. + + - When drawing an object, clip to the slide it belongs to. + Staffage is not clipped + + - Raise/Lower of objects should follow this algorithm (lowering) + + (a) find all objects that are intersecting the object + to be lowered + (b) Of these, find the topmost one. + (c) If one is found, lower the current item below it. + + - When forming a group, the objects within it retain their + relative stacking order, but the new group item gets the + position of the topmost of the constituent items. + + - Property box + + - One box to list all properties of an object? + + Impress has an impressive array of stuff: + + - fill (linear/radial/solid) + - gradient editor (or can we put that in the canvas?) + - stroke + - all the same possibly? + - arrows for lines (but they don't need fill) + - Shadow + - Gradient editor + - Hatching + - Only useful for presentations about x11perf + + There is no way I'm adding all that. + + - Can we drag and drop colors and bitmaps, + like in nautilus? + + - Many of the properties can actually be done by + adding a rectangle below it. With good snapping, this + may be sufficient. + + - Can we take a group of items and drag it to the + toolbar to make a template out of it? + + - An easter egg, but potentially very, very powerful. + + - Could be added to the menu as well to make it easier + to find. + + - The simple combination of boxes and text may be a + special case that interesting enough to be on by + default + + - Or just adopt the ooffice convention of + adding/edit text by double clicking. + + - Maybe the edge of a rectangle could be edited by + clicking on it? That would possibly cut down on the + number of widgets in the property window. + + - Objects can be cutted/copied/pasted of course - the + serialization may simply be the sfile serialization (so sfile + must grow the ability to serialize/read from memory, which it + probably should have anyway). + + This means the natural way to do the object creation is to + just have a prototype object that can be copied as + necessary. The properties of that object is then the + defaults. + + (An interesting thing here is that such serializations could + be used desktop-wide if someone decides to actually write a + worthwhile desktop some day). Ie., cut and paste of complex + items, built from rectangles/circles/text etc. + - Bugs - Infinite recursion - see fixme in "on_changed" - Undo? - Update files in-place? + + - Undo manager. Whenever something changes about an + item, an undo object is created and registered with + an undo manager. + + An undo object contains a description, a callback and + sufficient information to undo the operation - including a + callback. + + undo_manager_add_undo (manager, + const char *description, + callback, + data) + + When the callback is called, it generates another undo object, + and adds it to the redo stack: + + undo_manager_add_redo (manager, desc, callback, data); + + The redo function will then add an undo object again. + + When something is added to the undo stack, the redo stack + disappears. (Except if the redo function is adding the + undo). + +
\ No newline at end of file @@ -1,7 +1,12 @@ +#include "scrollarea.h" + typedef struct Deck Deck; typedef struct Slide Slide; -Deck * deck_new (void); -int deck_get_n_slides (Deck *deck); -Slide *deck_get_nth_slide (Deck *deck, - int n); +Deck *deck_new (void); +int deck_get_height (Deck *deck, + int width); +void deck_paint (Deck *deck, + FooScrollArea *area, + cairo_t *cr, + int width); diff --git a/oppress.glade b/oppress.glade index 5f460aa..274d4cf 100644 --- a/oppress.glade +++ b/oppress.glade @@ -193,46 +193,6 @@ <property name="spacing">0</property> <child> - <widget class="GtkScrolledWindow" id="thumbnails_scrolled_window"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="main_area_scrolled_window"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> <widget class="GtkAlignment" id="alignment1"> <property name="visible">True</property> <property name="xalign">0.5</property> @@ -241,8 +201,8 @@ <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> + <property name="left_padding">0</property> + <property name="right_padding">6</property> <child> <widget class="GtkToolbar" id="toolbar1"> @@ -457,6 +417,46 @@ <property name="fill">False</property> </packing> </child> + + <child> + <widget class="GtkScrolledWindow" id="main_area_scrolled_window"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="thumbnails_scrolled_window"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> |