summaryrefslogtreecommitdiffstats
path: root/src/dialogs/iconpreview.cpp
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2009-02-21 01:59:56 +0000
committertweenk <tweenk@users.sourceforge.net>2009-02-21 01:59:56 +0000
commit154165799998cb2cb7491bbd97b0511943a0228e (patch)
tree878507e5e42b4651f1bb0805a42c0837528eb314 /src/dialogs/iconpreview.cpp
parentOnly build static libraries for subdirs than actually contain libraries, (diff)
downloadinkscape-154165799998cb2cb7491bbd97b0511943a0228e.tar.gz
inkscape-154165799998cb2cb7491bbd97b0511943a0228e.zip
Move files from the src/dialogs/ directory to the places where they
should be. Build libinkscape.a - should reduce link time. (bzr r7337)
Diffstat (limited to 'src/dialogs/iconpreview.cpp')
-rw-r--r--src/dialogs/iconpreview.cpp309
1 files changed, 0 insertions, 309 deletions
diff --git a/src/dialogs/iconpreview.cpp b/src/dialogs/iconpreview.cpp
deleted file mode 100644
index 4d402d235..000000000
--- a/src/dialogs/iconpreview.cpp
+++ /dev/null
@@ -1,309 +0,0 @@
-/** @file
- * @brief A simple dialog for previewing icon representation.
- */
-/* Authors:
- * Jon A. Cruz
- * Bob Jamison
- * Other dudes from The Inkscape Organization
- *
- * Copyright (C) 2004 Bob Jamison
- * Copyright (C) 2005 Jon A. Cruz
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "iconpreview.h"
-
-#include <gtk/gtk.h>
-
-#include <glib/gmem.h>
-#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
-#include <glibmm/i18n.h>
-#include <gtkmm/buttonbox.h>
-#include <gtkmm/stock.h>
-
-#include "preferences.h"
-#include "inkscape.h"
-#include "document.h"
-#include "desktop-handles.h"
-#include "selection.h"
-#include "desktop.h"
-#include "display/nr-arena.h"
-#include "sp-root.h"
-#include "xml/repr.h"
-
-extern "C" {
-// takes doc, root, icon, and icon name to produce pixels
-guchar *
-sp_icon_doc_icon( SPDocument *doc, NRArenaItem *root,
- const gchar *name, unsigned int psize );
-}
-
-namespace Inkscape {
-namespace UI {
-namespace Dialogs {
-
-
-IconPreviewPanel&
-IconPreviewPanel::getInstance()
-{
- static IconPreviewPanel &instance = *new IconPreviewPanel();
-
- instance.refreshPreview();
-
- return instance;
-}
-
-//#########################################################################
-//## E V E N T S
-//#########################################################################
-
-void IconPreviewPanel::on_button_clicked(int which)
-{
- if ( hot != which ) {
- buttons[hot]->set_active( false );
-
- hot = which;
- updateMagnify();
- _getContents()->queue_draw();
- }
-}
-
-
-
-
-//#########################################################################
-//## C O N S T R U C T O R / D E S T R U C T O R
-//#########################################################################
-/**
- * Constructor
- */
-IconPreviewPanel::IconPreviewPanel() :
- UI::Widget::Panel("", "/dialogs/iconpreview", SP_VERB_VIEW_ICON_PREVIEW),
- hot(1),
- refreshButton(0),
- selectionButton(0)
-{
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- numEntries = 0;
-
- std::vector<Glib::ustring> pref_sizes = prefs->getAllDirs("/iconpreview/sizes/default");
- std::vector<int> rawSizes;
-
- for (std::vector<Glib::ustring>::iterator i = pref_sizes.begin(); i != pref_sizes.end(); ++i) {
- if (prefs->getBool(*i + "/show", true)) {
- int sizeVal = prefs->getInt(*i + "/value", -1);
- if (sizeVal > 0) {
- rawSizes.push_back(sizeVal);
- }
- }
- }
-
- if ( !rawSizes.empty() ) {
- numEntries = rawSizes.size();
- sizes = new int[numEntries];
- int i = 0;
- for ( std::vector<int>::iterator it = rawSizes.begin(); it != rawSizes.end(); ++it, ++i ) {
- sizes[i] = *it;
- }
- }
-
- if ( numEntries < 1 )
- {
- numEntries = 5;
- sizes = new int[numEntries];
- sizes[0] = 16;
- sizes[1] = 24;
- sizes[2] = 32;
- sizes[3] = 48;
- sizes[4] = 128;
- }
-
- pixMem = new guchar*[numEntries];
- images = new Gtk::Image*[numEntries];
- labels = new Glib::ustring*[numEntries];
- buttons = new Gtk::ToggleToolButton*[numEntries];
-
-
- for ( int i = 0; i < numEntries; i++ ) {
- char *label = g_strdup_printf(_("%d x %d"), sizes[i], sizes[i]);
- labels[i] = new Glib::ustring(label);
- g_free(label);
- pixMem[i] = 0;
- images[i] = 0;
- }
-
-
- magLabel.set_label( *labels[hot] );
-
- Gtk::VBox* magBox = new Gtk::VBox();
-
- magBox->pack_start( magnified );
- magBox->pack_start( magLabel, Gtk::PACK_SHRINK );
-
-
- Gtk::VBox * verts = new Gtk::VBox();
- for ( int i = 0; i < numEntries; i++ ) {
- pixMem[i] = new guchar[4 * sizes[i] * sizes[i]];
- memset( pixMem[i], 0x00, 4 * sizes[i] * sizes[i] );
-
- GdkPixbuf *pb = gdk_pixbuf_new_from_data( pixMem[i], GDK_COLORSPACE_RGB, TRUE, 8, sizes[i], sizes[i], sizes[i] * 4, /*(GdkPixbufDestroyNotify)g_free*/NULL, NULL );
- GtkImage* img = GTK_IMAGE( gtk_image_new_from_pixbuf( pb ) );
- images[i] = Glib::wrap(img);
- Glib::ustring label(*labels[i]);
- buttons[i] = new Gtk::ToggleToolButton(label);
- buttons[i]->set_active( i == hot );
- buttons[i]->set_icon_widget(*images[i]);
-
- tips.set_tip((*buttons[i]), label);
-
- buttons[i]->signal_clicked().connect( sigc::bind<int>( sigc::mem_fun(*this, &IconPreviewPanel::on_button_clicked), i) );
-
-
- verts->add(*buttons[i]);
- }
-
- iconBox.pack_start(splitter);
- splitter.pack1( *magBox, true, true );
- splitter.pack2( *verts, false, false );
-
-
- //## The Refresh button
-
-
- Gtk::HButtonBox* holder = new Gtk::HButtonBox( Gtk::BUTTONBOX_END );
- _getContents()->pack_end(*holder, false, false);
-
- selectionButton = new Gtk::ToggleButton(_("Selection")); // , GTK_RESPONSE_APPLY
- holder->pack_start( *selectionButton, false, false );
- tips.set_tip((*selectionButton), _("Selection only or whole document"));
- selectionButton->signal_clicked().connect( sigc::mem_fun(*this, &IconPreviewPanel::modeToggled) );
-
- gint val = prefs->getBool("/iconpreview/selectionOnly");
- selectionButton->set_active( val != 0 );
-
- refreshButton = new Gtk::Button(Gtk::Stock::REFRESH); // , GTK_RESPONSE_APPLY
- holder->pack_end( *refreshButton, false, false );
- tips.set_tip((*refreshButton), _("Refresh the icons"));
- refreshButton->signal_clicked().connect( sigc::mem_fun(*this, &IconPreviewPanel::refreshPreview) );
-
-
- _getContents()->pack_start(iconBox, Gtk::PACK_EXPAND_WIDGET);
-
- show_all_children();
-}
-
-//#########################################################################
-//## M E T H O D S
-//#########################################################################
-
-
-void IconPreviewPanel::refreshPreview()
-{
- SPDesktop *desktop = getDesktop();
- if ( desktop ) {
-
- if ( selectionButton && selectionButton->get_active() )
- {
- Inkscape::Selection * sel = sp_desktop_selection(desktop);
- if ( sel ) {
- //g_message("found a selection to play with");
-
- GSList const *items = sel->itemList();
- SPObject *target = 0;
- while ( items && !target ) {
- SPItem* item = SP_ITEM( items->data );
- SPObject * obj = SP_OBJECT(item);
- gchar const *id = SP_OBJECT_ID( obj );
- if ( id ) {
- target = obj;
- }
-
- items = g_slist_next(items);
- }
- if ( target ) {
- renderPreview(target);
- }
- }
- }
- else
- {
- SPObject *target = desktop->currentRoot();
- if ( target ) {
- renderPreview(target);
- }
- }
- }
-}
-
-void IconPreviewPanel::modeToggled()
-{
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("/iconpreview/selectionOnly", (selectionButton && selectionButton->get_active()));
-
- refreshPreview();
-}
-
-void IconPreviewPanel::renderPreview( SPObject* obj )
-{
- SPDocument * doc = SP_OBJECT_DOCUMENT(obj);
- gchar * id = SP_OBJECT_ID(obj);
-
-// g_message(" setting up to render '%s' as the icon", id );
-
- NRArenaItem *root = NULL;
-
- /* Create new arena */
- NRArena *arena = NRArena::create();
-
- /* Create ArenaItem and set transform */
- unsigned int visionkey = sp_item_display_key_new(1);
-
- root = sp_item_invoke_show ( SP_ITEM( SP_DOCUMENT_ROOT(doc) ),
- arena, visionkey, SP_ITEM_SHOW_DISPLAY );
-
- for ( int i = 0; i < numEntries; i++ ) {
- guchar * px = sp_icon_doc_icon( doc, root, id, sizes[i] );
-// g_message( " size %d %s", sizes[i], (px ? "worked" : "failed") );
- if ( px ) {
- memcpy( pixMem[i], px, sizes[i] * sizes[i] * 4 );
- g_free( px );
- px = 0;
- } else {
- memset( pixMem[i], 0, sizes[i] * sizes[i] * 4 );
- }
- images[i]->queue_draw();
- }
- updateMagnify();
-
- sp_item_invoke_hide(SP_ITEM(sp_document_root(doc)), visionkey);
- nr_object_unref((NRObject *) arena);
-}
-
-void IconPreviewPanel::updateMagnify()
-{
- Glib::RefPtr<Gdk::Pixbuf> buf = images[hot]->get_pixbuf()->scale_simple( 128, 128, Gdk::INTERP_NEAREST );
- magLabel.set_label( *labels[hot] );
- magnified.set( buf );
- magnified.queue_draw();
- magnified.get_parent()->queue_draw();
-}
-
-
-} //namespace Dialogs
-} //namespace UI
-} //namespace Inkscape
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :