[Genlist] Fix compress mode
authorTae-Hwan Kim <the81.kim@samsung.com>
Tue, 2 Apr 2013 12:19:08 +0000 (21:19 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Wed, 3 Apr 2013 12:08:02 +0000 (21:08 +0900)
If compress mode is used, viewport width should be used for calculating
item's width. So before edje caculates it's height & width, minimum
restricted width should be given to caculate correct height of item because
edje should know it's width of textblock to caculate it's height of textblock.
(textblock can have multiline texts)
After edje min calc, if width exceeds the viewport width, set width
same as viewport width to compress item.

Change-Id: Ibe225a2e315320dd011972f73663b471af4a7781

src/lib/elm_genlist.c

index f25f0b9..5b8694b 100644 (file)
@@ -1715,10 +1715,16 @@ _item_realize(Elm_Gen_Item *it,
 
              if (it->select_mode != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
                elm_coords_finger_size_adjust(1, &mw, 1, &mh);
-             if (GL_IT(it)->wsd->mode == ELM_LIST_COMPRESS &&
-                 GL_IT(it)->wsd->prev_viewport_w != 0)
-               mw = GL_IT(it)->wsd->prev_viewport_w;
+             if ((GL_IT(it)->wsd->mode == ELM_LIST_COMPRESS) &&
+                 (GL_IT(it)->wsd->prev_viewport_w != 0) &&
+                 (mw < GL_IT(it)->wsd->prev_viewport_w))
+                mw = GL_IT(it)->wsd->prev_viewport_w;
              edje_object_size_min_restricted_calc(VIEW(it), &mw, &mh, mw, mh);
+             if ((GL_IT(it)->wsd->mode == ELM_LIST_COMPRESS) &&
+                 (GL_IT(it)->wsd->prev_viewport_w != 0) &&
+                 (mw > GL_IT(it)->wsd->prev_viewport_w))
+                mw = GL_IT(it)->wsd->prev_viewport_w;
+
 
              it->item->w = it->item->minw = mw;
              it->item->h = it->item->minh = mh;
@@ -2114,17 +2120,22 @@ _changed_job(Elm_Genlist_Smart_Data *sd)
 
                   if (it->select_mode != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
                      elm_coords_finger_size_adjust(1, &mw, 1, &mh);
-                  if (GL_IT(it)->wsd->mode == ELM_LIST_COMPRESS &&
-                      GL_IT(it)->wsd->prev_viewport_w != 0)
-                     mw = sd->prev_viewport_w;
+                  if ((GL_IT(it)->wsd->mode == ELM_LIST_COMPRESS) &&
+                      (GL_IT(it)->wsd->prev_viewport_w != 0) &&
+                      (mw < GL_IT(it)->wsd->prev_viewport_w))
+                     mw = GL_IT(it)->wsd->prev_viewport_w;
                   edje_object_size_min_restricted_calc(VIEW(it), &mw, &mh, mw, mh);
+                  if ((GL_IT(it)->wsd->mode == ELM_LIST_COMPRESS) &&
+                      (GL_IT(it)->wsd->prev_viewport_w != 0) &&
+                      (mw > GL_IT(it)->wsd->prev_viewport_w))
+                     mw = GL_IT(it)->wsd->prev_viewport_w;
 
-                  if (it->item->w != mw)
+                  if (it->item->minw != mw)
                     {
                        it->item->w = it->item->minw = mw;
                        width_changed = EINA_TRUE;
                     }
-                  if (it->item->h != mh)
+                  if (it->item->minh != mh)
                     {
                        it->item->h = it->item->minh = mh;
                        height_changed = EINA_TRUE;