Home | History | Annotate | Download | only in pdf
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef PDF_BUTTON_H_
      6 #define PDF_BUTTON_H_
      7 
      8 #include "pdf/control.h"
      9 #include "ppapi/cpp/image_data.h"
     10 #include "ppapi/cpp/rect.h"
     11 
     12 namespace chrome_pdf {
     13 
     14 class Button : public Control {
     15  public:
     16   enum ButtonEventIds {
     17     EVENT_ID_BUTTON_CLICKED,
     18     EVENT_ID_BUTTON_STATE_CHANGED,
     19   };
     20 
     21   enum ButtonStyle {
     22     BUTTON_CLICKABLE,
     23     BUTTON_STATE
     24   };
     25 
     26   enum ButtonState {
     27     BUTTON_NORMAL,
     28     BUTTON_HIGHLIGHTED,
     29     BUTTON_PRESSED,
     30     BUTTON_PRESSED_STICKY,
     31   };
     32 
     33   Button();
     34   virtual ~Button();
     35   virtual bool CreateButton(uint32 id,
     36                             const pp::Point& origin,
     37                             bool visible,
     38                             Control::Owner* delegate,
     39                             ButtonStyle style,
     40                             const pp::ImageData& face_normal,
     41                             const pp::ImageData& face_highlighted,
     42                             const pp::ImageData& face_pressed);
     43 
     44   virtual void Paint(pp::ImageData* image_data, const pp::Rect& rc);
     45   virtual bool HandleEvent(const pp::InputEvent& event);
     46   virtual void OnEventCaptureReleased();
     47   virtual void Show(bool visible, bool invalidate);
     48   virtual void AdjustTransparency(uint8 transparency, bool invalidate);
     49 
     50   ButtonState state() const { return state_; }
     51   bool IsPressed() const { return state() == BUTTON_PRESSED_STICKY; }
     52   void SetPressedState(bool pressed);
     53 
     54  private:
     55   void OnButtonClicked();
     56 
     57   const pp::ImageData& GetCurrentImage();
     58   void ChangeState(ButtonState new_state, bool force);
     59 
     60   ButtonStyle style_;
     61   ButtonState state_;
     62   bool is_pressed_;
     63 
     64   pp::ImageData normal_;
     65   pp::ImageData highlighted_;
     66   pp::ImageData pressed_;
     67 };
     68 
     69 }  // namespace chrome_pdf
     70 
     71 #endif  // PDF_BUTTON_H_
     72