예제 #1
0
ID3V2 * ID3V2::parse(InputPlugin * input,const FXuchar * id) {
  FXuchar info[6];

  if (input->read(info,6)!=6)
    return nullptr;

  const FXuchar & id3v2_flags = info[1];
  FXint tagsize = ID3_SYNCSAFE_INT32(info+2);

  tagsize+=10;
  if (id3v2_flags&ID3V2::HAS_FOOTER) {
    tagsize+=10;
    }

  FXuchar * tagbuffer=nullptr;
  allocElms(tagbuffer,tagsize);

  if (input->read(tagbuffer+10,tagsize-10)!=tagsize-10){
    freeElms(tagbuffer);
    return nullptr;
    }

  memcpy(tagbuffer,id,4);
  memcpy(tagbuffer+4,info,6);

  ID3V2 * id3v2 = new ID3V2(tagbuffer,tagsize);

  freeElms(tagbuffer);

  return id3v2;
  }
예제 #2
0
// Restore image from off-screen pixmap
long ShutterBug::onCmdSnap(FXObject*,FXSelector,void*){
  FXColor *pixels=NULL;

  // Try grab pixels
  if(snapRectangle(pixels,rectangle)){

    // Construct file dialog
    FXFileDialog savedialog(this,tr("Save Image"));
    savedialog.setSelectMode(SELECTFILE_ANY);
    savedialog.setPatternList(patterns);
    savedialog.setCurrentPattern(fileformat);
    savedialog.setFilename(FXPath::absolute(filename));

    // Run file dialog
    if(savedialog.execute()){
      filename=savedialog.getFilename();
      fileformat=savedialog.getCurrentPattern();
      if(FXStat::exists(filename) && FXMessageBox::question(this,MBOX_YES_NO,tr("Overwrite File"),tr("Overwrite existing image file: %s?"),filename.text())!=MBOX_CLICKED_YES) goto x;
      if(!saveImage(filename,pixels,rectangle.w,rectangle.h)){
        FXMessageBox::error(this,MBOX_OK,tr("Error Saving Image"),tr("Unable to save image to file: %s."),filename.text());
        }
      }

    // Free pixels
x:  freeElms(pixels);
    }
  return 1;
  }
예제 #3
0
// We lost the selection somehow
long ShutterBug::onClipboardLost(FXObject* sender,FXSelector sel,void* ptr){
  FXShell::onClipboardLost(sender,sel,ptr);
  FXTRACE((1,"%s::onClipboardLost \n",getClassName()));
  freeElms(clipbuffer);
  clipwidth=0;
  clipheight=0;
  return 1;
  }
예제 #4
0
long GMSourceView::onDndSourceMotion(FXObject*,FXSelector,void*ptr){
  FXEvent * event = static_cast<FXEvent*>(ptr);
  GMTreeItem * item = dynamic_cast<GMTreeItem*>(sourcelist->getItemAt(event->win_x,event->win_y));
  if (item) {
    GMSource * src = static_cast<GMSource *>(item->getData());
    FXDragType*types;
    FXuint     ntypes;
    if (sourcelist->inquireDNDTypes(FROM_DRAGNDROP,types,ntypes)){
      if (src->dnd_accepts(types,ntypes)){
        sourcedrop=src;
        sourcelist->acceptDrop(DRAG_ACCEPT);
        freeElms(types);
        return 1;
        }
      freeElms(types);
      }
    }
  sourcedrop=nullptr;
  return 0;
  }
예제 #5
0
// Snapshot to clipboard
long ShutterBug::onCmdSnapClipboard(FXObject*,FXSelector,void*){
  freeElms(clipbuffer);
  clipwidth=0;
  clipheight=0;
  if(acquireClipboard(dndTypes,ARRAYNUMBER(dndTypes))){
    if(snapRectangle(clipbuffer,rectangle)){
      clipwidth=rectangle.w;
      clipheight=rectangle.h;
      }
    }
  return 1;
  }
