- gint i,j, mask1, mask2;
- gint state, selected;
- gint x,y,width,height;
- GtkSheetRange new_range, aux_range;
-
- g_return_if_fail (sheet != NULL);
-
- if(range==NULL) range=&sheet->range;
-
- new_range=*range;
-
- range->row0=MIN(range->row0, sheet->range.row0);
- range->rowi=MAX(range->rowi, sheet->range.rowi);
- range->col0=MIN(range->col0, sheet->range.col0);
- range->coli=MAX(range->coli, sheet->range.coli);
-
- range->row0=MAX(range->row0, MIN_VISIBLE_ROW(sheet));
- range->rowi=MIN(range->rowi, MAX_VISIBLE_ROW(sheet));
- range->col0=MAX(range->col0, MIN_VISIBLE_COLUMN(sheet));
- range->coli=MIN(range->coli, MAX_VISIBLE_COLUMN(sheet));
-
- aux_range.row0=MAX(new_range.row0, MIN_VISIBLE_ROW(sheet));
- aux_range.rowi=MIN(new_range.rowi, MAX_VISIBLE_ROW(sheet));
- aux_range.col0=MAX(new_range.col0, MIN_VISIBLE_COLUMN(sheet));
- aux_range.coli=MIN(new_range.coli, MAX_VISIBLE_COLUMN(sheet));
-
- for(i=range->row0; i<=range->rowi; i++){
- for(j=range->col0; j<=range->coli; j++){
-
- state=gtk_sheet_cell_get_state(sheet, i, j);
- selected=(i<=new_range.rowi && i>=new_range.row0 &&
- j<=new_range.coli && j>=new_range.col0) ? TRUE : FALSE;
-
- if(state==GTK_STATE_SELECTED && selected &&
- xxx_column_is_visible(sheet, j) && yyy_row_is_visible(sheet, i) &&
- (i==sheet->range.row0 || i==sheet->range.rowi ||
- j==sheet->range.col0 || j==sheet->range.coli ||
- i==new_range.row0 || i==new_range.rowi ||
- j==new_range.col0 || j==new_range.coli)){
-
- mask1 = i==sheet->range.row0 ? 1 : 0;
- mask1 = i==sheet->range.rowi ? mask1+2 : mask1;
- mask1 = j==sheet->range.col0 ? mask1+4 : mask1;
- mask1 = j==sheet->range.coli ? mask1+8 : mask1;
-
- mask2 = i==new_range.row0 ? 1 : 0;
- mask2 = i==new_range.rowi ? mask2+2 : mask2;
- mask2 = j==new_range.col0 ? mask2+4 : mask2;
- mask2 = j==new_range.coli ? mask2+8 : mask2;
-
- if(mask1 != mask2){
- x=COLUMN_LEFT_XPIXEL(sheet,j);
- y=ROW_TOP_YPIXEL(sheet, i);
- width=COLUMN_LEFT_XPIXEL(sheet, j)-x+
- xxx_column_width(sheet, j);
- height=ROW_TOP_YPIXEL(sheet, i)-y+yyy_row_height(sheet, i);
-
- if(i==sheet->range.row0){
- y=y-3;
- height=height+3;
- }
- if(i==sheet->range.rowi) height=height+3;
- if(j==sheet->range.col0){
- x=x-3;
- width=width+3;
- }
- if(j==sheet->range.coli) width=width+3;
-
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- x+1,
- y+1,
- x+1,
- y+1,
- width,
- height);
-
- if(i != sheet->active_cell.row || j != sheet->active_cell.col){
- x=COLUMN_LEFT_XPIXEL(sheet,j);
- y=ROW_TOP_YPIXEL(sheet, i);
- width=COLUMN_LEFT_XPIXEL(sheet, j)-x+
- xxx_column_width(sheet, j);
-
- height=ROW_TOP_YPIXEL(sheet, i)-y+yyy_row_height(sheet, i);
-
- if(i==new_range.row0){
- y=y+2;
- height=height-2;
- }
- if(i==new_range.rowi) height=height-3;
- if(j==new_range.col0){
- x=x+2;
- width=width-2;
- }
- if(j==new_range.coli) width=width-3;
-
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- TRUE,
- x+1,y+1,
- width,height);
- }
- }
- }
- }
- }
-
- for(i=range->row0; i<=range->rowi; i++){
- for(j=range->col0; j<=range->coli; j++){
-
- state=gtk_sheet_cell_get_state(sheet, i, j);
- selected=(i<=new_range.rowi && i>=new_range.row0 &&
- j<=new_range.coli && j>=new_range.col0) ? TRUE : FALSE;
-
- if(state==GTK_STATE_SELECTED && !selected &&
- xxx_column_is_visible(sheet, j) && yyy_row_is_visible(sheet, i)){
-
- x=COLUMN_LEFT_XPIXEL(sheet,j);
- y=ROW_TOP_YPIXEL(sheet, i);
- width=COLUMN_LEFT_XPIXEL(sheet, j)-x+ xxx_column_width(sheet, j);
- height=ROW_TOP_YPIXEL(sheet, i)-y+yyy_row_height(sheet, i);
-
- if(i==sheet->range.row0){
- y=y-3;
- height=height+3;
- }
- if(i==sheet->range.rowi) height=height+3;
- if(j==sheet->range.col0){
- x=x-3;
- width=width+3;
- }
- if(j==sheet->range.coli) width=width+3;
-
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- x+1,
- y+1,
- x+1,
- y+1,
- width,
- height);
- }
- }
- }
-
- for(i=range->row0; i<=range->rowi; i++){
- for(j=range->col0; j<=range->coli; j++){
-
- state=gtk_sheet_cell_get_state(sheet, i, j);
- selected=(i<=new_range.rowi && i>=new_range.row0 &&
- j<=new_range.coli && j>=new_range.col0) ? TRUE : FALSE;
-
- if(state!=GTK_STATE_SELECTED && selected &&
- xxx_column_is_visible(sheet, j) && yyy_row_is_visible(sheet, i) &&
- (i != sheet->active_cell.row || j != sheet->active_cell.col)){
-
- x=COLUMN_LEFT_XPIXEL(sheet,j);
- y=ROW_TOP_YPIXEL(sheet, i);
- width=COLUMN_LEFT_XPIXEL(sheet, j)-x+ xxx_column_width(sheet, j);
- height=ROW_TOP_YPIXEL(sheet, i)-y+yyy_row_height(sheet, i);
-
- if(i==new_range.row0){
- y=y+2;
- height=height-2;
- }
- if(i==new_range.rowi) height=height-3;
- if(j==new_range.col0){
- x=x+2;
- width=width-2;
- }
- if(j==new_range.coli) width=width-3;
-
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- TRUE,
- x+1,y+1,
- width,height);
-
- }
-
- }
- }
-
- for(i=aux_range.row0; i<=aux_range.rowi; i++){
- for(j=aux_range.col0; j<=aux_range.coli; j++){
-
- if(xxx_column_is_visible(sheet, j) && yyy_row_is_visible(sheet, i)){
-
- state=gtk_sheet_cell_get_state(sheet, i, j);
-
- mask1 = i==sheet->range.row0 ? 1 : 0;
- mask1 = i==sheet->range.rowi ? mask1+2 : mask1;
- mask1 = j==sheet->range.col0 ? mask1+4 : mask1;
- mask1 = j==sheet->range.coli ? mask1+8 : mask1;
-
- mask2 = i==new_range.row0 ? 1 : 0;
- mask2 = i==new_range.rowi ? mask2+2 : mask2;
- mask2 = j==new_range.col0 ? mask2+4 : mask2;
- mask2 = j==new_range.coli ? mask2+8 : mask2;
- if(mask2!=mask1 || (mask2==mask1 && state!=GTK_STATE_SELECTED)){
- x=COLUMN_LEFT_XPIXEL(sheet,j);
- y=ROW_TOP_YPIXEL(sheet, i);
- width=xxx_column_width(sheet, j);
- height=yyy_row_height(sheet, i);
- if(mask2 & 1)
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- TRUE,
- x+1,y-1,
- width,3);
-
-
- if(mask2 & 2)
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- TRUE,
- x+1,y+height-1,
- width,3);
-
- if(mask2 & 4)
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- TRUE,
- x-1,y+1,
- 3,height);
-
-
- if(mask2 & 8)
- gdk_draw_rectangle (sheet->sheet_window,
- sheet->xor_gc,
- TRUE,
- x+width-1,y+1,
- 3,height);
-
-
-
- }
-
- }
-
- }
- }
-
-
- *range=new_range;
- gtk_sheet_draw_corners(sheet, new_range);
-