gnome-scan r816 - in trunk: . lib modules/gsane
- From: bersace svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-scan r816 - in trunk: . lib modules/gsane
- Date: Mon, 2 Feb 2009 20:10:27 +0000 (UTC)
Author: bersace
Date: Mon Feb 2 20:10:27 2009
New Revision: 816
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=816&view=rev
Log:
Added hardware extent
Modified:
trunk/ChangeLog
trunk/lib/gnome-scan-common.vala
trunk/lib/gnome-scan-scanner.vala
trunk/modules/gsane/gsane-option-area.c
Modified: trunk/lib/gnome-scan-common.vala
==============================================================================
--- trunk/lib/gnome-scan-common.vala (original)
+++ trunk/lib/gnome-scan-common.vala Mon Feb 2 20:10:27 2009
@@ -79,6 +79,17 @@
public double y;
}
+ public struct Extent {
+ public double width;
+ public double height;
+
+ public Extent(double width, double height)
+ {
+ this.width = width;
+ this.height = height;
+ }
+ }
+
public struct Range {
public double min;
public double step;
Modified: trunk/lib/gnome-scan-scanner.vala
==============================================================================
--- trunk/lib/gnome-scan-scanner.vala (original)
+++ trunk/lib/gnome-scan-scanner.vala Mon Feb 2 20:10:27 2009
@@ -27,6 +27,11 @@
public string blurb {set construct; get;}
public string icon_name {set construct; get;}
public Gegl.Buffer buffer {set; get;}
+ public Extent extent { set; get; }
+
+ construct {
+ this.extent = Extent(0.0, 0.0);
+ }
// return true while there is more work to do.
public virtual bool work(out double progress)
Modified: trunk/modules/gsane/gsane-option-area.c
==============================================================================
--- trunk/modules/gsane/gsane-option-area.c (original)
+++ trunk/modules/gsane/gsane-option-area.c Mon Feb 2 20:10:27 2009
@@ -39,8 +39,6 @@
GnomeScanOption* page_orientation;
GnomeScanUnit unit;
gdouble fake_resolution;
- gdouble width;
- gdouble height;
};
G_DEFINE_TYPE(GSaneOptionArea, gsane_option_area, GSANE_TYPE_OPTION_HANDLER)
@@ -121,14 +119,14 @@
}
static GSList*
-gsane_option_area_add_paper_size(GSaneOptionArea* self, GSList* values, const gchar* paper_name, gdouble width, gdouble height)
+gsane_option_area_add_paper_size(GSaneOptionArea* self, GSList* values, const gchar* paper_name, GnomeScanExtent *extent)
{
GtkPaperSize* ps;
ps = gtk_paper_size_new(paper_name);
- if (gtk_paper_size_get_width(ps, GTK_UNIT_MM) > width
- || gtk_paper_size_get_height(ps, GTK_UNIT_MM) > height) {
+ if (gtk_paper_size_get_width(ps, GTK_UNIT_MM) > extent->width
+ || gtk_paper_size_get_height(ps, GTK_UNIT_MM) > extent->height) {
g_message("Can't scan %s document, too wide for hardware extent.",
gtk_paper_size_get_display_name(ps));
gtk_paper_size_free(ps);
@@ -141,18 +139,20 @@
/* List common paper sizes. This will be extendable through
Preselection */
static GSList*
-gsane_option_area_list_paper_sizes(GSaneOptionArea *self)
+gsane_option_area_list_paper_sizes(GSaneOptionArea *self, GnomeScanExtent *extent)
{
GSList *values = NULL;
+ gnome_scan_scanner_get_extent(GSANE_OPTION_HANDLER(self)->scanner, extent);
+
/* ISO format */
- values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_A4, self->priv->width, self->priv->height);
- values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_A5, self->priv->width, self->priv->height);
+ values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_A4, extent);
+ values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_A5, extent);
/* US bullshit non standard paper sizes */
- values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_LETTER, self->priv->width, self->priv->height);
- values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_LEGAL, self->priv->width, self->priv->height);
- values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_EXECUTIVE, self->priv->width, self->priv->height);
+ values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_LETTER, extent);
+ values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_LEGAL, extent);
+ values = gsane_option_area_add_paper_size(self, values, GTK_PAPER_NAME_EXECUTIVE, extent);
return values;
}
@@ -163,7 +163,11 @@
GSaneOptionHandler* handler = (GSaneOptionHandler*)self;
GSList *ps_list = NULL, *it;
gdouble tlx, tly, brx, bry, width, height;
+ GnomeScanExtent extent;
+
+ gnome_scan_scanner_get_extent(GSANE_OPTION_HANDLER(self)->scanner, &extent);
+ /* Read hardware saved custom paper size */
tlx = gsane_option_handler_get_double(handler, self->priv->tl_x_desc, self->priv->tl_x_index, NULL);
tly = gsane_option_handler_get_double(handler, self->priv->tl_y_desc, self->priv->tl_y_index, NULL);
brx = gsane_option_handler_get_double(handler, self->priv->br_x_desc, self->priv->br_x_index, NULL);
@@ -182,7 +186,7 @@
height = gnome_scan_convert_to_mm(height, self->priv->unit, self->priv->fake_resolution);
}
else
- ps_list = gsane_option_area_list_paper_sizes(self);
+ ps_list = gsane_option_area_list_paper_sizes(self, &extent);
/* define special paper sizes */
@@ -196,7 +200,7 @@
ps_list = g_slist_prepend(ps_list,
/* Translator: maximum paper size display label */
gtk_paper_size_new_custom("max", _("Maximum"),
- self->priv->width, self->priv->height,
+ extent.width, extent.height,
GTK_UNIT_MM));
GSList *enum_values = NULL;
@@ -278,7 +282,7 @@
}
static gboolean
-gsane_option_area_get_extent(GSaneOptionArea *self, gdouble *width, gdouble *height)
+gsane_option_area_get_extent(GSaneOptionArea *self, GnomeScanExtent *extent)
{
gdouble min, max;
@@ -288,18 +292,18 @@
case SANE_TYPE_INT:
min = self->priv->br_x_desc->constraint.range->min;
max = self->priv->br_x_desc->constraint.range->max;
- *width = max - min;
+ extent->width = max - min;
min = self->priv->br_y_desc->constraint.range->min;
max = self->priv->br_y_desc->constraint.range->max;
- *height = max - min;
+ extent->height = max - min;
break;
case SANE_TYPE_FIXED:
min = SANE_UNFIX(self->priv->br_x_desc->constraint.range->min);
max = SANE_UNFIX(self->priv->br_x_desc->constraint.range->max);
- *width = max - min;
+ extent->width = max - min;
min = SANE_UNFIX(self->priv->br_y_desc->constraint.range->min);
max = SANE_UNFIX(self->priv->br_y_desc->constraint.range->max);
- *height = max - min;
+ extent->height = max - min;
break;
default:
g_warning("Unsupported coordinate unit.");
@@ -314,6 +318,7 @@
gsane_option_handler_handle_matched(GSaneOptionHandler *handler, const SANE_Option_Descriptor* desc, SANE_Int n, const gchar*group)
{
GSaneOptionArea* self = GSANE_OPTION_AREA (handler);
+ GnomeScanExtent extent;
self->priv->count++;
@@ -322,7 +327,7 @@
/* Here we have matched all SANE option we wanted */
- if (!gsane_option_area_get_extent(self, &self->priv->width, &self->priv->height))
+ if (!gsane_option_area_get_extent(self, &extent))
return;
self->priv->unit = gsane_option_unit(self->priv->tl_x_desc);
@@ -331,19 +336,20 @@
scanner extent. We assume the scanner can scan a US
Legal-width paper. We compute a fake resolution
based on this assumption. */
- self->priv->fake_resolution = self->priv->width / (216. / 25.4);
+ self->priv->fake_resolution = extent.width / (216. / 25.4);
- self->priv->width = gnome_scan_convert_to_mm(self->priv->width,
- self->priv->unit,
- self->priv->fake_resolution);
- self->priv->height = gnome_scan_convert_to_mm(self->priv->height,
- self->priv->unit,
- self->priv->fake_resolution);
+ extent.width = gnome_scan_convert_to_mm(extent.width,
+ self->priv->unit,
+ self->priv->fake_resolution);
+ extent.height = gnome_scan_convert_to_mm(extent.height,
+ self->priv->unit,
+ self->priv->fake_resolution);
}
+ gnome_scan_scanner_set_extent(handler->scanner, gnome_scan_extent_dup(&extent));
g_debug("%s extent is %.2fx%.2f %s",
gnome_scan_scanner_get_name(handler->scanner),
- self->priv->width, self->priv->height, gnome_scan_unit_to_string(self->priv->unit));
+ extent.width, extent.height, gnome_scan_unit_to_string(self->priv->unit));
/* Actually install high level options */
gsane_option_area_install_origin(self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]