char *iupMatrixGetSize(Ihandle* ih, int index, int m, int pixels_unit) { char* str; int size; ImatLinColData *p; if(m == IMAT_PROCESS_LIN) p = &(ih->data->lines); else p = &(ih->data->columns); if (index < 0 || index > p->num-1) return NULL; if (m == IMAT_PROCESS_LIN) size = iupMatrixGetLineHeight(ih, index, 1); else size = iupMatrixGetColumnWidth(ih, index, 1); if (size) { /* remove the decoration added in iupMatrixAuxGet */ if (m == IMAT_PROCESS_COL) size -= IMAT_PADDING_W + IMAT_FRAME_W; else size -= IMAT_PADDING_H + IMAT_FRAME_H; if (!pixels_unit) { int charwidth, charheight; iupdrvFontGetCharSize(ih, &charwidth, &charheight); if (m == IMAT_PROCESS_COL) size = iupRASTER2WIDTH(size, charwidth); else size = iupRASTER2HEIGHT(size, charheight); } } str = iupStrGetMemory(100); sprintf(str, "%d", size); return str; }
/* Fill the sizes vector with the width/heigh of all the columns/lines. Calculate the value of total_visible_size */ static void iMatrixAuxFillSizeVec(Ihandle* ih, int m) { int i; ImatLinColData *p; if (m == IMAT_PROCESS_LIN) p = &(ih->data->lines); else p = &(ih->data->columns); /* Calculate total width/height of the matrix and the width/height of each column */ p->total_visible_size = 0; for(i = 0; i < p->num; i++) { if (m == IMAT_PROCESS_LIN) p->dt[i].size = iupMatrixGetLineHeight(ih, i, 1); else p->dt[i].size = iupMatrixGetColumnWidth(ih, i, 1); if (i >= p->num_noscroll) p->total_visible_size += p->dt[i].size; } }