[drgeo/goffice: 71/82] add gnome print drawable files. add printing. new drawable based on gnome



commit 4fc62252c89d73ccda609149e9e0e6230ef37eee
Author: Jean Brefort <jean brefort normalesup org>
Date:   Mon Feb 6 14:01:06 2006 +0000

    add gnome print drawable files. add printing. new drawable based on gnome
    
    2006-02-06  Jean Brefort  <jean brefort normalesup org>
    
    	* goffice/Makefile.am: add gnome print drawable files.
    	* goffice/drgeo.cc: add printing.
    	* goffice/drgeo_gpdrawable.cc: new drawable based on gnome print.
    	* goffice/drgeo_gpdrawable.h: ditto.

 ChangeLog                   |    7 ++
 goffice/Makefile.am         |    4 +-
 goffice/drgeo.cc            |    6 +
 goffice/drgeo_gpdrawable.cc |  221 +++++++++++++++++++++++++++++++++++++++++++
 goffice/drgeo_gpdrawable.h  |   63 ++++++++++++
 5 files changed, 300 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 845cb27..21150e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,13 @@
 
 	* configure.ac: Add "zh_HK" to ALL_LINGUAS.
 
+2006-02-06  Jean Brefort  <jean brefort normalesup org>
+
+	* goffice/Makefile.am: add gnome print drawable files.
+	* goffice/drgeo.cc: add printing.
+	* goffice/drgeo_gpdrawable.cc: new drawable based on gnome print.
+	* goffice/drgeo_gpdrawable.h: ditto.
+
 2006-02-05  Jean Brefort  <jean brefort normalesup org>
 
 	* geo/drgeo_figure.cc: add getBounds method.
diff --git a/goffice/Makefile.am b/goffice/Makefile.am
index 733c43e..811f7f2 100644
--- a/goffice/Makefile.am
+++ b/goffice/Makefile.am
@@ -23,7 +23,9 @@ drgeo_la_SOURCES =	\
 		goffice_mdi.cc	\
 		goffice_mdi.h	\
 		drgeo_cairodrawable.cc	\
-		drgeo_cairodrawable.h
+		drgeo_cairodrawable.h	\
+		drgeo_gpdrawable.cc	\
+		drgeo_gpdrawable.h
 
 xml_in_files = plugin.xml.in
 xmldir	 = $(goffice_drgeodir)
diff --git a/goffice/drgeo.cc b/goffice/drgeo.cc
index d96e0ed..4cc95ab 100644
--- a/goffice/drgeo.cc
+++ b/goffice/drgeo.cc
@@ -27,6 +27,7 @@
 #include <geo/drgeo_figure.h>
 #include "goffice_mdi.h"
 #include "drgeo_cairodrawable.h"
+#include "drgeo_gpdrawable.h"
 
 #include <libxml/tree.h>
 #ifdef _
@@ -128,6 +129,11 @@ go_drgeo_component_print (GOComponent *component, GnomePrintContext *gpc,
 												double width, double height)
 {
 	GODrGeoComponent *godrgeo = GO_DRGEO_COMPONENT (component);
+	drgeoGPDrawable *drawable = new drgeoGPDrawable (godrgeo->figure, gpc);
+	drawable->scale = width / godrgeo->width;
+	drawable->setOffset (godrgeo->xoffset, godrgeo->yoffset - godrgeo->height);
+	godrgeo->figure->redraw (0);
+	delete drawable;
 }
 
 