예제 #6
0
// Try to guess at a suitable font - we only do this when
// there is no "FontName" entry in the registry.
static void FindFont(FXString &FontName) {
  FXFontDesc*fonts=NULL;
  FXuint numfonts=0;
  if (FXFont::listFonts(fonts,numfonts,FXString::null)) {
    // First, try each of the items in our "tryfonts" list...
    for (const char**tryfont=tryfonts; *tryfont; tryfont++) {
      for (FXuint i=0; i<numfonts; i++) {
        FXFontDesc fd=fonts[i];
        if (strncasecmp(fd.face, *tryfont, strlen(*tryfont))==0) {
           FontName=fd.face;
           freeElms(fonts);
           return;
        }
      }
    } // keep looking...
    // Try to grab the first thing that is fixed-width and scalable.
    for (FXuint i=0; i<numfonts; i++) {
      FXFontDesc fd=fonts[i];
      if ((fd.flags&FXFont::Fixed) && (fd.flags&FXFont::Scalable)) {
        FontName=fd.face;
        freeElms(fonts);
        return;
      }
    } // keep looking...
    // Try to grab the first thing that is fixed-width and reasonably sized.
    for (FXuint i=0; i<numfonts; i++) {
      FXFontDesc fd=fonts[i];
      if ((fd.flags&FXFont::Fixed)&&(fd.size>=100)&&(fd.size<200)) {
        FontName=fd.face;
        freeElms(fonts);
        return;
      }
    }
    freeElms(fonts);
  }
  FontName="fixed"; // I give up!
}
예제 #7
0
// Destroy main window
ShutterBug::~ShutterBug(){
  getApp()->removeTimeout(this,ID_RECORD_FRAME);
  getApp()->removeTimeout(this,ID_SNAPSHOT);
  freeElms(clipbuffer);
  delete snapper[0];
  delete snapper[1];
  delete snapper[2];
  delete snapper[3];
  delete bigicon;
  delete smallicon;
  delete weighticons[0];
  delete weighticons[1];
  delete weighticons[2];
  delete weighticons[3];
  delete weighticons[4];
  delete weighticons[5];
  }
예제 #8
0
// Record one frame
long ShutterBug::onCmdRecordFrame(FXObject*,FXSelector,void*){
  FXint curx,cury; FXuint state;
  FXColor *pointer=NULL;
  FXbool ok=false;
  FXWindow *root=getRoot();
  filename=filenameFromFrame(filename,filecount);
  FXTRACE((1,"Snap Frame: %s\n",filename.text()));
  if(grabRectangle(pointer,rectangle)){
    ok=saveImage(filename,pointer,rectangle.w,rectangle.h);
    freeElms(pointer);
    }
  root->getCursorPosition(curx,cury,state);
  if(ok && root->getX()<curx && curx+1<root->getWidth() && root->getY()<cury && cury+1<root->getHeight()){
    getApp()->addTimeout(this,ID_RECORD_FRAME,rate);
    filecount++;
    }
  else{
    showSnapRectangle();
    show();
    }
  return 1;
  }
