Code

Move app-specific logic and file operations up from the lower level.
[inkscape.git] / src / dialogs / eek-preview.cpp
1 /** @file
2  * @brief EEK preview stuff
3  */
4 /* ***** BEGIN LICENSE BLOCK *****
5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * The Original Code is Eek Preview Stuffs.
18  *
19  * The Initial Developer of the Original Code is
20  * Jon A. Cruz.
21  * Portions created by the Initial Developer are Copyright (C) 2005
22  * the Initial Developer. All Rights Reserved.
23  *
24  * Contributor(s):
25  *
26  * Alternatively, the contents of this file may be used under the terms of
27  * either the GNU General Public License Version 2 or later (the "GPL"), or
28  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29  * in which case the provisions of the GPL or the LGPL are applicable instead
30  * of those above. If you wish to allow use of your version of this file only
31  * under the terms of either the GPL or the LGPL, and not to allow others to
32  * use your version of this file under the terms of the MPL, indicate your
33  * decision by deleting the provisions above and replace them with the notice
34  * and other provisions required by the GPL or the LGPL. If you do not delete
35  * the provisions above, a recipient may use your version of this file under
36  * the terms of any one of the MPL, the GPL or the LGPL.
37  *
38  * ***** END LICENSE BLOCK ***** */
39 #ifdef HAVE_CONFIG_H
40 # include "config.h"
41 #endif
43 #include <gtk/gtk.h>
44 #include "eek-preview.h"
46 #define PRIME_BUTTON_MAGIC_NUMBER 1
48 #define FOCUS_PROP_ID 1
50 /* Keep in sycn with last value in eek-preview.h */
51 #define PREVIEW_SIZE_LAST PREVIEW_SIZE_HUGE
52 #define PREVIEW_SIZE_NEXTFREE (PREVIEW_SIZE_HUGE + 1)
54 #define PREVIEW_MAX_RATIO 500
56 static void eek_preview_class_init( EekPreviewClass *klass );
57 static void eek_preview_init( EekPreview *preview );
59 static GtkWidgetClass* parent_class = 0;
61 void eek_preview_set_color( EekPreview* preview, int r, int g, int b )
62 {
63     preview->_r = r;
64     preview->_g = g;
65     preview->_b = b;
67     gtk_widget_queue_draw(GTK_WIDGET(preview));
68 }
71 void eek_preview_set_pixbuf( EekPreview* preview, GdkPixbuf* pixbuf )
72 {
73     preview->_previewPixbuf = pixbuf;
75     gtk_widget_queue_draw(GTK_WIDGET(preview));
76 }
79 GType eek_preview_get_type(void)
80 {
81     static GType preview_type = 0;
83     if (!preview_type) {
84       static const GTypeInfo preview_info = {
85           sizeof( EekPreviewClass ),
86           NULL, /* base_init */
87           NULL, /* base_finalize */
88           (GClassInitFunc)eek_preview_class_init,
89           NULL, /* class_finalize */
90           NULL, /* class_data */
91           sizeof( EekPreview ),
92           0,    /* n_preallocs */
93           (GInstanceInitFunc)eek_preview_init,
94           NULL /* value_table */
95       };
98       preview_type = g_type_register_static( GTK_TYPE_DRAWING_AREA, "EekPreview", &preview_info, (GTypeFlags)0 );
99     }
101     return preview_type;
104 static gboolean setupDone = FALSE;
105 static GtkRequisition sizeThings[PREVIEW_SIZE_NEXTFREE];
107 void eek_preview_set_size_mappings( guint count, GtkIconSize const* sizes )
109     gint width = 0;
110     gint height = 0;
111     gint smallest = 512;
112     gint largest = 0;
113     guint i = 0;
114     guint delta = 0;
116     for ( i = 0; i < count; ++i ) {
117         gboolean worked = gtk_icon_size_lookup( sizes[i], &width, &height );
118         if ( worked ) {
119             if ( width < smallest ) {
120                 smallest = width;
121             }
122             if ( width > largest ) {
123                 largest = width;
124             }
125         }
126     }
128     smallest = (smallest * 3) / 4;
130     delta = largest - smallest;
132     for ( i = 0; i < G_N_ELEMENTS(sizeThings); ++i ) {
133         guint val = smallest + ( (i * delta) / (G_N_ELEMENTS(sizeThings) - 1) );
134         sizeThings[i].width = val;
135         sizeThings[i].height = val;
136     }
138     setupDone = TRUE;
141 static void eek_preview_size_request( GtkWidget* widget, GtkRequisition* req )
143     gint width = 0;
144     gint height = 0;
145     EekPreview* preview = EEK_PREVIEW(widget);
147     if ( !setupDone ) {
148         GtkIconSize sizes[] = {
149             GTK_ICON_SIZE_MENU,
150             GTK_ICON_SIZE_SMALL_TOOLBAR,
151             GTK_ICON_SIZE_LARGE_TOOLBAR,
152             GTK_ICON_SIZE_BUTTON,
153             GTK_ICON_SIZE_DIALOG
154         };
155         eek_preview_set_size_mappings( G_N_ELEMENTS(sizes), sizes );
156     }
158     width = sizeThings[preview->_size].width;
159     height = sizeThings[preview->_size].height;
161     if ( preview->_view == VIEW_TYPE_LIST ) {
162         width *= 3;
163     }
165     if ( preview->_ratio != 100 ) {
166         width = (width * preview->_ratio) / 100;
167         if ( width < 0 ) {
168             width = 1;
169         }
170     }
172     req->width = width;
173     req->height = height;
176 enum {
177   CLICKED_SIGNAL,
178   ALTCLICKED_SIGNAL,
179   LAST_SIGNAL
180 };
183 static guint eek_preview_signals[LAST_SIGNAL] = { 0 };
186 gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* event )
188 /*     g_message("Exposed!!!   %s", GTK_WIDGET_HAS_FOCUS(widget) ? "XXX" : "---" ); */
189     gint insetX = 0;
190     gint insetY = 0;
192     (void)event;
193 /*
194     gint lower = widget->allocation.width;
195     lower = (widget->allocation.height < lower) ? widget->allocation.height : lower;
196     if ( lower > 16 ) {
197         insetX++;
198         if ( lower > 18 ) {
199             insetX++;
200             if ( lower > 22 ) {
201                 insetX++;
202                 if ( lower > 24 ) {
203                     insetX++;
204                     if ( lower > 32 ) {
205                         insetX++;
206                     }
207                 }
208             }
209         }
210         insetY = insetX;
211     }
212 */
214     if ( GTK_WIDGET_DRAWABLE( widget ) ) {
215         GtkStyle* style = gtk_widget_get_style( widget );
217         if ( insetX > 0 || insetY > 0 ) {
218             gtk_paint_flat_box( style,
219                                 widget->window,
220                                 (GtkStateType)GTK_WIDGET_STATE(widget),
221                                 GTK_SHADOW_NONE,
222                                 NULL,
223                                 widget,
224                                 NULL,
225                                 0, 0,
226                                 widget->allocation.width, widget->allocation.height);
227         }
229         GdkGC *gc = gdk_gc_new( widget->window );
230         EekPreview* preview = EEK_PREVIEW(widget);
231         GdkColor fg = {0, preview->_r, preview->_g, preview->_b};
233         gdk_colormap_alloc_color( gdk_colormap_get_system(), &fg, FALSE, TRUE );
235         gdk_gc_set_foreground( gc, &fg );
237         gdk_draw_rectangle( widget->window,
238                             gc,
239                             TRUE,
240                             insetX, insetY,
241                             widget->allocation.width - (insetX * 2), widget->allocation.height - (insetY * 2) );
243         if ( preview->_linked ) {
244             /* Draw arrow */
245             GdkRectangle possible = {insetX, insetY, (widget->allocation.width - (insetX * 2)), (widget->allocation.height - (insetY * 2)) };
246             GdkRectangle area = {possible.x, possible.y, possible.width / 2, possible.height / 2 };
248             /* Make it square */
249             if ( area.width > area.height )
250                 area.width = area.height;
251             if ( area.height > area.width )
252                 area.height = area.width;
254             /* Center it horizontally */
255             if ( area.width < possible.width ) {
256                 int diff = (possible.width - area.width) / 2;
257                 area.x += diff;
258             }
261             if ( preview->_linked & PREVIEW_LINK_IN ) {
262                 gtk_paint_arrow( style,
263                                  widget->window,
264                                  (GtkStateType)widget->state,
265                                  GTK_SHADOW_ETCHED_IN,
266                                  NULL, /* clip area.  &area, */
267                                  widget, /* may be NULL */
268                                  NULL, /* detail */
269                                  GTK_ARROW_DOWN,
270                                  FALSE,
271                                  area.x, area.y,
272                                  area.width, area.height
273                                  );
274             }
276             if ( preview->_linked & PREVIEW_LINK_OUT ) {
277                 GdkRectangle otherArea = {area.x, area.y, area.width, area.height};
278                 if ( otherArea.height < possible.height ) {
279                     otherArea.y = possible.y + (possible.height - otherArea.height);
280                 }
282                 gtk_paint_arrow( style,
283                                  widget->window,
284                                  (GtkStateType)widget->state,
285                                  GTK_SHADOW_ETCHED_OUT,
286                                  NULL, /* clip area.  &area, */
287                                  widget, /* may be NULL */
288                                  NULL, /* detail */
289                                  GTK_ARROW_UP,
290                                  FALSE,
291                                  otherArea.x, otherArea.y,
292                                  otherArea.width, otherArea.height
293                                  );
294             }
296             if ( preview->_linked & PREVIEW_LINK_OTHER ) {
297                 GdkRectangle otherArea = {insetX, area.y, area.width, area.height};
298                 if ( otherArea.height < possible.height ) {
299                     otherArea.y = possible.y + (possible.height - otherArea.height) / 2;
300                 }
302                 gtk_paint_arrow( style,
303                                  widget->window,
304                                  (GtkStateType)widget->state,
305                                  GTK_SHADOW_ETCHED_OUT,
306                                  NULL, /* clip area.  &area, */
307                                  widget, /* may be NULL */
308                                  NULL, /* detail */
309                                  GTK_ARROW_LEFT,
310                                  FALSE,
311                                  otherArea.x, otherArea.y,
312                                  otherArea.width, otherArea.height
313                                  );
314             }
315         }
317         if ( preview->_previewPixbuf ) {
318             GtkDrawingArea* da = &(preview->drawing);
319             GdkDrawable* drawable = (GdkDrawable*) (((GtkWidget*)da)->window);
320             gint w = 0;
321             gint h = 0;
322             gdk_drawable_get_size(drawable, &w, &h);
323             gdk_draw_pixbuf( drawable, 0, preview->_previewPixbuf, 0, 0, 0, 0, w, h, GDK_RGB_DITHER_NONE, 0, 0 );
324         }
327         if ( GTK_WIDGET_HAS_FOCUS(widget) ) {
328             gtk_paint_focus( style,
329                              widget->window,
330                              GTK_STATE_NORMAL,
331                              NULL, /* GdkRectangle *area, */
332                              widget,
333                              NULL,
334                              0 + 1, 0 + 1,
335                              widget->allocation.width - 2, widget->allocation.height - 2 );
336         }
337     }
340     return FALSE;
344 static gboolean eek_preview_enter_cb( GtkWidget* widget, GdkEventCrossing* event )
346     if ( gtk_get_event_widget( (GdkEvent*)event ) == widget ) {
347         EekPreview* preview = EEK_PREVIEW(widget);
348         preview->_within = TRUE;
349         gtk_widget_set_state( widget, preview->_hot ? GTK_STATE_ACTIVE : GTK_STATE_PRELIGHT );
350     }
351     return FALSE;
354 static gboolean eek_preview_leave_cb( GtkWidget* widget, GdkEventCrossing* event )
356     if ( gtk_get_event_widget( (GdkEvent*)event ) == widget ) {
357         EekPreview* preview = EEK_PREVIEW(widget);
358         preview->_within = FALSE;
359         gtk_widget_set_state( widget, GTK_STATE_NORMAL );
360     }
361     return FALSE;
364 /*
365 static gboolean eek_preview_focus_in_event( GtkWidget* widget, GdkEventFocus* event )
367     g_message("focus IN");
368     gboolean blip = parent_class->focus_in_event ? parent_class->focus_in_event(widget, event) : FALSE;
369     return blip;
372 static gboolean eek_preview_focus_out_event( GtkWidget* widget, GdkEventFocus* event )
374     g_message("focus OUT");
375     gboolean blip = parent_class->focus_out_event ? parent_class->focus_out_event(widget, event) : FALSE;
376     return blip;
378 */
380 static gboolean eek_preview_button_press_cb( GtkWidget* widget, GdkEventButton* event )
382     if ( gtk_get_event_widget( (GdkEvent*)event ) == widget ) {
383         EekPreview* preview = EEK_PREVIEW(widget);
385         if ( preview->_takesFocus && !GTK_WIDGET_HAS_FOCUS(widget) ) {
386             gtk_widget_grab_focus(widget);
387         }
389         if ( event->button == PRIME_BUTTON_MAGIC_NUMBER ) {
390             preview->_hot = TRUE;
391             if ( preview->_within ) {
392                 gtk_widget_set_state( widget, GTK_STATE_ACTIVE );
393             }
394         }
395     }
397     return FALSE;
400 static gboolean eek_preview_button_release_cb( GtkWidget* widget, GdkEventButton* event )
402     if ( gtk_get_event_widget( (GdkEvent*)event ) == widget ) {
403         EekPreview* preview = EEK_PREVIEW(widget);
404         preview->_hot = FALSE;
405         gtk_widget_set_state( widget, GTK_STATE_NORMAL );
406         if ( preview->_within && event->button == PRIME_BUTTON_MAGIC_NUMBER ) {
407             gboolean isAlt = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
409             if ( isAlt ) {
410                 g_signal_emit( widget, eek_preview_signals[ALTCLICKED_SIGNAL], 0, 2 );
411             } else {
412                 g_signal_emit( widget, eek_preview_signals[CLICKED_SIGNAL], 0 );
413             }
414         }
415     }
416     return FALSE;
419 gboolean eek_preview_key_press_event( GtkWidget* widget, GdkEventKey* event)
421     (void)widget;
422     (void)event;
423     g_message("TICK");
424     return FALSE;
427 gboolean eek_preview_key_release_event( GtkWidget* widget, GdkEventKey* event)
429     (void)widget;
430     (void)event;
431     g_message("tock");
432     return FALSE;
435 static void eek_preview_get_property( GObject *object,
436                                       guint property_id,
437                                       GValue *value,
438                                       GParamSpec *pspec)
440     GObjectClass* gobjClass = G_OBJECT_CLASS(parent_class);
441     switch ( property_id ) {
442         case FOCUS_PROP_ID:
443         {
444             EekPreview* preview = EEK_PREVIEW( object );
445             g_value_set_boolean( value, preview->_takesFocus );
446         }
447         break;
448         default:
449         {
450             if ( gobjClass->get_property ) {
451                 gobjClass->get_property( object, property_id, value, pspec );
452             }
453         }
454     }
457 static void eek_preview_set_property( GObject *object,
458                                       guint property_id,
459                                       const GValue *value,
460                                       GParamSpec *pspec)
462     GObjectClass* gobjClass = G_OBJECT_CLASS(parent_class);
463     switch ( property_id ) {
464         case FOCUS_PROP_ID:
465         {
466             EekPreview* preview = EEK_PREVIEW( object );
467             gboolean val = g_value_get_boolean( value );
468             if ( val != preview->_takesFocus ) {
469                 preview->_takesFocus = val;
470             }
471         }
472         break;
473         default:
474         {
475             if ( gobjClass->set_property ) {
476                 gobjClass->set_property( object, property_id, value, pspec );
477             }
478         }
479     }
483 static gboolean eek_preview_popup_menu( GtkWidget* widget )
485 /*     g_message("Do the popup!"); */
486     gboolean blip = parent_class->popup_menu ? parent_class->popup_menu(widget) : FALSE;
487     return blip;
491 static void eek_preview_class_init( EekPreviewClass *klass )
493     GObjectClass* gobjClass = G_OBJECT_CLASS(klass);
494     /*GtkObjectClass* objectClass = (GtkObjectClass*)klass;*/
495     GtkWidgetClass* widgetClass = (GtkWidgetClass*)klass;
497     gobjClass->set_property = eek_preview_set_property;
498     gobjClass->get_property = eek_preview_get_property;
500     /*objectClass->destroy = eek_preview_destroy;*/
502     parent_class = (GtkWidgetClass*)g_type_class_peek_parent( klass );
504     /*widgetClass->map = ;*/
505     /*widgetClass->unmap = ;*/
506     /*widgetClass->realize = ;*/
507     /*widgetClass->unrealize = ;*/
508     widgetClass->size_request = eek_preview_size_request;
509     /*widgetClass->size_allocate = ;*/
510     /*widgetClass->state_changed = ;*/
511     /*widgetClass->style_set = ;*/
512     /*widgetClass->grab_notify = ;*/
514     widgetClass->button_press_event = eek_preview_button_press_cb;
515     widgetClass->button_release_event = eek_preview_button_release_cb;
516     /*widgetClass->delete_event = ;*/
517     /*widgetClass->destroy_event = ;*/
518     widgetClass->expose_event = eek_preview_expose_event;
519 /*     widgetClass->key_press_event = eek_preview_key_press_event; */
520 /*     widgetClass->key_release_event = eek_preview_key_release_event; */
521     widgetClass->enter_notify_event = eek_preview_enter_cb;
522     widgetClass->leave_notify_event = eek_preview_leave_cb;
523     /*widgetClass->configure_event = ;*/
524     /*widgetClass->focus_in_event = eek_preview_focus_in_event;*/
525     /*widgetClass->focus_out_event = eek_preview_focus_out_event;*/
527     /* selection */
528     /*widgetClass->selection_get = ;*/
529     /*widgetClass->selection_received = ;*/
532     /* drag source: */
533     /*widgetClass->drag_begin = ;*/
534     /*widgetClass->drag_end = ;*/
535     /*widgetClass->drag_data_get = ;*/
536     /*widgetClass->drag_data_delete = ;*/
538     /* drag target: */
539     /*widgetClass->drag_leave = ;*/
540     /*widgetClass->drag_motion = ;*/
541     /*widgetClass->drag_drop = ;*/
542     /*widgetClass->drag_data_received = ;*/
544     /* For keybindings: */
545     widgetClass->popup_menu = eek_preview_popup_menu;
546     /*widgetClass->show_help = ;*/
548     /* Accessibility support: */
549     /*widgetClass->get_accessible = ;*/
550     /*widgetClass->screen_changed = ;*/
551     /*widgetClass->can_activate_accel = ;*/
554     eek_preview_signals[CLICKED_SIGNAL] =
555         g_signal_new( "clicked",
556                       G_TYPE_FROM_CLASS( klass ),
557                       (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
558                       G_STRUCT_OFFSET( EekPreviewClass, clicked ),
559                       NULL, NULL,
560                       g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 );
562     eek_preview_signals[ALTCLICKED_SIGNAL] =
563         g_signal_new( "alt-clicked",
564                       G_TYPE_FROM_CLASS( klass ),
565                       (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
566                       G_STRUCT_OFFSET( EekPreviewClass, clicked ),
567                       NULL, NULL,
568                       g_cclosure_marshal_VOID__INT, G_TYPE_NONE,
569                       1, G_TYPE_INT );
572     g_object_class_install_property( gobjClass,
573                                      FOCUS_PROP_ID,
574                                      g_param_spec_boolean(
575                                          "focus-on-click",
576                                          NULL,
577                                          "flag to grab focus when clicked",
578                                          TRUE,
579                                          (GParamFlags)(G_PARAM_READWRITE | G_PARAM_CONSTRUCT)
580                                          )
581         );
584 void eek_preview_set_linked( EekPreview* splat, LinkType link )
586     link = (LinkType)(link & PREVIEW_LINK_ALL);
587     if ( link != (LinkType)splat->_linked ) {
588         splat->_linked = link;
590         gtk_widget_queue_draw( GTK_WIDGET(splat) );
591     }
594 LinkType eek_preview_get_linked( EekPreview* splat )
596     return (LinkType)splat->_linked;
599 gboolean eek_preview_get_focus_on_click( EekPreview* preview )
601     return preview->_takesFocus;
604 void eek_preview_set_focus_on_click( EekPreview* preview, gboolean focus_on_click )
606     if ( focus_on_click != preview->_takesFocus ) {
607         preview->_takesFocus = focus_on_click;
608     }
611 void eek_preview_set_details( EekPreview* preview, PreviewStyle prevstyle, ViewType view, PreviewSize size, guint ratio )
613     preview->_prevstyle = prevstyle;
614     preview->_view = view;
616     if ( size > PREVIEW_SIZE_LAST ) {
617         size = PREVIEW_SIZE_LAST;
618     }
619     preview->_size = size;
621     if ( ratio > PREVIEW_MAX_RATIO ) {
622         ratio = PREVIEW_MAX_RATIO;
623     }
624     preview->_ratio = ratio;
626     gtk_widget_queue_draw(GTK_WIDGET(preview));
629 static void eek_preview_init( EekPreview *preview )
631     GtkWidget* widg = GTK_WIDGET(preview);
632     GTK_WIDGET_SET_FLAGS( widg, GTK_CAN_FOCUS );
633     GTK_WIDGET_SET_FLAGS( widg, GTK_RECEIVES_DEFAULT );
635     gtk_widget_set_sensitive( widg, TRUE );
637     gtk_widget_add_events(widg, GDK_BUTTON_PRESS_MASK
638                           | GDK_BUTTON_RELEASE_MASK
639                           | GDK_KEY_PRESS_MASK
640                           | GDK_KEY_RELEASE_MASK
641                           | GDK_FOCUS_CHANGE_MASK
642                           | GDK_ENTER_NOTIFY_MASK
643                           | GDK_LEAVE_NOTIFY_MASK );
645 /*    gtk_widget_add_events( widg, GDK_ALL_EVENTS_MASK );*/
647     preview->_r = 0x80;
648     preview->_g = 0x80;
649     preview->_b = 0xcc;
651     preview->_hot = FALSE;
652     preview->_within = FALSE;
653     preview->_takesFocus = FALSE;
655     preview->_prevstyle = PREVIEW_STYLE_ICON;
656     preview->_view = VIEW_TYPE_LIST;
657     preview->_size = PREVIEW_SIZE_SMALL;
658     preview->_ratio = 100;
660     preview->_previewPixbuf = 0;
662 /*
663     GdkColor color = {0};
664     color.red = (255 << 8) | 255;
666     GdkColor whack = {0};
667     whack.green = (255 << 8) | 255;
669     gtk_widget_modify_bg( widg, GTK_STATE_NORMAL, &color );
670     gtk_widget_modify_bg( widg, GTK_STATE_PRELIGHT, &whack );
671 */
673 /*   GTK_STATE_ACTIVE, */
674 /*   GTK_STATE_PRELIGHT, */
675 /*   GTK_STATE_SELECTED, */
676 /*   GTK_STATE_INSENSITIVE */
678     if ( 0 ) {
679         GdkColor color = {0,0,0,0};
681         color.red = 0xffff;
682         color.green = 0;
683         color.blue = 0xffff;
684         gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
685         gtk_widget_modify_bg(widg, GTK_STATE_ACTIVE, &color);
687         color.red = 0;
688         color.green = 0xffff;
689         color.blue = 0;
690         gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
691         gtk_widget_modify_bg(widg, GTK_STATE_SELECTED, &color);
693         color.red = 0xffff;
694         color.green = 0;
695         color.blue = 0;
696         gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
697         gtk_widget_modify_bg( widg, GTK_STATE_PRELIGHT, &color );
698     }
702 GtkWidget* eek_preview_new(void)
704     return GTK_WIDGET( g_object_new( EEK_PREVIEW_TYPE, NULL ) );
707 /*
708   Local Variables:
709   mode:c++
710   c-file-style:"stroustrup"
711   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
712   indent-tabs-mode:nil
713   fill-column:99
714   End:
715 */
716 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :