summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2008-06-07 16:08:48 -0400
committerSøren Sandmann <sandmann@redhat.com>2008-06-07 16:08:48 -0400
commit7f433ba31d6ec006fa4f7af81de3b6ac89c6355f (patch)
tree0d8ab5f399e335113c5d07756ecbcd741bb8527b
parent018e63eab8f52cc17b0ff57cd9c51ec9fc92eff0 (diff)
TODO
-rw-r--r--TODO159
-rw-r--r--deck.h13
-rw-r--r--oppress.glade84
3 files changed, 207 insertions, 49 deletions
diff --git a/TODO b/TODO
index ca89a1f..6235c09 100644
--- a/TODO
+++ b/TODO
@@ -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
diff --git a/deck.h b/deck.h
index f457f35..3d6b299 100644
--- a/deck.h
+++ b/deck.h
@@ -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>