예제 #9
0
void GMNotifyDaemon::notify(const FXchar * summary,const FXchar * body,FXint timeout,FXImage* image){
  FXint iw,ih,is,ibps,ichannels,isize;
  dbus_bool_t ialpha;

  const FXchar * idata=NULL;

  DBusMessage * msg = method("Notify");
  if (msg){
      DBusMessageIter iter;
      DBusMessageIter array;
      DBusMessageIter dict;
      DBusMessageIter value;
      DBusMessageIter variant;
      DBusMessageIter data;

      dbus_message_iter_init_append(msg,&iter);

        gm_dbus_append_string(&iter,appname);
        dbus_message_iter_append_basic(&iter,DBUS_TYPE_UINT32,&msgid);

        if (image && (flags&IMAGE_WITHOUT_APPICON)) {
          FXString empty;
          gm_dbus_append_string(&iter,empty);
          }
        else {
          gm_dbus_append_string(&iter,appicon);
          }

        dbus_message_iter_append_basic(&iter,DBUS_TYPE_STRING,&summary);
        dbus_message_iter_append_basic(&iter,DBUS_TYPE_STRING,&body);

        dbus_message_iter_open_container(&iter,DBUS_TYPE_ARRAY,DBUS_TYPE_STRING_AS_STRING,&array);
        if (persistent) {
          if (GMPlayerManager::instance()->can_prev())
            gm_dbus_append_string_pair(&array,"media-skip-backward","Previous");
          if (GMPlayerManager::instance()->can_pause())
            gm_dbus_append_string_pair(&array,"media-playback-pause","Pause");
          else if (GMPlayerManager::instance()->can_play())
            gm_dbus_append_string_pair(&array,"media-playback-start","Play");
          if (GMPlayerManager::instance()->can_stop())
            gm_dbus_append_string_pair(&array,"media-playback-stop","Stop");
          if (GMPlayerManager::instance()->can_next())
            gm_dbus_append_string_pair(&array,"media-skip-forward","Next");
          }
        dbus_message_iter_close_container(&iter,&array);


        dbus_message_iter_open_container(&iter,DBUS_TYPE_ARRAY,"{sv}",&array);
        if (image && image->getData()) {
//          const FXchar * icon_data="icon_data"; /// spec 0.9 says "image_data". some use "icon_data" though..
//          const FXchar * icon_data="image-data"; /// spec 0.9 says "image_data". some use "icon_data" though..

          ialpha    = true;
          iw        = image->getWidth();
          ih        = image->getHeight();
          is        = iw*4;
          ibps      = 8;
          ichannels = 4;
          isize     = iw*ih*4;

          FXColor * bgra = NULL;
          allocElms(bgra,(iw*ih));
          gm_bgra_to_rgba(image->getData(),bgra,(iw*ih));

          idata     = (const FXchar*)bgra;

          dbus_message_iter_open_container(&array,DBUS_TYPE_DICT_ENTRY,0,&dict);
            gm_dbus_append_string(&dict,icondata);
            dbus_message_iter_open_container(&dict,DBUS_TYPE_VARIANT,"(iiibiiay)",&variant);
              dbus_message_iter_open_container(&variant,DBUS_TYPE_STRUCT,NULL,&value);
                dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&iw);
                dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&ih);
                dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&is);
                dbus_message_iter_append_basic(&value,DBUS_TYPE_BOOLEAN,&ialpha);
                dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&ibps);
                dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&ichannels);
                dbus_message_iter_open_container(&value,DBUS_TYPE_ARRAY,DBUS_TYPE_BYTE_AS_STRING,&data);
                  dbus_message_iter_append_fixed_array(&data,DBUS_TYPE_BYTE,&idata,isize);
                dbus_message_iter_close_container(&value,&data);
              dbus_message_iter_close_container(&variant,&value);
            dbus_message_iter_close_container(&dict,&variant);
          dbus_message_iter_close_container(&array,&dict);

          freeElms(bgra);
          }

            //gm_dbus_dict_append_bool(&array,"transient",true);

        if (persistent) {
//          if (GMPlayerManager::instance()->playing())
            gm_dbus_dict_append_bool(&array,"resident",true);
//          else
//            gm_dbus_dict_append_bool(&array,"transient",true);
          gm_dbus_dict_append_bool(&array,"action-icons",true);
          }
        dbus_message_iter_close_container(&iter,&array);
        dbus_message_iter_append_basic(&iter,DBUS_TYPE_INT32,&timeout);

      send(msg,this,ID_NOTIFY_REPLY);
      }
    }
예제 #10
0
BufferBase::~BufferBase(){
  freeElms(begptr);
  }