diff --git a/goffice/drgeo_gpdrawable.cc b/goffice/drgeo_gpdrawable.cc
new file mode 100644
index 0000000..c643182
--- /dev/null
+++ b/goffice/drgeo_gpdrawable.cc
@@ -0,0 +1,221 @@
+/* 
+ * DrGeo GOffice component
+ * drgeo_gnome_printdrawable.cc
+ *
+ * Copyright (C) 2006
+ *
+ * Developed by Jean Bréfort <jean brefort normalesup org>
+ *
+ * This program is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU General Public License as 
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+ 
+#include <config.h>
+#include "drgeo_gpdrawable.h"
+#include <geo/couleur.h>
+
+drgeoGPDrawable::drgeoGPDrawable (drgeoFigure * figure, GnomePrintContext *pc)
+{
+	setFigure (figure);
+	m_pc = pc;
+	gnome_print_gsave (m_pc);
+	figure->setDrawable (this);
+}
+
+drgeoGPDrawable::~drgeoGPDrawable ()
+{
+	gnome_print_grestore (m_pc);
+}
+
+void drgeoGPDrawable::drawPoint (drgeoStyle & style, drgeoPoint & point)
+{
+	if (style.mask == yes)
+		return;
+
+	double x = point.getX (), y = point.getY (), radius;
+
+	switch (style.thick)
+	{
+	case drgeoThicknessDashed:
+		radius = .05;
+	break;
+	case drgeoThicknessNormal:
+		radius = .075;
+	break;
+	case drgeoThicknessLarge:
+		radius = .1;
+	break;
+	}
+
+	setColor (style.color);
+
+	switch (style.pointShape)
+	{
+	case drgeoPointRound:
+		break;
+	case drgeoPointX:
+		gnome_print_setlinewidth (m_pc, .05);
+		gnome_print_setdash (m_pc, 0, NULL, 0.);
+		gnome_print_setlinecap (m_pc, 1);
+		gnome_print_setlinejoin (m_pc, 1);
+	
+		gnome_print_newpath (m_pc);
+		gnome_print_moveto (m_pc,	x - radius, y - radius);
+		gnome_print_lineto (m_pc,	x + radius, y + radius);
+		gnome_print_stroke (m_pc);
+		gnome_print_newpath (m_pc);
+		gnome_print_moveto (m_pc,	x - radius, y + radius);
+		gnome_print_lineto (m_pc,	x + radius, y - radius);
+		gnome_print_stroke (m_pc);
+		break;
+	case drgeoPointRec:
+		break;
+	case drgeoPointRoundEmpty:
+		break;
+	case drgeoPointRecEmpty:
+		break;
+	}
+}
+
+void drgeoGPDrawable::drawPolygon (drgeoStyle & style, drgeoPoint * point, gint number)
+{
+}
+
+void drgeoGPDrawable::drawLine (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end)
+{
+}
+
+void drgeoGPDrawable::drawHalfLine (drgeoStyle & style, drgeoPoint & start,
+		 drgeoVector & vect)
+{
+}
+
+void drgeoGPDrawable::drawSegment (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end)
+{
+	if (style.mask == yes)
+		return;
+
+	setColor (style.color);
+
+	switch (style.thick)
+	{
+	case drgeoThicknessDashed:
+		break;
+	case drgeoThicknessNormal:
+		gnome_print_setlinewidth (m_pc, .025);
+		gnome_print_setdash (m_pc, 0, NULL, 0.);
+		gnome_print_setlinecap (m_pc, 1);
+		gnome_print_setlinejoin (m_pc, 1);
+		break;
+	case drgeoThicknessLarge:
+		break;
+	}
+
+	// Draw the line.
+	gnome_print_newpath (m_pc);
+	gnome_print_moveto (m_pc,	start.getX (), start.getY ());
+	gnome_print_lineto (m_pc,	end.getX (), end.getY ());
+	gnome_print_stroke (m_pc);
+}
+
+void drgeoGPDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center, double radius)
+{
+}
+
+void drgeoGPDrawable::drawCircle (drgeoStyle & style, drgeoPoint & center,
+	   drgeoPoint & point)
+{
+}
+
+void drgeoGPDrawable::drawArc (drgeoStyle & style, drgeoPoint & center, double radius,
+	double start, double length)
+{
+}
+
+void drgeoGPDrawable::drawText (drgeoPoint & where, char *text, drgeoColorType fontColor)
+{
+}
+
+double drgeoGPDrawable::stringWidth (char *text)
+{
+}
+
+double drgeoGPDrawable::stringHeight (char *text)
+{
+}
+
+drgeoPoint drgeoGPDrawable::getAreaCenter ()
+{
+}
+
+drgeoPoint drgeoGPDrawable::getAreaSize ()
+{
+}
+
+void drgeoGPDrawable::setOffset (double xOffset, double yOffset)
+{
+	gnome_print_scale (m_pc, scale, scale);
+	gnome_print_translate (m_pc, -xOffset, -yOffset);
+}
+
+void drgeoGPDrawable::setColor (enum drgeoColorType color)
+{
+	switch (color) {
+	case drgeoColorBlack:
+		gnome_print_setrgbcolor (m_pc, 0., 0., 0.);
+		break;
+	case drgeoColorDarkGrey:
+		gnome_print_setrgbcolor (m_pc, .333333, .333333, .333333);
+		break;
+	case drgeoColorGrey:
+		gnome_print_setrgbcolor (m_pc, .666667, .666667, .666667);
+		break;
+	case drgeoColorWhite:
+		gnome_print_setrgbcolor (m_pc, 1., 1., 1.);
+		break;
+	case drgeoColorDarkGreen:
+		gnome_print_setrgbcolor (m_pc, 0., .392157, 0.);
+		break;
+	case drgeoColorGreen:
+		gnome_print_setrgbcolor (m_pc, 0., .921569, 0.);
+		break;
+	case drgeoColorDarkBlue:
+		gnome_print_setrgbcolor (m_pc, .176471, .219608, 1.);
+		break;
+	case drgeoColorBlue:
+		gnome_print_setrgbcolor (m_pc, .313725, .694118, 1.);
+		break;
+	case drgeoColorBordeaux:
+		gnome_print_setrgbcolor (m_pc, .568627, 0., 0.);
+		break;
+	case drgeoColorRed:
+		gnome_print_setrgbcolor (m_pc, .921569, 0., 0.);
+		break;
+	case drgeoColorOrange:
+		gnome_print_setrgbcolor (m_pc, 1., .6, .168627);
+		break;
+	case drgeoColorYellow:
+		gnome_print_setrgbcolor (m_pc, 1., .941176, .129412);
+		break;
+	case drgeoColorTips:
+		gnome_print_setrgbcolor (m_pc, 1., 1., .752941);
+		break;
+	case drgeoColorPrintingArea:
+		gnome_print_setrgbcolor (m_pc, .941176, .941176, .941176);
+		break;
+	default:
+		break;
+	}
+}
diff --git a/goffice/drgeo_gpdrawable.h b/goffice/drgeo_gpdrawable.h
new file mode 100644
index 0000000..5e8ce3a
--- /dev/null
+++ b/goffice/drgeo_gpdrawable.h
@@ -0,0 +1,63 @@
+/* 
+ * DrGeo GOffice component
+ * drgeo_cairodrawable.h
+ *
+ * Copyright (C) 2006
+ *
+ * Developed by Jean Bréfort <jean brefort normalesup org>
+ *
+ * This program is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU General Public License as 
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#ifndef DRGEO_GPDRAWABLE_H
+#define DRGEO_GPDRAWABLE_H
+
+#include <geo/drgeo_drawable.h>
+#include <libgnomeprint/gnome-print.h>
+
+// Implementation of Cairo drawable.
+class drgeoGPDrawable:public drgeoDrawable
+{
+public:
+	drgeoGPDrawable (drgeoFigure * figure, GnomePrintContext *pc);
+	~drgeoGPDrawable ();
+
+	void drawPoint (drgeoStyle & style, drgeoPoint & point);
+	void drawPolygon (drgeoStyle & style, drgeoPoint * point, gint number);
+	void drawLine (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end);
+	void drawHalfLine (drgeoStyle & style, drgeoPoint & start,
+			 drgeoVector & vect);
+	void drawSegment (drgeoStyle & style, drgeoPoint & start, drgeoPoint & end);
+	void drawCircle (drgeoStyle & style, drgeoPoint & center, double radius);
+	void drawCircle (drgeoStyle & style, drgeoPoint & center,
+		   drgeoPoint & point);
+	void drawArc (drgeoStyle & style, drgeoPoint & center, double radius,
+		double start, double length);
+	void drawText (drgeoPoint & where, char *text, drgeoColorType fontColor);
+	double stringWidth (char *text);
+	double stringHeight (char *text);
+	drgeoPoint getAreaCenter ();
+	drgeoPoint getAreaSize ();
+	void setOffset (double xOffset, double yOffset);
+
+private:
+	void setColor (enum drgeoColorType color);
+
+private:
+	GnomePrintContext *m_pc;
+};
+
+#endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]