Changeset 483

Show
Ignore:
Timestamp:
03/15/2008 13:43:54 (5 months ago)
Author:
why
Message:
  • shoes/ruby.c: starting to address the flow problems described in ticket #99. removed marginy from shoes_canvas and starting to use the max endy. so the rules are: margins no longer overlap and biggest element wins.
  • shoes/app.c: gtk wasn't repainting on resize. tied to the resize-allocate event now, which works.
Location:
trunk/shoes
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/shoes/app.c

    r472 r483  
    15361536  g_signal_connect(G_OBJECT(gk->window), "expose-event", 
    15371537                   G_CALLBACK(shoes_app_gtk_paint), app); 
     1538  g_signal_connect(G_OBJECT(gk->window), "size-allocate", 
     1539                   G_CALLBACK(shoes_app_gtk_paint), app); 
    15381540  g_signal_connect(G_OBJECT(gk->window), "motion-notify-event",  
    15391541                   G_CALLBACK(shoes_app_gtk_motion), app); 
  • trunk/shoes/canvas.c

    r481 r483  
    432432  canvas->cx = 0; 
    433433  canvas->cy = 0; 
    434   canvas->marginy = 0; 
    435434  canvas->endy = 0; 
    436435  canvas->endx = 0; 
     
    11771176  self_t->cx = self_t->place.ix; 
    11781177  self_t->cy = self_t->place.iy; 
    1179   self_t->marginy = 0; 
    11801178  self_t->endx = self_t->place.ix; 
    11811179  self_t->endy = self_t->place.iy; 
     
    12251223    self_t->endx = self_t->cx = 0; 
    12261224    self_t->topy = self_t->endy = self_t->cy = 0; 
    1227     self_t->marginy = 0; 
    12281225    if (!NIL_P(self_t->parent)) 
    12291226    { 
     
    13381335          self_t->cy = c1->place.y; 
    13391336          self_t->endx = self_t->cx; 
    1340           self_t->endy = c1->place.y + c1->place.h; 
     1337          self_t->endy = max(self_t->endy, c1->place.y + c1->place.h); 
    13411338        } 
    13421339        if (ck == cStack) { 
  • trunk/shoes/canvas.h

    r474 r483  
    227227  double sw;                // current stroke-width 
    228228  int cx, cy;               // cursor x and y (stored in absolute coords) 
    229   int marginy;              // value for next y-margin 
    230229  int endx, endy;           // jump points if the cursor spills over 
    231230  int topy, fully;          // since we often stack vertically 
  • trunk/shoes/ruby.c

    r477 r483  
    384384      canvas->cx = place->x = CPX(canvas); 
    385385      canvas->cy = place->y = canvas->endy; 
    386       canvas->marginy = bmargin; 
    387386    } 
    388387  } 
     
    392391  place->iw = place->w - (lmargin + rmargin); 
    393392  place->ih = place->h - (tmargin + bmargin); 
    394   INFO("PLACE: (%d, %d), (%d, %d) [%d, %d] %d %x\n", place->x, place->y, place->w, place->h, ABSX(*place), ABSY(*place), place->flags, canvas->marginy); 
     393  INFO("PLACE: (%d, %d), (%d, %d) [%d, %d] %x\n", place->x, place->y, place->w, place->h, ABSX(*place), ABSY(*place), place->flags); 
    395394} 
    396395 
     
    490489    canvas->cy = self_t->place.y; \ 
    491490    canvas->endx = canvas->cx; \ 
    492     canvas->endy = self_t->place.y + self_t->place.h; \ 
     491    canvas->endy = max(canvas->endy, self_t->place.y + self_t->place.h); \ 
    493492  } \ 
    494493  if (ck == cStack) { \ 
     
    24132412    { 
    24142413      self_t->place.x = CPX(canvas); 
    2415       self_t->place.y = canvas->endy; 
     2414      canvas->cy = self_t->place.y = canvas->endy; 
    24162415    } 
    24172416    else 
     
    24452444      pango_layout_set_indent(self_t->layout, 0); 
    24462445      self_t->place.x = CPX(canvas); 
    2447       self_t->place.y = canvas->endy; 
     2446      canvas->cy = self_t->place.y = canvas->endy; 
    24482447      pd = 0; 
    24492448    } 
     
    24512450      self_t->place.y = ((canvas->endy - ld) - lrect.height); 
    24522451  } 
    2453   if (!ABSY(self_t->place) && !ABSX(self_t->place) && !pd) 
    2454     tmargin = max(tmargin, canvas->marginy); 
    24552452  self_t->place.ix = self_t->place.x + lmargin; 
    24562453  self_t->place.iy = self_t->place.y + tmargin; 
     
    24982495    self_t->place.y, self_t->place.iy, self_t->place.w, self_t->place.h, pd); 
    24992496 
     2497  int endy = 0; 
    25002498  if (!ABSY(self_t->place)) { 
    25012499    // newlines have an empty size 
    25022500    if (ck != cStack) { 
    25032501      if (li == 0) { 
    2504         canvas->endy = self_t->place.y; 
     2502        endy = self_t->place.y; 
    25052503        canvas->cx = self_t->place.x + lrect.x + lrect.width + rmargin + pd; 
    25062504      } else { 
    2507         canvas->endy = self_t->place.y + py - lrect.height; 
     2505        endy = self_t->place.y + py - lrect.height; 
    25082506        if (lrect.width == 0) { 
    25092507          canvas->cx = self_t->place.x + lrect.x; 
     
    25112509          canvas->cx = self_t->place.x + lrect.width + rmargin; 
    25122510        } 
    2513         canvas->cy = canvas->endy; 
     2511        canvas->cy = endy; 
    25142512      } 
    25152513    } else { 
    2516       canvas->endy = self_t->place.y + self_t->place.h; 
    2517     } 
     2514      endy = self_t->place.y + self_t->place.h; 
     2515    } 
     2516 
     2517    canvas->endy = max(endy, canvas->endy); 
     2518    canvas->endx = canvas->cx; 
     2519 
    25182520    if (ck == cStack || canvas->cx - CPX(canvas) > canvas->width) { 
    25192521      canvas->cx = CPX(canvas); 
     
    25232525      bmargin = lrect.height; 
    25242526 
    2525     if (!pd) 
    2526       canvas->marginy = bmargin; 
    2527     else 
    2528       canvas->marginy = max(canvas->marginy, bmargin); 
    2529     canvas->endx = canvas->cx; 
    2530  
    2531     INFO("CX: (%d, %d) / LRECT: (%d, %d) / END: (%d, %d) %d\n",  
     2527    INFO("CX: (%d, %d) / LRECT: (%d, %d) / END: (%d, %d)\n",  
    25322528      canvas->cx, canvas->cy, 
    25332529      lrect.x, lrect.width, 
    2534       canvas->endx, canvas->endy, canvas->marginy); 
     2530      canvas->endx, canvas->endy); 
    25352531  } 
    25362532  return self;