Beispiel #1
0
void ActiveThreadTab::setSummaryActiveThread(TabRef tab_ref, ChattyPostDataRef post_data_ref)
{
   reset();
   setScrollPos(0, true);
   m_selected_post_ref = nullptr;

   if(tab_ref != nullptr && post_data_ref != nullptr)
   {
      std::list<ChattyPostDataRef>::const_iterator it = g_world_tree.m_tree.begin();
      for(; it != g_world_tree.m_tree.end(); it++)
      {
         if((*it) == post_data_ref)
         {
            break;
         }
      }
      PostRef post_ref = createThreadPost(tab_ref);
      post_ref->fromChattyPostData(post_ref, *it, true, false);
      m_threads.push_back(post_ref);
      setupLinkages();
      updateShape(m_window_size);
      setSelectedPost(post_ref, false, false, false, 0.0f, false);
   }
   else
   {
      updateShape(m_window_size);
   }

   toolbarNeedsUpdate();
   needsRedraw();
}
Beispiel #2
0
void ActiveThreadTab::worldTreeBuilt(TabRef tab_ref)
{
   reset();
   updateShape(m_window_size);
   toolbarNeedsUpdate();
   needsRedraw();
}
Beispiel #3
0
void Layer::recursiveNeedsRedraw()
{
  needsRedraw();
  for(auto sublayer : sublayers)
  {
    sublayer->recursiveNeedsRedraw();
  }
}
void CandidateBar::setSpacing(int spacing)
{
    if (m_spacing != spacing)
    {
        m_spacing = spacing;
        Q_EMIT needsRedraw();
    }
}
void CandidateBar::setScrollOffset(int offset)
{
    if (m_scrollOffset != offset)
    {
        m_scrollOffset = offset;
        Q_EMIT needsRedraw();
    }
}
Beispiel #6
0
void Layer::rect(const Rect& r)
{
  if(r != _rect)
  {
    if (r.size() != _rect.size())
    {
      needsRedraw();
    }
    if(superlayer)
    {
      superlayer->needsRedraw();
    }
  }
  _rect = r;
}
Beispiel #7
0
void Tab::markAsRead()
{
   for(std::list<PostRef>::iterator it = m_threads.begin();
       it != m_threads.end();
       it++)
   {
      ChattyPostDataRef post_data_ref = (*it)->getPostDataRef();
      if(post_data_ref != nullptr)
      {
         post_data_ref->markAsRead(true);
      }
   }

   toolbarNeedsUpdate();
   needsRedraw();
}
Beispiel #8
0
Layer::Layer()
{  
  superlayer = NULL;
  
  _cornerRadius = 0;
  _backgroundColor = whiteColor;
  _borderColor = clearColor;
  _borderWidth = 0;
  _opacity = 1.0f;
  _visible = true;
  _backgroundContentMode = LayerContentModeScaleToFill;
  addDefaultKeyAccessors();
  addDefaultActions();
  composite(false);
  needsRedraw();
}
Beispiel #9
0
void LatestChattySummaryTab::worldTreeBuilt(TabRef tab_ref)
{
   reset();
   
   for(std::list<ChattyPostDataRef>::const_iterator it = g_world_tree.m_tree.begin();
       it != g_world_tree.m_tree.end();
       it++)
   {
      PostRef post_ref = createThreadPost(tab_ref);
      post_ref->fromChattyPostData(post_ref, *it, false, true);
      m_threads.push_back(post_ref);
   }

   setupLinkages();
   updateShape(m_window_size);
   toolbarNeedsUpdate();
   needsRedraw();
}
Beispiel #10
0
void ActiveThreadTab::worldTreeHasNewPosts(TabRef tab_ref,
                                           const std::list<ChattyPostDataRef>& new_posts)
{
   trackPositionBeforeChange();

   bool something_changed = false;

   if(m_threads.size() > 0)
   {
      chatty_post_id thread_id = m_threads.front()->getPostDataRef()->m_thread_id;

      for(std::list<ChattyPostDataRef>::const_iterator it = new_posts.begin();
          it != new_posts.end();
          it++)
      {
         if((*it)->m_thread_id == thread_id)
         {
            PostRef parent = findById((*it)->m_parent_id);
            if(parent != nullptr)
            {
               PostRef child = ReplyPost::create(tab_ref);
               child->fromChattyPostData(child, *it, false, false);
               parent->addChild(child);
               child->setMe(child);
               child->setParent(parent);
               something_changed = true;
            }
         }
      }
   }
   
   if(something_changed)
   {
      updateShape(m_window_size);
      updatePositionAfterChange();
      toolbarNeedsUpdate();
      needsRedraw();
   }
   else
   {
      cancelPositionTracking();
   }
}
Beispiel #11
0
// Reports whether the passed in layers have visible damage or are otherwise
// dirty because render properties changed.
// Assumes that layers in the list belong to same composition. ie. damage to
// one layer affects the others.  A warning is logged if the assumption is wrong.
bool GLXGraphicsystem::needsRedraw(LayerList layers)
{
    // TODO: Ignore damage from completely obscured surfaces

    for (LayerListConstIterator layer = layers.begin(); layer != layers.end(); layer++)
    {
        if ((*layer)->getLayerType() == Hardware && layers.size() > 1)
        {
            // Damage in a hardware layer should not imply a redraw in other layers
            LOG_WARNING("GLXGraphicsystem", "needsRedraw() called with layers not in the same composition");
        }

        if (needsRedraw(*layer))
        {
            return true;
        }
    }
    return false;
}
Beispiel #12
0
void Tab::reset()
{
   m_selected_post_ref = nullptr;

   for(std::list<PostRef>::iterator it = m_threads.begin();
       it != m_threads.end();
       it++)
   {
      (*it)->clearLinkages();
   }

   for(std::list<PostRef>::iterator it = m_threads.begin();
       it != m_threads.end();
       it++)
   {
      (*it)->clear();
   }

   m_threads.clear();
   needsRedraw();
}
Beispiel #13
0
void View::removeSubview(const ViewPtr& view)
{
  if(containsSubview(view))
  {
    if(view->superview == this)
    {
      subviews.remove(view);
      layer->removeSublayer(view->layer);
      view->superview = NULL;
      needsRedraw();
    }
    else
    {
      WOUT("tried to remove subview that was part of this view, but didn't have the correct superview, ignoring");
    }
  }
  else
  {
    WOUT("tried to remove subview that wasn't part of this view, ignoring");
  }
}
Beispiel #14
0
void Tab::updatePositionAfterChange()
{
   if(m_tracking_change &&
      m_selected_post_ref != nullptr)
   {
      float min_y, max_y;
      m_selected_post_ref->getPostYRange(min_y, max_y);

      if(m_selected_min_y_before_change != min_y)
      {
         float difference = m_selected_min_y_before_change - min_y;
         float new_goto_scroll_offset = math<float>::min(0, math<float>::max(-(m_crest_rect.y2 - m_window_size.y), (m_goto_scroll_offset + difference)));
         difference = new_goto_scroll_offset - m_goto_scroll_offset;

         m_scroll_offset += difference;
         m_goto_scroll_offset += difference;
         needsRedraw();
      }
   }
      
   m_tracking_change = false;
}
Beispiel #15
0
void LatestChattySummaryTab::refresh(TabRef tab_ref)
{
   ((LampApp*)app::App::get())->setSummaryActiveThread(nullptr);
   m_scroll_offset = 0.0f;
   m_goto_scroll_offset = 0.0f;
   m_selected_post_ref = nullptr;

   reset();

   for(std::list<ChattyPostDataRef>::const_iterator it = g_world_tree.m_tree.begin();
       it != g_world_tree.m_tree.end();
       it++)
   {
      PostRef post_ref = createThreadPost(tab_ref);
      post_ref->fromChattyPostData(post_ref, *it, false, true);
      m_threads.push_back(post_ref);
   }

   setupLinkages();
   updateShape(m_window_size);
   toolbarNeedsUpdate();
   needsRedraw();
}
Beispiel #16
0
void LatestChattySummaryTab::worldTreeHasNewPosts(TabRef tab_ref,
                                                  const std::list<ChattyPostDataRef>& new_posts)
{
   trackPositionBeforeChange();
   
   for(std::list<ChattyPostDataRef>::const_iterator it = new_posts.begin();
       it != new_posts.end();
       it++)
   {
      if((*it)->m_parent_id == 0 &&
         (*it)->m_id == (*it)->m_thread_id)
      {
         PostRef post_ref = createThreadPost(tab_ref);
         post_ref->fromChattyPostData(post_ref, *it, false, true);
         m_threads.push_front(post_ref);
      }
   }

   setupLinkages();
   updateShape(m_window_size);
   updatePositionAfterChange();
   toolbarNeedsUpdate();
   needsRedraw();
}
Beispiel #17
0
void Layer::backgroundContentMode(LayerContentMode v) { _backgroundContentMode = v; needsRedraw(); }
Beispiel #18
0
void Layer::borderWidth(f32 v) { _borderWidth=v; needsRedraw(); }
Beispiel #19
0
void Layer::backgroundImage(const ImagePtr& v) { _backgroundImage=v; needsRedraw(); }
Beispiel #20
0
void Layer::backgroundColor(const Color& v) {_backgroundColor = v; needsRedraw(); }
Beispiel #21
0
void Layer::borderColor(const Color& v) { _borderColor=v;needsRedraw(); }
Beispiel #22
0
void TextLayer::textColor(const Color& v) { _textColor = v; needsRedraw(); }
Beispiel #23
0
void Layer::cornerRadius(s16 v) {_cornerRadius=v; needsRedraw(); }
Beispiel #24
0
void TextLayer::insets(const Insets& v) { _insets = v; needsRedraw(); }
Beispiel #25
0
void Layer::composite(bool v)
{
  _composite = v;
  needsRedraw();
}
Beispiel #26
0
void TextLayer::alignment(TextAlignment v) { _alignment = v; needsRedraw(); }
Beispiel #27
0
void TextLayer::breakmode(BreakMode v) { _breakmode = v; needsRedraw(); }
Beispiel #28
0
bool Tab::setSelectedPost(PostRef post_ref,
                          bool adjust_scroll_pos,
                          bool snap,
                          bool keep_y_pos,
                          float y_pos,
                          bool by_mouse)
{
   bool changed = false;

   if(m_selected_post_ref != post_ref)
   {
      // unselect the selected first
      if(m_selected_post_ref)
      {
         m_selected_post_ref->setSelected(false);
      }

      m_selected_post_ref = post_ref;

      if(m_selected_post_ref)
      {
         m_selected_post_ref->setSelected(true);

         updateShape(m_window_size);

         if(adjust_scroll_pos)
         {
            float min_y, max_y;
            m_selected_post_ref->getPostYRange(min_y, max_y);

            if(max_y - min_y > m_window_size.y)
            {
               setScrollPos(-(min_y - 10.0f), snap);
            }
            else 
            {
               if(keep_y_pos)
               {
                  if(by_mouse)
                  {
                     if(y_pos > max_y)
                     {
                        offsetScroll(y_pos - ((min_y + max_y) / 2.0f), snap, false);
                     }

                     if(min_y < -m_scroll_offset)
                     {
                        offsetScroll((-m_scroll_offset) - min_y, snap, false);
                     }
                     else if(max_y >((-m_scroll_offset) + m_window_size.y))
                     {
                        offsetScroll(-(max_y - ((-m_scroll_offset) + m_window_size.y)), snap, false);
                     }
                  }
                  else
                  {
                     offsetScroll(y_pos - min_y, snap, false);
                  }
               }
               else
               {
                  if(min_y < -m_scroll_offset)
                  {
                     offsetScroll((-m_scroll_offset) - min_y, snap, false);
                  }
                  else if(max_y >((-m_scroll_offset) + m_window_size.y))
                  {
                     offsetScroll(-(max_y - ((-m_scroll_offset) + m_window_size.y)), snap, false);
                  }
               }
            }
         }
      }

      toolbarNeedsUpdate();
      needsRedraw();

      changed = true;
   }

   return changed;
}
Beispiel #29
0
void Tab::render(gl::FboRef text_fbo)
{
   m_scrollbar->AsScrollbar()->render(text_fbo);

   gl::translate(0, m_scroll_offset);

   bool new_posts_above_screen = false;
   bool new_posts_below_screen = false;

   for(std::list<PostRef>::iterator it = m_threads.begin();
       it != m_threads.end();
       it++)
   {
      float minY, maxY;
      (*it)->getThreadYRange(minY, maxY);
      if(minY + m_scroll_offset > m_window_size.y)
      {
         // off-screen.  Skip the rendering part
         if(m_perform_newness_glow_check && !new_posts_below_screen && (*it)->anyNew())
         {
            new_posts_below_screen = true;
         }
      }
      else if(maxY + m_scroll_offset < 0)
      {
         // off-screen.  Skip the rendering part
         if(m_perform_newness_glow_check && !new_posts_above_screen && (*it)->anyNew())
         { 
            new_posts_above_screen = true;
         }
      }
      else
      {
         (*it)->render(text_fbo, 
                       -m_scroll_offset, 
                       -m_scroll_offset + m_window_size.y,
                       new_posts_above_screen,
                       new_posts_below_screen);
      }
   }

   gl::Texture2dRef crest_image = g_skin.getImage(image_type::SHACK_CREST);
   if(crest_image &&
     !(m_crest_rect.y1 + m_scroll_offset > m_window_size.y ||
       m_crest_rect.y2 + m_scroll_offset < 0))
   {
      gl::color(1, 1, 1, 1);
      gl::draw(crest_image, m_crest_rect);
   }

   if(m_perform_newness_glow_check && new_posts_above_screen)
   {
      gl::color(1, 1, 1, 1);
      ci::ColorA new_color(g_skin.getColor(Skin::NEW_POST), 0.33f);
      ci::ColorA new_color_fade(g_skin.getColor(Skin::NEW_POST), 0.0f);

      gl::VertBatch batch(GL_TRIANGLES);

      batch.color(new_color);
      batch.vertex(vec2(0.0f, -m_scroll_offset));

      batch.color(new_color_fade);
      batch.vertex(vec2(0.0f, -m_scroll_offset + 20.0f));

      batch.color(new_color_fade);
      batch.vertex(vec2(m_window_size.x / 8.0f, -m_scroll_offset));

      batch.color(new_color);
      batch.vertex(vec2(m_window_size.x, -m_scroll_offset));

      batch.color(new_color_fade);
      batch.vertex(vec2(m_window_size.x, -m_scroll_offset + 20.0f));

      batch.color(new_color_fade);
      batch.vertex(vec2((m_window_size.x / 8.0f) * 7.0f, -m_scroll_offset));

      batch.draw();
   }

   if(m_perform_newness_glow_check && new_posts_below_screen)
   {
      gl::color(1, 1, 1, 1);
      ci::ColorA new_color(g_skin.getColor(Skin::NEW_POST), 0.33f);
      ci::ColorA new_color_fade(g_skin.getColor(Skin::NEW_POST), 0.0f);

      gl::VertBatch batch(GL_TRIANGLES);

      batch.color(new_color);
      batch.vertex(vec2(0.0f, -m_scroll_offset + m_window_size.y));

      batch.color(new_color_fade);
      batch.vertex(vec2(0.0f, -m_scroll_offset + m_window_size.y - 20.0f));

      batch.color(new_color_fade);
      batch.vertex(vec2(m_window_size.x / 8.0f, -m_scroll_offset + m_window_size.y));

      batch.color(new_color);
      batch.vertex(vec2(m_window_size.x, -m_scroll_offset + m_window_size.y));

      batch.color(new_color_fade);
      batch.vertex(vec2(m_window_size.x, -m_scroll_offset + m_window_size.y - 20.0f));

      batch.color(new_color_fade);
      batch.vertex(vec2((m_window_size.x / 8.0f) * 7.0f, -m_scroll_offset + m_window_size.y));

      batch.draw();
   }

   if(m_scroll_offset != m_goto_scroll_offset)
   {
      float scroll_percentage = g_lamp_settings.getSmoothScrollSpeed();
      m_scroll_offset = ((m_scroll_offset * (1.0f - scroll_percentage)) + (m_goto_scroll_offset * scroll_percentage));
      if(fabs(m_scroll_offset - m_goto_scroll_offset) <= 1.0f)
      {
         m_scroll_offset = m_goto_scroll_offset;
      }
      updateScrollbar();
      needsRedraw();
   }
}
Beispiel #30
0
void Tab::mouseWheel(float wheel_increment)
{
   offsetScroll(wheel_increment * (float)g_lamp_settings.getMouseWheelScrollSize(), false, true);
   needsRedraw();
}