SANE_Status soapht_get_parameters(SANE_Handle handle, SANE_Parameters *params) { struct soap_session *ps = (struct soap_session *)handle; set_extents(ps); /* Get scan parameters for sane client. */ ps->bb_get_parameters(ps, params, ps->ip_handle ? SPO_STARTED : SPO_BEST_GUESS); DBG8("sane_hpaio_get_parameters(): format=%d, last_frame=%d, lines=%d, depth=%d, pixels_per_line=%d, bytes_per_line=%d\n", params->format, params->last_frame, params->lines, params->depth, params->pixels_per_line, params->bytes_per_line); return SANE_STATUS_GOOD; } /* soapht_get_parameters */
void file_list_widget_rep::handle_set_string (set_string_event ev) { if (ev->which == "directory") { dir= ev->s; bool flag; names= read_directory (url_system (dir), flag); lids= array<bool>(N(names)); for (int i=0; i<N(names); i++) lids[i]= list_in_directory (dir, names[i], suffix, dir_flag); SI w, h; this << get_size (w, h, 0); get_canvas () << set_extents (0, -h, w, 0); hilight=-1; if (attached ()) this << emit_invalidate_all (); } else attribute_widget_rep::handle_set_string (ev); }
// A useful method to set the extents (in local CRS) and the corners // (in Geo WGS84) at the same time. bool MiniDatabuf::SetBounds(const vtProjection &proj, const DRECT &extents) { // First, set the extent rectangle set_extents((float)extents.left, (float)extents.right, (float)extents.bottom, (float)extents.top); // Create transform from local to Geo-WGS84 vtProjection geo; geo.SetWellKnownGeogCS("WGS84"); OCT *trans = CreateCoordTransform(&proj, &geo); if (!trans) return false; // Convert each corner as a point DPoint2 sw_corner, se_corner, nw_corner, ne_corner; sw_corner.Set(extents.left, extents.bottom); trans->Transform(1, &sw_corner.x, &sw_corner.y); se_corner.Set(extents.right, extents.bottom); trans->Transform(1, &se_corner.x, &se_corner.y); nw_corner.Set(extents.left, extents.top); trans->Transform(1, &nw_corner.x, &nw_corner.y); ne_corner.Set(extents.right, extents.top); trans->Transform(1, &ne_corner.x, &ne_corner.y); set_LLWGS84corners((float)sw_corner.x, (float)sw_corner.y, (float)se_corner.x, (float)se_corner.y, (float)nw_corner.x, (float)nw_corner.y, (float)ne_corner.x, (float)ne_corner.y); delete trans; return true; }
SANE_Status soapht_start(SANE_Handle handle) { struct soap_session *ps = (struct soap_session *)handle; SANE_Parameters pp; IP_IMAGE_TRAITS traits; IP_XFORM_SPEC xforms[IP_MAX_XFORMS], *pXform=xforms; int stat, ret; DBG8("sane_hpaio_start()\n"); ps -> user_cancel = 0; ps -> cnt = 0; ps -> index = 0; if (set_extents(ps)) { BUG("invalid extents: tlx=%d brx=%d tly=%d bry=%d minwidth=%d minheight%d maxwidth=%d maxheight=%d\n", ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max); stat = SANE_STATUS_INVAL; goto bugout; } /* If input is ADF and ADF is empty, return SANE_STATUS_NO_DOCS. */ if (ps->currentInputSource==IS_ADF || ps->currentInputSource==IS_ADF_DUPLEX) { ret = ps->bb_is_paper_in_adf(ps); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */ if (ret == 0) { stat = SANE_STATUS_NO_DOCS; /* done scanning */ SendScanEvent (ps->uri, EVENT_SCAN_ADF_NO_DOCS); goto bugout; } else if (ret < 0) { stat = SANE_STATUS_IO_ERROR; goto bugout; } } /* Start scan and get actual image traits. */ if (ps->bb_start_scan(ps)) { stat = SANE_STATUS_IO_ERROR; goto bugout; } SendScanEvent(ps->uri, EVENT_START_SCAN_JOB); memset(xforms, 0, sizeof(xforms)); /* Setup image-processing pipeline for xform. */ if (ps->currentScanMode == CE_RGB24 || ps->currentScanMode == CE_GRAY8) { switch(ps->currentCompression) { case SF_JFIF: pXform->aXformInfo[IP_JPG_DECODE_FROM_DENALI].dword = 0; /* 0=no */ ADD_XFORM(X_JPG_DECODE); pXform->aXformInfo[IP_CNV_COLOR_SPACE_WHICH_CNV].dword = IP_CNV_YCC_TO_SRGB; pXform->aXformInfo[IP_CNV_COLOR_SPACE_GAMMA].dword = 0x00010000; ADD_XFORM(X_CNV_COLOR_SPACE); break; case SF_HPRAW: default: break; } } else { /* Must be BLACK_AND_WHITE1 (Lineart). */ switch(ps->currentCompression) { case SF_JFIF: pXform->aXformInfo[IP_JPG_DECODE_FROM_DENALI].dword = 0; /* 0=no */ ADD_XFORM(X_JPG_DECODE); pXform->aXformInfo[IP_GRAY_2_BI_THRESHOLD].dword = 127; ADD_XFORM(X_GRAY_2_BI); break; case SF_HPRAW: pXform->aXformInfo[IP_GRAY_2_BI_THRESHOLD].dword = 127; ADD_XFORM(X_GRAY_2_BI); default: break; } } /* Setup x/y cropping for xform. (Actually we let cm1017 do it's own cropping) */ pXform->aXformInfo[IP_CROP_LEFT].dword = 0; pXform->aXformInfo[IP_CROP_RIGHT].dword = 0; pXform->aXformInfo[IP_CROP_TOP].dword = 0; pXform->aXformInfo[IP_CROP_MAXOUTROWS].dword = 0; ADD_XFORM(X_CROP); /* Setup x/y padding for xform. (Actually we let cm1017 do it's own padding) */ pXform->aXformInfo[IP_PAD_LEFT].dword = 0; /* # of pixels to add to left side */ pXform->aXformInfo[IP_PAD_RIGHT].dword = 0; /* # of pixels to add to right side */ pXform->aXformInfo[IP_PAD_TOP].dword = 0; /* # of rows to add to top */ pXform->aXformInfo[IP_PAD_BOTTOM].dword = 0; /* # of rows to add to bottom */ pXform->aXformInfo[IP_PAD_VALUE].dword = ps->currentScanMode == CE_BLACK_AND_WHITE1 ? 0 : -1; /* lineart white = 0, rgb white = -1 */ pXform->aXformInfo[IP_PAD_MIN_HEIGHT].dword = 0; ADD_XFORM(X_PAD); /* Open image processor. */ if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE) { BUG("unable open image processor: err=%d\n", ret); stat = SANE_STATUS_INVAL; goto bugout; } /* Get scan parameters for image processor. */ if (ps->currentCompression == SF_HPRAW) ps->bb_get_parameters(ps, &pp, SPO_STARTED_JR); /* hpraw, use actual parameters */ else ps->bb_get_parameters(ps, &pp, SPO_BEST_GUESS); /* jpeg, use best guess */ traits.iPixelsPerRow = pp.pixels_per_line; switch(ps->currentScanMode) { case CE_BLACK_AND_WHITE1: /* lineart (let IP create Mono from Gray8) */ case CE_GRAY8: traits.iBitsPerPixel = 8; /* grayscale */ break; case CE_RGB24: default: traits.iBitsPerPixel = 24; /* color */ break; } traits.lHorizDPI = ps->currentResolution << 16; traits.lVertDPI = ps->currentResolution << 16; traits.lNumRows = pp.lines; traits.iNumPages = 1; traits.iPageNum = 1; traits.iComponentsPerPixel = ((traits.iBitsPerPixel % 3) ? 1 : 3); ipSetDefaultInputTraits(ps->ip_handle, &traits); /* If jpeg get output image attributes from the image processor. */ if (ps->currentCompression == SF_JFIF) { /* Enable parsed header flag. */ ipResultMask(ps->ip_handle, IP_PARSED_HEADER); /* Wait for image processor to process header so we know the exact size of the image for sane_get_params. */ while (1) { ret = get_ip_data(ps, NULL, 0, NULL); if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE)) { BUG("ipConvert error=%x\n", ret); stat = SANE_STATUS_IO_ERROR; goto bugout; } if (ret & IP_PARSED_HEADER) { ipGetImageTraits(ps->ip_handle, NULL, &ps->image_traits); /* get valid image traits */ ipResultMask(ps->ip_handle, 0); /* disable parsed header flag */ break; } } } else ipGetImageTraits(ps->ip_handle, NULL, &ps->image_traits); /* get valid image traits */ stat = SANE_STATUS_GOOD; bugout: if (stat != SANE_STATUS_GOOD) { if (ps->ip_handle) { ipClose(ps->ip_handle); ps->ip_handle = 0; } ps->bb_end_scan(ps, stat == SANE_STATUS_IO_ERROR ? 1: 0); } return stat; } /* soapht_start */
void scrollable_widget_rep::handle_set_coord4 (set_coord4_event ev) { if (ev->which == "extents") set_extents (ev->c1, ev->c2, ev->c3, ev->c4); else attribute_widget_rep::handle_set_coord4 (ev); }
void scrollable_widget_rep::handle_position (position_event ev) { (void) ev; set_extents (ex1, ey1, ex2, ey2); a[0] << emit_reposition (); }
BoxShape::BoxShape() : Shape( PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_BOX)) { set_extents(Vector3(1,1,1)); }